动态代理系统

一个基于LangChain和LangGraph的动态代理系统,集成MCP服务器实现智能路由和执行。

  • by Msalways
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Msalways/mcp-boilerplate

使用说明

MCP代理系统

这个项目实现了一个动态代理系统,该系统利用LangChain和LangGraph与模型上下文协议(MCP)服务器集成,以实现智能路由和执行。

特点/特性

  1. 动态代理流使用LangGraph创建能够根据用户查询动态调整的推理流程
  2. MCP集成连接到各种MCP服务器(天气、股票、Context7)并发现其工具和资源
  3. 智能路由利用大型语言模型(LLM)进行路由查询决策,以将查询路由到合适的MCP服务器
  4. 工具发现自动发现连接到MCP服务器上的可用工具
  5. 资源发现自动发现连接的MCP服务器上的可用资源
  6. 元数据管理MCP工具和资源的全面元数据存储与管理
  7. 标准化工具接口与MCP工具交互的一致性接口
  8. 缓存层缓存大型语言模型(LLM)的响应以优化交易并降低成本
  9. Streamlit 前端交互式网页界面,用于可视化代理流量并管理系统
  10. 数据库准备已准备好与包含结构化元数据的数据库进行集成

建筑学

┌─────────────────┐    ┌────────────────────┐    ┌──────────────────┐
│   Streamlit     │    │   Node.js Proxy    │    │   MCP Servers    │
│   Frontend      │◄──►│   Server           │◄──►│                  │
│                 │    │                    │    │  ┌─────────────┐ │
│                 │    │  ┌─────────────┐   │    │  │ WeatherMCP  │ │
│                 │    │  │ LangGraph   │   │    │  └─────────────┘ │
│                 │    │  │ Agents      │   │    │                  │
│                 │    │  ├─────────────┤   │    │  ┌─────────────┐ │
│                 │    │  │ LLM Caching │   │    │  │ StocksMCP   │ │
│                 │    │  ├─────────────┤   │    │  └─────────────┘ │
│                 │    │  │ MCP Router  │   │    │                  │
│                 │    │  ├─────────────┤   │    │  ┌─────────────┐ │
│                 │    │  │ Tool Reg.   │   │    │  │ Context7    │ │
│                 │    │  ├─────────────┤   │    │  └─────────────┘ │
│                 │    │  │ Metadata    │   │    │                  │
│                 │    │  └─────────────┘   │    └──────────────────┘
└─────────────────┘    └────────────────────┘

组件

后端(Node.js)

  • MCP客户端使用不同的传输方式(HTTP、WebSocket、Stdio)连接到各种MCP服务器
  • LangGraph 代理动态推理流程,用于决定使用哪种MCP工具
  • 大语言模型(LLM)集成通过LangChain集成OpenAI以辅助决策
  • 工具注册表使用元数据集中管理MCP工具
  • 元数据管理器全面工具和资源元数据的存储与检索
  • 缓存系统基于文件的缓存机制,用于大型语言模型(LLM)响应,以优化事务处理
  • REST API为前端交互暴露端点

前端(Streamlit)

  • 代理流可视化展示代理推理的逐步执行过程
  • **MCP Explorer(可译为“MCP浏览器”或根据具体上下文调整为更贴切的名称,如“MCP探索器”等,但“MCP浏览器”较为通用)**显示已连接的MCP服务器及其可用的工具和资源
  • 工具注册表查看所有已注册工具的详细视图,包括元数据
  • 文档查看器所有MCP工具的综合文档
  • 资源浏览器所有可用MCP资源的详细视图
  • 缓存管理器允许查看和清除缓存的大语言模型(LLM)响应

设置

  1. 安装后端依赖项:

    cd backend
    npm install
    
  2. 安装前端依赖项:

    cd frontend
    pip install -r requirements.txt
    
  3. 设置环境变量: 创建一个 .env 后端目录中的文件包含您的API密钥:

    OPENAI_API_KEY=your_openai_api_key
    
  4. 运行后端服务器:

    cd backend
    npm run dev
    
  5. 运行前端:

    cd frontend
    streamlit run main.py
    

