LangChain:MCP 的 AI Agent 实战
·
🚀 基于 LangGraph + MCP 的 AI Agent 实战:从 0 搭建一个天气查询工具系统(2026最新版)
📌 一、项目背景
在传统的 LangChain Agent 开发中,我们通常会把工具(Tool)直接写在代码里,例如:
- 天气查询函数
- 搜索函数
- 文件操作函数
这种方式虽然简单,但存在明显问题:
- ❌ 工具无法复用
- ❌ Agent 与工具强耦合
- ❌ 不适合多 Agent 系统
- ❌ 难以工程化扩展
为了解决这些问题,本项目使用:
🔥 MCP(Model Context Protocol) + LangGraph + DeepSeek LLM
构建一个可扩展的工具服务化 AI Agent 系统。
🧠 二、系统架构设计
整体架构如下:
用户
↓
LangGraph Agent(大脑)
↓
MCP Client(工具调度器)
↓
MCP Server(天气工具服务)
↓
OpenWeather API(真实数据源)
🧩 核心思想
| 组件 | 作用 |
|---|---|
| MCP Server | 提供工具能力(天气查询) |
| MCP Client | 发现并调用工具 |
| LangGraph Agent | 负责推理与决策 |
| LLM(DeepSeek) | 负责语言理解与生成 |
⚙️ 三、环境准备
1️⃣ 安装依赖
pip install langchain langgraph langchain-mcp-adapters loguru httpx python-dotenv
2️⃣ 配置环境变量(.env)
DEEPSEEK_API_KEY=你的key
OPENWEATHER_API_KEY=你的key
3️⃣ MCP 配置文件(mcp.json)
{
"mcpServers": {
"weather": {
"url": "http://127.0.0.1:8000/sse",
"transport": "sse"
}
}
}
🌩️ 四、MCP Server(工具服务端)
📌 代码:weather_server.py
import json
import os
import httpx
from dotenv import load_dotenv
from loguru import logger
from mcp.server.fastmcp import FastMCP
load_dotenv()
# 创建 MCP Server
mcp = FastMCP("WeatherServerSSE", host="0.0.0.0", port=8000)
@mcp.tool()
def get_weather(city: str) -> str:
"""
查询指定城市天气
"""
url = "https://api.openweathermap.org/data/2.5/weather"
params = {
"q": city,
"appid": os.getenv("OPENWEATHER_API_KEY"),
"units": "metric",
"lang": "zh_cn"
}
resp = httpx.get(url, params=params, timeout=10)
data = resp.json()
logger.info(f"{city} 天气查询成功")
return json.dumps(data, ensure_ascii=False)
if __name__ == "__main__":
logger.info("🚀 MCP Weather Server 启动中...")
mcp.run(transport="sse")
📌 作用
👉 将“天气查询能力”封装成可远程调用的工具服务
🔗 五、MCP Client + LangGraph Agent
📌 代码:client.py
import asyncio
import json
import os
from dotenv import load_dotenv
from loguru import logger
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain.chat_models import init_chat_model
load_dotenv(override=True)
def load_servers(file_path="mcp.json"):
with open(file_path, "r", encoding="utf-8") as f:
return json.load(f)["mcpServers"]
async def main():
# 1️⃣ 加载 MCP Server
servers = load_servers()
# 2️⃣ 创建 MCP Client
client = MultiServerMCPClient(servers)
# 3️⃣ 获取 tools
tools = await client.get_tools()
logger.info(f"🧩 Tools: {[t.name for t in tools]}")
# 4️⃣ 初始化 LLM(DeepSeek)
llm = init_chat_model(
"deepseek-chat",
model_provider="deepseek",
api_key=os.getenv("DEEPSEEK_API_KEY")
)
# 5️⃣ 创建 Agent
agent = create_react_agent(llm, tools)
logger.info("🤖 MCP Agent 已启动")
# 6️⃣ 交互循环
while True:
query = input("\n用户: ").strip()
if query.lower() == "quit":
break
result = await agent.ainvoke({
"messages": [("user", query)]
})
print("\nAI:", result["messages"][-1].content)
if __name__ == "__main__":
asyncio.run(main())
📌 作用
👉 这是整个系统的“大脑 + 工具调度中心”
🔁 六、运行流程解析
一次完整请求流程如下:
用户输入问题
↓
LangGraph Agent(理解问题)
↓
判断需要调用工具
↓
MCP Client 获取 get_weather
↓
调用 MCP Server
↓
请求 OpenWeather API
↓
返回天气数据
↓
LLM总结输出结果
🔥 七、关键技术点总结
1️⃣ MCP(核心升级点)
相比传统 tool:
| 方式 | 特点 |
|---|---|
| 本地 tool | 耦合强 |
| MCP tool | 服务化、可复用 |
2️⃣ LangGraph Agent
替代传统:
- AgentExecutor ❌
- ReAct 手动循环 ❌
使用:
- create_react_agent ✅
3️⃣ Async 全链路
必须统一:
- MCP tools → async
- Agent → ainvoke
- pipeline → async
🧠 八、总结
本项目完成了一个完整的:
🚀 基于 MCP + LangGraph 的工具化 AI Agent 系统
实现了:
- 工具服务化(MCP Server)
- 工具自动发现(MCP Client)
- AI推理调度(LangGraph)
- 多工具协同调用
更多推荐

所有评论(0)