这份教程对应课件最后的作业:使用 LangGraph 构建一个多角色协作旅行规划 Agent,并通过 MCP 动态调用工具,生成包含行程、住宿和景点推荐的个性化旅行方案。
建议交三部分:
travel_mcp_server.py、travel_agent_langgraph.py、.env.example、requirements.txt。一句话:
可以把它们放到一条链路里看:
用户提问
→ 大模型判断需要工具
→ Function Calling 生成工具调用意图
→ MCP Client 把这个意图发给 MCP Server
→ MCP Server 真正执行工具
→ 工具结果返回给模型
→ 模型组织自然语言答案
所以 MCP 不是 Function Calling 的替代品。它们是上下游协作关系:Function Calling 更靠近模型,MCP 更靠近工具基础设施。
因为你还没有注册高德 API Key,第一版不要卡在高德那里。我们先做一个本地模拟旅行 MCP Server:
travel_mcp_server.py:提供交通、酒店、景点、预算 4 个 MCP Tool。travel_agent_langgraph.py:用 LangGraph 编排 4 个角色:
这样能完整体现:
在当前目录执行:
python -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
如果你使用 uv:
uv pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
复制 .env.example 为 .env:
Copy-Item .env.example .env
然后打开 .env,填写:
DEEPSEEK_API_KEY=你的 DeepSeek API Key
注意,这里需要的是 DeepSeek 的大模型 Key,不是高德地图 Key。
打开 travel_mcp_server.py。核心是:
mcp = FastMCP(name="travel-tools")
然后用:
@mcp.tool()
def search_transport(...):
...
把普通 Python 函数注册成 MCP Tool。
这个 Server 最后用 stdio 启动:
mcp.run(transport="stdio")
stdio 的好处是:不需要你单独打开一个服务窗口,Client 会自动启动它。
执行:
python travel_agent_langgraph.py
正常情况下你会先看到:
已从 MCP Server 动态发现工具: ['search_transport', 'search_hotels', ...]
这就说明 MCP Client 已经从 Server 拉到了工具列表。
然后程序会输出最终旅行方案。
在 travel_agent_langgraph.py 里找到:
user_request = (
"我想从成都出发去重庆玩 3 天 2 晚..."
)
你可以改成:
user_request = (
"我想从上海出发去杭州玩 2 天 1 晚,2 个人,预算 1800 元以内。"
"喜欢自然风景、拍照和慢节奏城市漫步。"
)
如果你换了代码里没有收录的城市,工具会给出通用策略;这不是错误,而是模拟数据不完整。
你可以这样写:
本项目实现了一个基于 LangGraph 的多角色旅行规划 Agent。
系统包含交通规划师、住宿规划师、景点体验规划师、预算规划师四个角色,
每个角色都通过 MCP Client 动态获取 travel-tools MCP Server 暴露的工具。
MCP Server 提供 search_transport、search_hotels、recommend_attractions、
estimate_trip_budget 等工具。Agent 不需要在代码里手写工具 schema,
而是在运行时通过 MCP 动态发现工具,再由大模型通过 Function Calling 判断何时调用。
最终,总规划师节点汇总各角色结果,生成包含行程、住宿、景点和预算的个性化旅行方案。
等你注册高德 API Key 后,可以把本地模拟工具替换为高德官方 MCP。
常见的高德 MCP Streamable HTTP 地址格式是:
https://mcp.amap.com/mcp?key=你的高德key
如果高德或 ModelScope 服务页面给了不同 endpoint,以服务页面为准。对应配置参考 travel_agent_amap_example.py。
老师给的 ModelScope MCP 广场地址是:
https://modelscope.cn/mcp
你可以在里面搜索地图、搜索、酒店、火车票等 MCP 服务。如果服务页面提供 SSE 或 HTTP Endpoint,就能放进 MultiServerMCPClient。