使用 LangGraph、FastAPI 和 Streamlit 构建的运行 AI 代理服务的完整工具包

bluesky7天前 ⋅ 295 阅读

项目概述

AI Agent Service Toolkit 是一个用于运行基于 LangGraph、FastAPI 和 Streamlit 构建的 AI 代理服务的完整工具包。该项目提供了一个从代理定义到用户界面的完整设置,使得使用 LangGraph 框架构建和运行自己的代理变得更加容易。

核心功能

  1. LangGraph 代理:使用 LangGraph 框架构建的可定制代理。
  2. FastAPI 服务:提供代理服务,支持流式和非流式端点。
  3. 高级流式传输:支持基于令牌和基于消息的流式传输。
  4. 内容审核:实现 LlamaGuard 进行内容审核(需要 Groq API 密钥)。
  5. Streamlit 界面:提供用户友好的聊天界面以与代理交互。
  6. 多代理支持:在服务中运行多个代理,并通过 URL 路径调用。
  7. 异步设计:使用 async/await 高效处理并发请求。
  8. 反馈机制:集成 LangSmith 的基于星级的反馈系统。
  9. 动态元数据/info 端点提供关于服务和可用代理及模型的动态配置元数据。
  10. Docker 支持:包含 Dockerfile 和 docker-compose 文件,便于开发和部署。
  11. 测试:包含完整的单元测试和集成测试。

项目结构

  • 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 的丰富生态系统。

设置和使用

  1. 克隆仓库
    git clone https://github.com/JoshuaC215/agent-service-toolkit.git
    cd agent-service-toolkit
    
  2. 设置环境变量
    • 创建 .env 文件,至少需要一个 LLM API 密钥或配置。参考 .env.example 文件了解所有可用的环境变量。
  3. 运行服务
    • 使用 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 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)

  1. 创建虚拟环境并安装依赖
    pip install uv
    uv sync --frozen
    source .venv/bin/activate
    
  2. 运行 FastAPI 服务器
    python src/run_service.py
    
  3. 在另一个终端运行 Streamlit 应用
    streamlit run src/streamlit_app.py
    
  4. 在浏览器中访问 Streamlit 提供的 URL(通常是 http://localhost:8501)。

使用 LangGraph Studio 开发

  • 安装 LangGraph Studio,将 .env 文件添加到根目录,然后启动 LangGraph Studio 指向根目录。根据需要自定义 langgraph.json

贡献

  • 运行测试
    1. 确保在项目根目录下并已激活虚拟环境。
    2. 安装开发依赖和 pre-commit 钩子:
      pip install uv
      uv sync --frozen
      pre-commit install
      
    3. 使用 pytest 运行测试:
      pytest
      

定制化

  1. 添加新代理
    • 将新代理添加到 src/agents 目录。可以复制 research_assistant.pychatbot.py 并修改以改变代理的行为和工具。
  2. 导入并添加新代理
    • src/agents/agents.py 中的 agents 字典中导入并添加新代理。代理可以通过 /<your_agent_name>/invoke/<your_agent_name>/stream 调用。
  3. 调整 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 文件。

https://github.com/JoshuaC215/agent-service-toolkit

全部评论: 0

    相关推荐