API终端点

  • GET /mcp/servers - 列出已连接的MCP服务器
  • GET /mcp/tools - 在所有MCP服务器上发现工具
  • GET /mcp/resources - 发现所有MCP服务器上的资源
  • GET /mcp/metadata - 获取所有MCP服务器的全面元数据
  • POST /mcp/query - 在MCP服务器上执行一个工具
  • POST /mcp/tool-details - 获取特定工具的详细信息
  • POST /mcp/resource-details - 获取特定资源的详细信息
  • POST /reasoning/execute - 执行完整的代理推理流程
  • GET /tools/registry - 获取所有带有元数据的已注册工具
  • GET /tools/signatures - 获取用于大型语言模型(LLM)提示的工具签名
  • GET /tools/documentation - 获取全面的工具文档
  • POST /tools/refresh - 刷新工具注册表
  • GET /metadata/database-structure - 获取适用于数据库的元数据结构
  • GET /cache/stats - 获取缓存统计信息
  • POST /cache/clear - 清除大型语言模型(LLM)的响应缓存

项目结构

.
├── backend/
│   ├── agentic/
│   │   ├── flow.js          # LangGraph agent implementation
│   │   └── reasoning.js     # Reasoning flow execution
│   ├── mcp/
│   │   ├── discovery.js     # MCP tool and resource discovery
│   │   ├── index.js         # MCP exports
│   │   ├── client.js        # MCP client connections
│   │   ├── ai.js            # LLM integration with caching
│   │   ├── router.js        # Query routing
│   │   ├── toolInterface.js # Standardized tool interface
│   │   └── toolRegistry.js  # Tool registry management
│   ├── metadata/
│   │   └── manager.js       # Metadata storage and management
│   ├── utils/
│   │   └── cache.js         # LLM response caching
│   ├── server.js            # Main server with enhanced endpoints
│   └── package.json         # Dependencies
├── frontend/
│   ├── main.py              # Streamlit interface
│   └── requirements.txt     # Python dependencies
├── tasks.py                 # Project tasks
└── README.md                # Project documentation

已实现的关键特性

  1. 动态代理流基于LangGraph的代理,能够根据用户查询动态决定使用哪种MCP工具
  2. 工具与资源发现自动发现连接的MCP服务器上可用的工具和资源
  3. 全面的元数据管理工具和资源的丰富元数据存储,包括参数、返回类型、示例、使用信息和分类
  4. 标准化接口在不同服务器上与MCP工具交互时保持一致的接口
  5. 智能路由利用大型语言模型(LLM)进行路由查询决策,将其分配到合适的MCP服务器
  6. 缓存层基于文件的缓存机制用于大型语言模型(LLM)响应,以优化交易并降低成本
  7. 可视化用于可视化智能体推理过程和全面元数据的Streamlit前端
  8. 数据库准备结构化元数据,已准备好进行数据库集成
  9. 可扩展性模块化设计,便于添加新的MCP服务器、工具和资源

它是如何工作的

  1. 用户通过Streamlit前端提交查询
  2. 查询被发送给LangGraph代理进行处理
  3. 代理使用大型语言模型(LLM)来决定将查询路由到哪个MCP服务器
  4. 代理发现选定MCP服务器上的可用工具和资源
  5. 代理根据查询选择最合适的工具
  6. 代理执行工具并处理结果
  7. 代理使用大型语言模型(LLM)生成最终回复
  8. 所有大型语言模型(LLM)的响应都被缓存起来,以优化未来的交易处理
  9. 整个过程在前端可视化展示,以确保透明度

这一实现为一个代理型MCP(可能是指某种多智能体或模块化计算平台)系统提供了完整的基础,该系统能够动态适应用户查询,并通过缓存优化大语言模型(LLM)的使用。该系统已准备好集成数据库,并且未来可以轻松对接实际的MCP服务器。