项目概述
AI Agent Service Toolkit 是一个用于运行基于 LangGraph、FastAPI 和 Streamlit 构建的 AI 代理服务的完整工具包。该项目提供了一个从代理定义到用户界面的完整设置,使得使用 LangGraph 框架构建和运行自己的代理变得更加容易。
核心功能
- LangGraph 代理:使用 LangGraph 框架构建的可定制代理。
- FastAPI 服务:提供代理服务,支持流式和非流式端点。
- 高级流式传输:支持基于令牌和基于消息的流式传输。
- 内容审核:实现 LlamaGuard 进行内容审核(需要 Groq API 密钥)。
- Streamlit 界面:提供用户友好的聊天界面以与代理交互。
- 多代理支持:在服务中运行多个代理,并通过 URL 路径调用。
- 异步设计:使用 async/await 高效处理并发请求。
- 反馈机制:集成 LangSmith 的基于星级的反馈系统。
- 动态元数据:
/info
端点提供关于服务和可用代理及模型的动态配置元数据。 - Docker 支持:包含 Dockerfile 和 docker-compose 文件,便于开发和部署。
- 测试:包含完整的单元测试和集成测试。
项目结构
src/agents/
:定义具有不同功能的多个代理。src/schema/
:定义协议模式。src/core/
:核心模块,包括 LLM 定义和设置。src/service/service.py
:FastAPI 服务,用于提供代理。src/client/client.py
:与代理服务交互的客户端。src/streamlit_app.py
:提供聊天界面的 Streamlit 应用。tests/
:单元测试和集成测试。
为什么选择 LangGraph?
LangGraph 是构建具有明确结构和严格控制的复合 AI 系统的最先进开源框架之一,支持并发执行、图中的循环、流式结果、内置可观测性以及围绕 LangChain 的丰富生态系统。
设置和使用
- 克隆仓库:
git clone https://github.com/JoshuaC215/agent-service-toolkit.git cd agent-service-toolkit
- 设置环境变量:
- 创建
.env
文件,至少需要一个 LLM API 密钥或配置。参考.env.example
文件了解所有可用的环境变量。
- 创建
- 运行服务:
- 使用 Docker:
echo 'OPENAI_API_KEY=your_openai_api_key' >> .env docker compose watch
- 使用 Python:
echo 'OPENAI_API_KEY=your_openai_api_key' >> .env pip install uv uv sync --frozen source .venv/bin/activate python src/run_service.py # 在另一个终端 streamlit run src/streamlit_app.py
- 使用 Docker:
Docker 设置
- 安装 Docker 和 Docker Compose (>= 2.23.0)。
- 构建并以 watch 模式启动服务:
docker compose watch
- 访问 Streamlit 应用:在浏览器中访问
http://localhost:8501
。 - 访问代理服务 API:在浏览器中访问
http://localhost:80
或使用 OpenAPI 文档http://localhost:80/redoc
。 - 停止服务:
docker compose down
本地开发(不使用 Docker)
- 创建虚拟环境并安装依赖:
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
)。
使用 LangGraph Studio 开发
- 安装 LangGraph Studio,将
.env
文件添加到根目录,然后启动 LangGraph Studio 指向根目录。根据需要自定义langgraph.json
。
贡献
- 运行测试:
- 确保在项目根目录下并已激活虚拟环境。
- 安装开发依赖和 pre-commit 钩子:
pip install uv uv sync --frozen pre-commit install
- 使用 pytest 运行测试:
pytest
定制化
- 添加新代理:
- 将新代理添加到
src/agents
目录。可以复制research_assistant.py
或chatbot.py
并修改以改变代理的行为和工具。
- 将新代理添加到
- 导入并添加新代理:
- 在
src/agents/agents.py
中的agents
字典中导入并添加新代理。代理可以通过/<your_agent_name>/invoke
或/<your_agent_name>/stream
调用。
- 在
- 调整 Streamlit 界面:
- 在
src/streamlit_app.py
中调整 Streamlit 界面以匹配代理的功能。
- 在
在 AgentClient 上构建其他应用
- 项目包含一个通用的
src/client/client.AgentClient
,可以用于与代理服务交互。该客户端设计灵活,支持同步和异步调用,以及流式和非流式请求。 - 示例:
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."
贡献指南
- 欢迎提交 Pull Request!
路线图
- 内容审核:使 LlamaGuard 正常工作(需要可靠的托管版本)。
- 研究助理工具:添加更复杂的工具。
- 测试覆盖:增加测试覆盖并添加 CI 管道。
- 多代理支持:支持在同一服务上运行多个代理,包括非聊天代理。
- 服务元数据端点:
/info
端点和动态应用配置。 - 更多想法:提出问题或创建讨论!
许可证
- 该项目在 MIT 许可证下授权,详情见 LICENSE 文件。