项目简介

这是一个用于构建大型语言模型 (LLM) 应用的模板项目。它结合了Model Context Protocol (MCP) 服务器、LangGraph 和 FastAPI,提供了一个结构化的框架来管理LLM的上下文、调用外部工具、编排复杂的代理工作流程以及提供HTTP API接口。

该模板包含一个独立的 MCP 服务器组件,用于托管资源和工具,以及一个 FastAPI 后端,该后端作为 MCP 客户端与本地 MCP 服务器交互,并通过 LangGraph 组织LLM的决策和行为。

主要功能点

  • MCP服务器实现: 包含一个独立的 MCP 服务器组件,能够注册和提供工具(如数学计算)及资源(如个性化问候)给LLM客户端使用。
  • LangGraph代理编排: 利用 LangGraph 构建和管理LLM代理的工作流程,支持复杂的决策逻辑、状态管理和对话历史持久化。
  • 工具调用能力: LLM代理能够通过 MCP 服务器发现和调用外部工具,扩展其功能。
  • 数据上下文集成: 通过 MCP 的资源机制,LLM可以访问和利用结构化或非结构化的数据作为上下文。
  • FastAPI应用后端: 提供 RESTful API 接口,用于接收用户请求(如聊天消息),触发LangGraph工作流,并与MCP服务器通信。
  • 数据库支持: 集成 SQLModel 和 PostgreSQL (通过 Supabase) 用于数据持久化和LangGraph检查点存储。
  • 模块化架构: 将 MCP 服务器、FastAPI 应用、数据库等组件分离,便于开发和维护。

安装步骤

本项目使用 Docker 和 Docker Compose 进行容器化部署。

  1. 获取代码: 克隆本仓库到本地。
  2. 构建镜像:
    • 首先,使用仓库提供的脚本构建社区 Youtube MCP 镜像(如果需要):
      ./community/youtube/build.sh
    • 然后,构建项目自身的 Docker 镜像:
      docker compose -f compose-dev.yaml build
  3. 配置环境变量:
    • 复制 '.env.sample' 文件并重命名为 '.env'。
    • 根据您的实际情况编辑 '.env' 以及 './envs/backend.env', './envs/youtube.env' 文件,填入必要的 API 密钥(如 OpenAI API Key, Youtube API Key)和数据库连接字符串(PostgreSQL DSN)。
  4. 加载环境变量: 在终端中加载环境变量(兼容 bash 和 zsh):
    set -a; for env_file in ./envs/*; do source $env_file; done; set +a
  5. 启动服务: 使用 Docker Compose 以后台模式启动所有服务容器:
    docker compose up -d

服务启动后,FastAPI 应用通常会在本地的某个端口(具体取决于您的 Docker Compose 配置和 Nginx 设置)提供服务,而 MCP 服务器则作为内部服务运行。

服务器配置 (供 MCP 客户端参考)

本项目包含一个作为独立服务运行的 MCP 服务器。一个标准的 MCP 客户端需要知道如何连接到它。

  • 服务器名称 (server name): 在代码中配置的 MCP 服务器名称是 '"MCP Server"'。
  • 连接方式: 该 MCP 服务器组件配置为使用 SSE (Server-Sent Events) 作为传输协议。
  • 连接地址: MCP 客户端需要连接到 MCP 服务器的 SSE 端点 URL。在 Docker 内部网络中,FastAPI 服务通过服务名 'mcp' 和端口 '8050' 访问该服务器的 '/sse' 路径(即 'http://mcp:8050/sse')。外部客户端连接地址取决于您的部署方式,例如是否通过 Nginx 暴露服务以及暴露的端口和路径。客户端连接时需要使用这个暴露的 HTTP 或 HTTPS 地址。

通常,MCP 客户端的配置会包含服务器名称和连接方式/地址等信息。

基本使用方法

启动服务后,您可以通过访问 FastAPI 应用的 HTTP API 端点来与系统交互:

  • 与LangGraph代理聊天: 向 '/v1/chat/agent' 端点发送 GET 请求,并在 'query' 参数中提供用户消息。服务器将启动一个 LangGraph 工作流来处理请求,并可能利用从本地 MCP 服务器获取的工具和资源。结果将通过 SSE 流式返回。
  • 获取MCP工具列表: 向 '/v1/mcps/list-tools' 端点发送 GET 请求,获取 MCP 服务器注册的所有工具列表及其描述。
  • 调用MCP工具: 向 '/v1/mcps/call-tool' 端点发送 POST 请求,并在请求体中指定 'tool_name' 和 'arguments' 来直接调用 MCP 服务器上的工具。
  • 清空检查点: 向 '/v1/checkpoints/truncate' 端点发送 DELETE 请求,清空 LangGraph 在数据库中存储的所有会话检查点(请谨慎操作)。

具体 API 接口和请求/响应格式可以参考 FastAPI 提供的 Swagger UI 文档(如果已启用)。

信息

分类

AI与计算