旅游规划多智能体实战
这一节我们设计一个轻量级控制台项目,目标不是做复杂旅游平台,而是用最少的工程复杂度,把 DeepAgents + Skill + MCP + 多智能体协作 这条主线讲清楚。
项目主题:
做一个“旅游规划助手”,用户输入一句自然语言需求,系统自动完成:
- 景点筛选与路线建议
- 火车票方案与预算估算
- 最终旅行方案汇总
本项目采用 **方案 **:
1 个主智能体3 个子智能体1 个高德 Skill1 个 12306 MCP Server1 个控制台入口
1. 项目目标
用户只需要在控制台输入一句话,例如:
系统自动输出:
- 用户需求摘要
- 推荐景点列表
- 12306 火车出行建议
- 预算估算
- 推荐行程安排
- 地图二维码或地图链接
2. 整体架构
核心思想:
- 主智能体负责拆任务,不亲自做所有细节
- 地图子智能体负责空间与景点问题
- 车票子智能体负责铁路出行问题
- 汇总子智能体负责最终结构化整理
这正是 DeepAgents 最适合演示的场景:一个总控 + 多个专家 + 外部能力接入。
3. 智能体职责拆解
3.1 主智能体(main_agent)
主智能体是整个系统的总控,负责:
- 解析用户输入中的关键约束
- 拆分任务给不同子智能体
- 收集结果
- 输出最终旅行方案
主智能体重点提取的信息:
- 出发地
- 目的地
- 出行日期
- 天数
- 预算
- 偏好(美食 / 景点 / 轻松 / 人文 / 亲子等)
- 节奏(少走路 / 紧凑 / 慢节奏)
3.2 地图子智能体(map_agent)
地图子智能体只负责“地理相关问题”,例如:
- 推荐景点
- 分析景点分布
- 给出游玩区域建议
- 生成路线或地图结果
- 输出高德个人地图二维码
它接入的能力来自 ModelScope Skill:
https://www.modelscope.cn/skills/Gaodekaifangpingtai/personal-map
这个 Skill 非常适合本项目,因为它本身就支持:
- POI 搜索
- 周边搜索
- 路径规划
- 地图生成
- 二维码分享
3.3 车票子智能体(ticket_agent)
车票子智能体只负责“铁路出行问题”,例如:
- 查询 12306 车次
- 选择直达或中转方案
- 给出票价区间
- 给出往返交通预算
- 提示出发与返程时间建议
它接入的能力来自 ModelScope MCP:
https://www.modelscope.cn/mcp/servers/@Joooook/12306-mcp
当前这个 MCP 适合做的事情包括:
- 查询车票
- 过滤列车信息
- 过站查询
- 中转查询
3.4 汇总子智能体(summary_agent)
汇总子智能体不直接查外部数据,它只做一件事:
把地图结果和车票结果整理成最终方案。
它的输出应该尽量简洁,重点包含:
- 推荐方案
- 备选方案
- 每日行程
- 预算估算
- 风险提醒
4 实现地图子智能体
地图子智能体负责景点、路线、地图生成,这部分直接使用 ModelScope 上的高德 Skill。
4.1 下载高德 Skill 到本地
建议项目目录整理成这样:
4.2 编写地图子智能体
map_sub_agent.py
这里不需要主智能体手写地图逻辑,地图相关能力全部交给 map_agent 和本地高德 Skill。
5 实现车票子智能体
车票子智能体负责 12306 查询、票价估算和直达 / 中转分析。
MCP 地址:
https://www.modelscope.cn/mcp/servers/@Joooook/12306-mcp
5.1 开通和部署12306 MCP
5.2 通过 LangChain MCP adapter 加载工具
这里有一个实践细节要特别注意:
12306 MCP返回的是异步工具- 主程序执行时要使用
astream(),不能继续用同步stream() - 否则运行过程中很容易出现
StructuredTool does not support sync invocation
这一步完成后,ticket_agent 就具备了:
- 使用
streamable_http方式连接远程 MCP 地址 - 用
MultiServerMCPClient建立 MCP 客户端 - 把远程工具加载成
ticket_tools - 交给
ticket_agent使用
6 实现汇总子智能体
汇总子智能体不负责查外部数据,只负责把地图结果和车票结果整理成最终方案。
summary_sub_agent.py
7 实现主智能体
主智能体负责三件事:
- 从用户自然语言中解析关键信息
- 调度三个子智能体
- 输出最终结果
用户直接输入一句需求,主智能体先自己抽取“出发地、目的地、天数、预算、偏好”等关键信息,再把整理后的任务发给子智能体。
7.1 主智能体长期记忆
文件:config/memory/AGENTS.md
7.2 主智能体提示词
7.3 主智能体代码
app.py
到这里,项目的主体结构就已经齐了:
map_agent负责地图和景点ticket_agent负责 12306 查询summary_agent负责汇总main_agent负责解析用户需求和调度全局流程
8 测试效果
在真正运行这个项目之前,建议先安装依赖:
requirements.txt 可先写成:
控制台主程序建议直接使用异步流式输出。
这样有两个好处:
- 可以边执行边看到过程
- 可以正常执行异步 MCP 工具,不会卡在同步调用上