帮助开发者用 Python 快速搭建和运行基于 LangGraph 框架的 AI 代理服务。它结合 FastAPI、Streamlit 和 Pydantic 等技术栈,提供了用户界面、自定义 Agent、流式传输等功能,并集成了内容审核(LlamaGuard)和用户反馈机制(LangSmith),极大地简化了 AI Agent 应用的开发和优化过程。
系统架构
主要功能
- LangGraph 代理:使用 LangGraph 框架构建的可自定义代理。
- FastAPI 服务:为代理提供流式处理和非流式处理终结点。
- Advanced Streaming:一种同时支持基于令牌和基于消息的流式处理的新方法。
- 内容审核:实现 LlamaGuard 进行内容审核(需要 Groq API 密钥)。
- Streamlit Interface(流式接口):提供用户友好的聊天界面,用于与代理交互。
- 多 Agent 支持:在服务中运行多个 Agent 并通过 URL 路径调用
- 异步设计:利用 async/await 高效处理并发请求。
- 反馈机制:包括与 LangSmith 集成的基于星星的反馈系统。
- Dynamic Metadata: endpoint 提供有关服务以及可用代理和模型的动态配置元数据。
/info
- Docker 支持:包括 Dockerfile 和 docker compose 文件,以便于开发和部署。
- 测试:包括针对完整存储库的强大单元和集成测试。
安装和使用
-
克隆存储库:
git clone https://github.com/JoshuaC215/agent-service-toolkit.git cd agent-service-toolkit
-
设置环境变量: 在根目录中创建一个文件。至少需要一个 LLM API 密钥或配置。有关可用环境变量的完整列表,请参阅 .env.example 文件,包括各种模型提供程序 API 密钥、基于标头的身份验证、LangSmith 跟踪、测试和开发模式以及 OpenWeatherMap API 密钥。
.env
-
现在,您可以使用 Docker 或仅使用 Python 在本地运行代理服务和 Streamlit 应用程序。建议使用 Docker 设置,以简化环境设置,并在更改代码时立即重新加载服务。
构建或自定义您自己的代理
要针对您自己的使用案例自定义代理,请执行以下作:
- 将新代理添加到目录中。您可以复制或修改它以更改代理的行为和工具。
src/agentsresearch_assistant.pychatbot.py
- 在 中导入新代理并将其添加到字典中。您的代理可以由 或 调用。
agentssrc/agents/agents.py/<your_agent_name>/invoke/<your_agent_name>/stream
- 调整 Streamlit 界面以匹配您的代理的功能。
src/streamlit_app.py
Docker 设置
该项目包括一个 Docker 设置,以便于开发和部署。该文件定义了两个服务:和 .for each 位于各自的目录中。compose.yamlagent_servicestreamlit_appDockerfile
对于本地开发,我们建议使用 docker compose watch。此功能可在源代码中检测到更改时自动更新容器,从而提供更流畅的开发体验。
-
确保您的系统上安装了 Docker 和 Docker Compose (>=2.23.0)。
-
在监视模式下构建并启动服务:
docker compose watch
-
现在,当您更改代码时,这些服务将自动更新:
- 相关 python 文件和目录中的更改将触发相关服务的更新。
- 注意:如果对 或 文件进行更改,则需要通过运行 .
pyproject.tomluv.lockdocker compose up --build
-
通过在 Web 浏览器中导航到 来访问 Streamlit 应用程序。
http://localhost:8501
-
代理服务 API 将在 上提供。您还可以使用 OpenAPI 文档。
http://0.0.0.0:8080http://0.0.0.0:8080/redoc
-
用于停止服务。
docker compose down
此设置允许您实时开发和测试更改,而无需手动重新启动服务。
在 AgentClient 上构建其他应用程序
存储库包括可用于与代理服务交互的泛型。此客户端设计为灵活,可用于在代理之上构建其他应用程序。它支持同步和异步调用,以及流式处理和非流式处理请求。src/client/client.AgentClient
有关如何使用 .一个简单的例子:src/run_client.pyAgentClient
from client import AgentClient
client = AgentClient()
response = client.invoke("Tell me a brief joke?")
response.pretty_print()
# ================================== Ai Message ==================================
#
# A man walked into a library and asked the librarian, "Do you have any books on Pavlov's dogs and Schrödinger's cat?"
# The librarian replied, "It rings a bell, but I'm not sure if it's here or not."
使用 LangGraph Studio 进行开发
该代理支持 LangGraph Studio,这是一个用于在 LangGraph 中开发代理的新 IDE。
您只需安装 LangGraph Studio,如上所述将文件添加到根目录,然后启动指向根目录的 LangGraph Studio。根据需要进行自定义。.envlanggraph.json
使用 Ollama
⚠️ ***注意:*agent-service-toolkit 中的 Ollama 支持是实验性的,可能无法按预期工作。以下说明已在 MacBook Pro 上使用 Docker Desktop 进行了测试。请为您遇到的任何挑战提交问题。
您还可以使用 Ollama 运行为代理服务提供支持的 LLM。
- 按照 https://github.com/ollama/ollama 中的说明安装 Ollama
- 安装您要使用的任何模型,例如 并将环境变量设置为您要使用的模型,例如
ollama pull llama3.2OLLAMA_MODELOLLAMA_MODEL=llama3.2
如果您在本地运行服务(例如 ),您应该已全部设置完毕!python src/run_service.py
如果您在 Docker 中运行该服务,您还需要:
- 按照此处的说明配置 Ollama 服务器,例如在 MacOS 上运行并重新启动 Ollama。
launchctl setenv OLLAMA_HOST "0.0.0.0"
- 将环境变量设置为 Ollama 服务器的基 URL,例如
OLLAMA_BASE_URLOLLAMA_BASE_URL=http://host.docker.internal:11434
- 或者,您可以在 Docker 中运行镜像并使用类似的配置(但在某些情况下可能会更慢)。
ollama/ollama
不使用 Docker 的本地开发
您还可以在没有 Docker 的情况下在本地运行代理服务和 Streamlit 应用程序,只需使用 Python 虚拟环境即可。
-
创建虚拟环境并安装依赖项:
pip install uv uv sync --frozen source .venv/bin/activate
-
运行 FastAPI 服务器:
python src/run_service.py
-
在单独的终端中,运行 Streamlit 应用程序:
streamlit run src/streamlit_app.py
-
打开浏览器并导航到 Streamlit 提供的 URL(通常为 )。
http://localhost:8501