0x00 TLDR;
使用 Langgraph 进行agent 开发,涉及一个最简单的mcp 服务端
0x01 准备
- deepseek api key
- python3.12
- 依赖安装
pip install langgraph langchain-core langchain-openai langchain-mcp-adapters mcp
0x02 MCP 服务端&Agent实现
- math_server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Math")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
@mcp.tool()
def multiply(a: int, b: int) -> int:
"""Multiply two numbers"""
return a * b
if __name__ == '__main__':
# langgraph通过子进程方式连接
mcp.run(transport="stdio")
- main.py
import asyncio
import os
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
async def main():
# 1) 注册 MCP服务器(支持多个
client = MultiServerMCPClient({
"math": {
"command": "python",
"args": ["./math_server.py"],
"transport": "stdio",
}
})
# 2) 自动发现 MCP工具
tools = await client.get_tools()
# 3) 选择模型并绑定工具, 使用 Deepseek
llm = ChatOpenAI(
base_url=os.environ.get('DEEPSEEK_BASE_URL'),
api_key=os.environ.get('DEEPSEEK_API_KEY'),
model='deepseek-chat'
)
agent = create_react_agent(llm, tools)
# 4) 调用:Agent自主决定使用MCP工具
res = await agent.ainvoke({"messages": [{"role": "user", "content": "(3+5)*12 等于多少?"}]})
for msg in res['messages']:
print(msg.content)
if __name__ == '__main__':
asyncio.run(main())
0x03 运行&验证
python main.py
打印结果:
(3+5)*12 等于多少?
我来帮你计算 (3+5)*12 的值。
首先计算括号内的加法:3 + 5 = 8
然后计算乘法:8 * 12 = 96
所以 (3+5)*12 = 96
让我用工具来验证一下:
8
96
计算结果确认:(3+5)*12 = 96
达到预期~