多工具AI代理系统

一个基于LangChain和LangGraph的AI代理系统,通过MCP协议连接数学和天气工具,实现外部服务的结构化调用。

  • by SeydinaBANE
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 SeydinaBANE/Server_mcp

使用说明

🤖 服务器MCP-具有数学和天气工具的Langgraph代理

🎯 教育目标 :本项目旨在演示如何使用协议 MCP(模型上下文协议) 要将IA代理连接到外部工具,请使用两种类型的传输: stdio 和 streamable_http.

基于AI代理的项目 LangChain, LangGraph 和协议 MCP(模型上下文协议),通过MCP服务器将Groq LLM模型连接到外部工具,并通过 朗匠 和 浪伏.

MCP怎么样?

乐 模型上下文协议 是一个开放标准,允许LLM以结构化方式与外部工具(MCP服务器)通信。它定义了代理如何发现、调用和接收远程工具的结果,无论使用何种语言或平台。

本项目说明了两种MCP通信模式:

|运输|用例124本项目中的示例| |---|---|---| | stdio |本地工具,由客户启动| mathserver.py | | streamable_http |远程工具,独立服务器| weather.py |


📁 项目结构

Server_mcp/
├── src/
│   ├── client.py          # Agent principal (LangGraph + Groq)
│   ├── mathserver.py      # Serveur MCP — outils mathématiques (stdio)
│   └── weather.py         # Serveur MCP — outil météo (streamable_http)
├── .env                   # Clés API (non versionné)
├── .env.example           # Modèle de variables d'environnement
├── .gitignore
├── .python-version        
├── .venv/                
├── pyproject.toml         # Configuration du projet
├── requitements.txt      
├── uv.lock               
└── README.md

⚙️ 先决条件

  • Python 3.11+(参见 .python-version)
  • 紫外线 -软件包管理器(推荐)
  • 一个帐户 格罗克 对于LLM API密钥
  • 一个帐户 朗匠 pour le追踪
  • 一个帐户 浪伏 为了可观察性

🚀 安装

与 uv (推荐)

cd Server_mcp
uv sync

与 pip 经典的

cd Server_mcp
python -m venv .venv
source .venv/bin/activate  # Sur Windows : .venv\Scripts\activate
pip install -r requitements.txt

配置环境变量

复制文件 .env.example 并填写以下值:

cp .env.example .env

内容 .env :

# LLM
GROQ_API_KEY=votre_clé_groq_ici

# LangSmith (tracing & évaluation)
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=votre_clé_langsmith_ici
LANGCHAIN_PROJECT=server_mcp

# Langfuse (observabilité & analytics)
LANGFUSE_PUBLIC_KEY=votre_clé_publique_langfuse_ici
LANGFUSE_SECRET_KEY=votre_clé_secrète_langfuse_ici
LANGFUSE_HOST=https://cloud.langfuse.com

🧩 建筑

本项目使用两种类型的MCP传输:

文件 传输 启动
src/mathserver.py stdio 通过客户端自动
src/weather.py streamable_http 端口8000手册
src/client.py
    ├── MultiServerMCPClient
    │       ├── math (stdio)    → src/mathserver.py
    │       └── weather (http)  → src/weather.py :8000
    ├── ChatGroq (openai/gpt-oss-120b)
    ├── create_agent (LangChain)
    ├── LangSmith  ──────────────────────→ smith.langchain.com
    └── Langfuse   ──────────────────────→ cloud.langfuse.com

📊 可观察性

朗匠

自动跟踪所有代理调用、MCP工具调用和模型响应。可访问 smith.langchain.com 在项目下 server_mcp.

浪伏

提供有关LLM响应的成本、延迟和质量的详细分析。可访问 cloud.langfuse.com.


🛠️ 可用工具

数学服务器(src/mathserver.py)

工具 描述 设置
add 加上两个数字 a: float, b: float
subtract 减去两个数字 a: float, b: float

天气服务器(src/weather.py)

工具 描述 设置
get_weather 返回城市的天气 location: str

▶️ 启动项目

步骤1-启动天气服务器(终端1)

source .venv/bin/activate
python src/weather.py

服务器启动于 http://127.0.0.1:8000/mcp

步骤2-启动代理客户端(终端2)

source .venv/bin/activate
python src/client.py

预期结果

Les outils disponibles: ['add', 'subtract', 'get_weather']
La réponse à votre question: (4+5) = 9 et (54-50) = 4

🐛 常见错误

错误 原因 解决方案
Missing 'transport' key Clé transport 配置中不存在 添加 "transport": "stdio" 或 "streamable_http"
SyntaxError: forgot a comma print("texte" variable) 添加逗号: print("texte", variable)
object dict can't be used in await 利用率 .invoke() au lieu de .ainvoke() 替换为 await agent.ainvoke(...)
streamable-http 无法识别 破折号而不是下划线 streamable_http
GitHub推送被阻止 .env 提交密钥 撤销密钥,删除 .env Git历史

📚 使用的技术


👤 作者

BANE Seydina Mouhamet