多服务器智能代理演示

一个展示如何集成多个模型上下文协议(MCP)服务器与LangChain和LangGraph创建智能代理的项目,该代理能够执行数学运算和天气查询。

  • by Abdul-Rehman6
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Abdul-Rehman6/Custome-MCP-Client-Server

使用说明

MCP LangChain 多服务器演示

一个演示项目,展示了如何将多个模型上下文协议(MCP)服务器与LangChain和LangGraph集成,以创建一个能够执行数学运算和天气查询的智能代理。

概述

这个项目展示了如何:

  • 设置多个MCP服务器(数学和天气)
  • 使用LangChain的MCP适配器将它们连接起来
  • 使用LangGraph创建一个ReAct代理,该代理能够智能地选择和使用合适的工具
  • 在不同领域执行多步骤推理任务

项目结构

.
├── client.py          # Main agent client that orchestrates multiple MCP servers
├── mathserver.py      # MCP server providing mathematical operations
├── weather.py         # MCP server providing weather information
├── main.py            # Legacy/unused file (can be removed)
├── .env               # Environment variables (OpenAI API key)
└── README.md          # This file

特点/特性

数学服务器

  • 添加加两个数
  • 乘以将两个数相乘

天气服务器

  • 获取天气信息获取任何地点的天气信息

智能代理

  • 使用OpenAI的GPT-4o-mini模型
  • 根据用户查询自动选择合适的工具
  • 处理多步推理(例如,“先将3和5相加,然后乘以12”)

先决条件

  • Python 3.8 或更高版本
  • OpenAI API密钥
  • 使用 pip 或 poetry 进行包管理

安装

  1. 克隆仓库:
git clone <repository-url>
cd <repository-name>
  1. 安装所需的依赖项:
pip install langchain-mcp-adapters langgraph langchain-openai python-dotenv mcp
  1. 创建一个 .env 项目根目录下的文件:
OPENAI_API_KEY=your_openai_api_key_here

使用方法

运行客户端以查看代理的运行情况:

python client.py

示例输出

该脚本展示了两种类型的查询:

  1. 数学查询“(3 + 5) x 12等于多少?”

    • 该代理将使用数学服务器的 add 并且 multiply 工具
    • 预期结果:96
  2. 天气查询“加州的天气怎么样?”

    • 该代理将使用天气服务器的 get_weather 工具
    • 返回一个模拟的天气响应

它是如何工作的

1. MCP 服务器

该项目使用FastMCP来创建轻量级的MCP服务器:

  • mathserver.py 翻译为中文是“数学服务器.py”或“数学服务脚本.py”,具体取决于上下文和该文件的具体用途。这里,“mathserver”通常指的是一个提供数学计算或服务的服务器或脚本,“.py”表示这是一个Python脚本文件揭露 add 并且 multiply 作为工具发挥作用
  • **weather.py 翻译成中文是:“天气.py”(这里“weather”表示“天气”,“.py”表示这是一个Python脚本文件)**揭露 get_weather 作为工具的功能

每个服务器独立运行,并通过标准输入/输出(stdio)进行通信。

2. 客户端配置

该 client.py 文件:

  • 初始化 MultiServerMCPClient 两台服务器的配置均已就绪
  • 从两台服务器中检索所有可用工具
  • 使用LangGraph创建一个ReAct代理
  • 向代理发送查询,代理智能地选择和使用适当的工具

3. 代理工作流程

User Query → Agent (GPT-4o-mini) → Tool Selection → MCP Server → Response → Agent → Final Answer

建筑学

┌─────────────────────────────────────────┐
│           client.py                      │
│  ┌───────────────────────────────────┐  │
│  │  MultiServerMCPClient             │  │
│  │  ┌─────────────┐  ┌─────────────┐ │  │
│  │  │   Math      │  │   Weather   │ │  │
│  │  │   Server    │  │   Server    │ │  │
│  │  └─────────────┘  └─────────────┘ │  │
│  └───────────────────────────────────┘  │
│                                          │
│  ┌───────────────────────────────────┐  │
│  │  LangGraph ReAct Agent            │  │
│  │  (GPT-4o-mini)                    │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘

项目延期

为现有服务器添加新工具

编辑 mathserver.py 或者 weather.py:

@mcp.tool()
def subtract(a: int, b: int) -> int:
    """Subtract b from a"""
    return a - b

添加一个新的MCP服务器

  1. 创建一个新的服务器文件(例如。, dateserver.py):
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Date")

@mcp.tool()
def get_current_date() -> str:
    """Get the current date"""
    from datetime import datetime
    return datetime.now().strftime("%Y-%m-%d")

if __name__ == "__main__":
    mcp.run(transport="stdio")
  1. 将其添加到客户端配置中 client.py:
client = MultiServerMCPClient({
    "Math": {...},
    "Weather": {...},
    "Date": {
        "command": "python",
        "args": ["dateserver.py"],
        "transport": "stdio",
    }
})

故障排除

导入错误

确保所有依赖项都已安装:

pip install --upgrade langchain-mcp-adapters langgraph langchain-openai python-dotenv mcp

OpenAI API密钥问题

  • 验证您的 .env 文件包含有效内容 OPENAI_API_KEY
  • 检查密钥是否拥有足够的信用额度

服务器通信问题

  • 确保客户端配置中服务器文件的路径正确
  • 检查Python是否已添加到系统的PATH中
  • 验证服务器文件是否可执行

依赖项

  • langchain-mcp-adapters用于将MCP服务器与LangChain集成的适配器
  • langgraph构建有状态代理的框架
  • langchain-openaiLangChain的OpenAI集成
  • python-dotenv环境变量管理
  • mcp模型上下文协议库

许可证

[此处填写您的许可证]

做出贡献

欢迎贡献!请随时提交拉取请求。

资源

作者

[您的姓名/组织名称]

致谢

  • 针对模型上下文协议的人工智能伦理原则(Anthropic for the Model Context Protocol,可简化为“模型上下文协议的人工智能伦理原则”,但根据语境,“Anthropic的模型上下文协议”或“Anthropic针对模型上下文的协议”也是可接受的表述,具体取决于强调的重点)
  • LangChain团队,感谢你们提供的出色工具
  • 用于语言模型的OpenAI