该存储库展示了构建在 Llama Stack 之上的应用程序示例。从 Llama 3.1 开始,您可以构建具有以下功能的代理应用程序:
分解任务并执行多步骤推理。
使用工具执行某些操作
内置:模型具有搜索或代码解释器等工具的内置知识
零样本:模型可以学习使用以前未见过的上下文工具定义来调用工具
使用 Llama Guard 等模型提供系统级安全保护。
笔记
Llama Stack API 仍在不断发展并且可能会发生变化。请随意构建和实验,但请不要依赖它的稳定性!
代理应用程序需要一些组件:
对底层 Llama 系列模型进行推理的能力
使用 Llama Guard 系列模型进行安全检查的能力
执行工具(包括代码执行环境)以及使用模型的多步骤推理过程进行循环的能力
所有这些组件现在均由单个 Llama Stack 发行版提供。 Llama Stack 定义并标准化了这些组件以及使构建生成式 AI 应用程序更加顺利所需的许多其他组件。然后,这些 API 的各种实现通过Llama Stack Distribution组装在一起。
要开始使用 Llama Stack Apps,您需要:
安装先决条件
启动 Llama Stack 服务器
将您的客户端代理应用程序连接到 Llama Stack 服务器
启动后,您只需将代理应用程序指向该服务器的 URL(例如http://localhost:5000
)。
Python 包
我们建议创建一个隔离的 conda Python 环境。
# 创建并激活虚拟环境ENV=stack conda create -n $ENV python=3.10cd <path-to-llama-stack-apps-repo>conda activate $ENV# 安装依赖项 pip install -r requests.txt
这将安装 (1) 构建并启动 Llama Stack 服务器 (2) 将客户端应用程序连接到 Llama Stack 服务器所需的所有依赖项。
请参阅我们的 llama-stack 存储库的开发人员指南,了解如何设置 Llama Stack 发行版和运行服务器来为 API 端点提供服务。您应该有一个用于构建客户端应用程序的服务器端点。
一旦你的服务器启动,你应该看到输出——
... Serving POST /agentic_system/session/delete Serving POST /agentic_system/session/get Serving POST /agentic_system/step/get Serving POST /agentic_system/turn/get Serving GET /telemetry/get_trace Serving POST /telemetry/log_event Listening on :::5000 INFO: Started server process [587053] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://[::]:5000 (Press CTRL+C to quit)
我们构建了用于与 Stack 服务器交互的示例演示脚本。
当服务器运行时,您可以运行来测试一个简单的代理
python -m examples.agents.hello localhost 5000
您将看到以下形式的输出——
> created agents with agent_id=d050201b-0ca1-4abd-8eee-3cba2b8c0fbc User> Hello shield_call> No Violation inference> How can I assist you today? shield_call> No Violation User> Which players played in the winning team of the NBA western conference semifinals of 2024, please use tools shield_call> No Violation inference> brave_search.call(query="NBA Western Conference Semifinals 2024 winning team players") tool_execution> Tool:brave_search Args:{'query': 'NBA Western Conference Semifinals 2024 winning team players'} tool_execution> Tool:brave_search Response:{"query": "NBA Western Conference Semifinals 2024 winning team players", "top_k": [{"title": "2024 NBA Western Conference Semifinals - Mavericks vs. Thunder | Basketball-Reference.com", "url": "https://www.basketball-reference.com/playoffs/2024-nba-western-conference-semifinals-mavericks-vs-thunder.html", "description": "Summary and statistics for the <strong>2024</strong> <strong>NBA</strong> <strong>Western</strong> <strong>Conference</strong> <strong>Semifinals</strong> - Mavericks vs. Thunder", "type": "search_result"}, {"title": "2024 NBA playoffs - Wikipedia", "url": "https://en.wikipedia.org/wiki/2024_NBA_playoffs", "description": "Aged 20 years and 96 days old, ... youngest <strong>player</strong> <strong>in</strong> <strong>NBA</strong> history to record 10+ points and 15+ rebounds in a playoff game, coming during game 6 of the Maverick's <strong>Western</strong> <strong>Conference</strong> <strong>Semifinal</strong> <strong>win</strong> against the Thunder on May 18. The Timberwolves overcame a 20u2013point deficit to <strong>win</strong> game 7 against the Nuggets, the largest game 7 comeback in <strong>NBA</strong> playoffs history. With the defending champion Nuggets losing to the Minnesota Timberwolves, the <strong>2024</strong> playoffs marked ...", "type": "search_result"}, {"title": "2024 NBA Playoffs | Official Bracket, Schedule and Series Matchups", "url": "https://www.nba.com/playoffs/2024", "description": "The official site of the <strong>2024</strong> <strong>NBA</strong> Playoffs. Latest news, schedules, matchups, highlights, bracket and more.", "type": "search_result"}]} shield_call> No Violation inference> The players who played in the winning team of the NBA Western Conference Semifinals of 2024 are not specified in the search results provided. However, the search results suggest that the Mavericks played against the Thunder in the Western Conference Semifinals, and the Mavericks won the series. shield_call> No Violation
现在 Stack 服务器已设置完毕,下一步就是使用代理 API 运行代理应用程序。
我们构建了示例脚本、笔记本和 UI 聊天界面(使用 Gradio!)来帮助您入门。
启动应用程序(本地)并通过运行以下命令与其交互:
PYTHONPATH=. python 示例/agent_store/app.py 本地主机 5000
这将启动一个 mesop 应用程序,您可以转到localhost:7860
来玩聊天界面。
或者,您可以为自定义工具设置 API 密钥:
WolframAlpha:存储在WOLFRAM_ALPHA_API_KEY
环境变量中
Brave Search:存储在BRAVE_SEARCH_API_KEY
环境变量中
您可能会在 Agent Store README.md 中看到其他交互方式
注意:确保堆栈服务器仍在运行。
cd <path-to-llama-agentic-system>conda activate $ENVllama stack run <name> # 如果尚未启动PYTHONPATH=. python -m example.agents.rag_with_memory_bank 本地主机 5000
您应该看到输出到 stdout 的形式 --
环境:ipython 工具:brave_search、wolfram_alpha、photogen 切削知识日期:2023 年 12 月 今天日期:2024 年 7 月 23 日 用户> 我正计划去瑞士旅行,最值得参观的 3 个地方是什么?最终 Llama Guard 响应shield_type=<BuiltinShield.llama_guard: 'llama_guard'> is_violation=False Violation_type=None Violation_return_message=None 跑 PromptGuardShield 并得到分数:嵌入式:0.9999765157699585,恶意:1.1110752893728204e-05 StepType.shield_call> 没有违规 role='user' content='我计划去瑞士旅行,最值得参观的三个地方是哪些?'StepType.inference> 瑞士是一个美丽的国家,拥有丰富的历史、文化和自然美景。以下是您的行程中必须添加的三个必去景点:......
提示您可以选择在脚本中执行
--disable-safety
以避免始终运行安全防护。
如果您有疑问,请随时与我们联系。
查看我们用于连接 Llama Stack 服务器的客户端 SDK,您可以选择 python、node、swift 和 kotlin 编程语言来快速构建您的应用程序。
笔记
虽然您可以使用venv
运行应用程序,但安装发行版需要 conda。
# 创建并激活虚拟环境python3 -m venv venvsource venv/bin/activate
# 创建并激活虚拟环境python -m venv venv venvScriptsactivate # 对于命令提示符# or.venvScriptsActivate.ps1 # 对于 PowerShell# orsource venvScriptsactivate # 对于 Git
此后的说明(包括用于安装依赖项的pip install -r requirements.txt
)保持不变。