OpenClaw Smart Travel Planning System integrates AMAP API as standardized MCP tools via OpenClaw's multi-tool control flow, enabling one-click generation of comprehensive travel plans covering attraction queries, route planning, weather checks, and accommodation recommendations, with automatic rendering of travel guides into graphic posters.
OpenClaw 智能旅行规划系统
基于 OpenClaw 搭建多工具调用控制流,封装高德地图 API 为标准化 MCP 工具,实现景点查询、路线规划、距离/时长估算、天气、住宿推荐的全流程调用。
🌟 项目特色
- ✅ OpenClaw 多工具控制流: 统一协调多个MCP工具的调用流程
- ✅ 高德地图 MCP 封装: 将高德地图API封装为标准化的MCP工具
- ✅ FunctionCall 动态编排: 根据用户需求自动生成完整行程逻辑
- ✅ 图文海报渲染: 将结构化攻略自动渲染为可分享的精美海报
- ✅ 一键生成: 一键生成包含景点、餐饮、住宿、预算的完整旅行方案
📋 技术栈
- OpenClaw: 多工具调用控制流框架
- MCP (Model Context Protocol): 模型上下文协议,用于工具集成
- FunctionCall: 动态函数调用机制,实现智能行程编排
- 高德地图 API: 提供地点搜索、路线规划、距离计算等服务
- Python: 主要开发语言
- Jinja2: 模板引擎,用于HTML海报渲染
- Qwen Agent: 通义千问智能体框架
🏗️ 项目架构
CASE-MCP/
├── openclaw_controller.py # OpenClaw控制器核心
├── amap_mcp_tool.py # 高德地图MCP工具封装
├── itinerary_generator.py # 智能行程生成器
├── poster_renderer.py # 海报渲染器
├── openclaw_travel_planner.py # 主程序入口
├── assistant_mcp_amap_bot.py # 高德地图助手(Web界面)
├── requirements.txt # 依赖包列表
├── output/ # 生成的旅行攻略输出目录
└── README.md # 项目说明文档
核心模块说明
1. OpenClaw 控制器 (openclaw_controller.py)
负责协调多个MCP工具的调用流程:
- 工具注册与管理
- MCP客户端初始化
- 工作流执行编排
- 异步任务调度
from openclaw_controller import OpenClawController, TravelRequest
controller = OpenClawController()
request = TravelRequest(
destination="黄山到杭州",
start_date="2026-02-17",
days=7,
transport_mode="自驾"
)
plan = await controller.execute_workflow(request)
2. 高德地图 MCP 工具 (amap_mcp_tool.py)
将高德地图API封装为标准化的MCP工具:
- 地点搜索 (
place_search) - 路线规划 (
route_planning) - 距离计算 (
distance_calculation) - 天气查询 (
weather_query) - POI详情查询 (
poi_detail) - 周边搜索 (
around_search)
from amap_mcp_tool import AMapMCPTool
tool = AMapMCPTool()
result = tool.route_planning("黄山", "杭州", mode="driving")
3. 智能行程生成器 (itinerary_generator.py)
结合FunctionCall动态编排行程逻辑:
- 根据目的地、天数、交通方式生成行程
- 自动安排景点、餐饮、住宿
- 实时计算预算
- 生成旅行提示
from itinerary_generator import ItineraryGenerator, TravelRequest
generator = ItineraryGenerator()
request = TravelRequest(
destination="黄山到杭州",
start_date="2026-02-17",
days=7,
transport_mode="自驾"
)
plan = generator.generate_complete_plan(request)
4. 海报渲染器 (poster_renderer.py)
将结构化攻略渲染为图文海报:
- 精美HTML海报模板
- 行程概览卡片
- 费用汇总可视化
- 支持自定义样式
from poster_renderer import TravelPosterRenderer
renderer = TravelPosterRenderer()
renderer.render_poster(plan, "travel_poster.html")
renderer.render_summary_card(plan, "summary_card.html")
🚀 快速开始
1. 安装依赖
pip install -r requirements.txt
2. 配置环境变量
创建 .env 文件或设置环境变量:
# 高德地图 API Key
export AMAP_MAPS_API_KEY=your_amap_api_key
# DashScope API Key (可选,用于AI对话功能)
export DASHSCOPE_API_KEY=your_dashscope_api_key
3. 运行演示
# 运行演示模式(生成黄山到杭州七日游)
python openclaw_travel_planner.py --demo
# 或使用交互式模式
python openclaw_travel_planner.py --interactive
4. 查看输出
生成的文件位于 output/ 目录:
黄山到杭州_7日自驾游.md- Markdown格式的详细攻略黄山到杭州_7日自驾游_海报.html- 精美的HTML海报黄山到杭州_7日自驾游_概览.html- 行程概览卡片
💡 使用示例
示例1: 生成黄山到杭州七日游
from openclaw_travel_planner import OpenClawTravelPlanner
planner = OpenClawTravelPlanner()
files = planner.generate_travel_plan(
destination="黄山到杭州",
start_date="2026-02-17",
days=7,
transport_mode="自驾",
output_dir="output"
)
print(f"生成的文件: {files}")
示例2: 使用高德地图MCP工具
from amap_mcp_tool import AMapMCPTool
tool = AMapMCPTool()
# 搜索地点
result = tool.place_search("黄山风景区", city="黄山市")
# 规划路线
route = tool.route_planning("黄山", "杭州", mode="driving")
# 查询天气
weather = tool.weather_query("杭州")
示例3: 自定义行程生成
from itinerary_generator import ItineraryGenerator, TravelRequest
generator = ItineraryGenerator()
# 创建旅行请求
request = TravelRequest(
destination="北京",
start_date="2026-01-15",
days=3,
transport_mode="公共交通",
preferences={
"interests": ["历史文化", "美食"],
"budget_level": "中等"
}
)
# 生成完整计划
plan = generator.generate_complete_plan(request)
# 导出为Markdown
generator.export_to_markdown(plan, "北京三日游.md")
📊 项目成果
一键生成完整攻略
以黄山到杭州自驾七日游为例:
✅ 信息完整度高:
- 每日详细行程安排
- 景点介绍和门票信息
- 餐饮推荐和价格区间
- 住宿建议和联系方式
- 路线规划和导航信息
- 费用汇总和预算分析
✅ 解决痛点:
- ❌ 传统攻略制作繁琐 → ✅ 一键自动生成
- ❌ 信息零散不统一 → ✅ 结构化完整呈现
- ❌ 需要手动整理 → ✅ 自动化全流程
- ❌ 格式不美观 → ✅ 精美海报可直接分享
生成的文件格式
- Markdown攻略: 详细的文字版行程,适合打印和离线查看
- HTML海报: 精美的可视化海报,适合社交媒体分享
- 行程概览: 简洁的卡片式概览,快速获取关键信息
🔧 高级配置
自定义MCP工具
可以通过扩展 AMapMCPTool 类来添加新的功能:
class CustomAMapTool(AMapMCPTool):
def custom_feature(self, params):
# 实现自定义功能
pass
自定义海报模板
在 poster_renderer.py 中修改HTML模板,或添加新的模板:
def _load_templates(self):
# 添加新模板
self.templates['custom'] = Template(custom_html_template)
集成其他MCP服务
在 openclaw_controller.py 中注册新的工具:
controller.register_tool(ToolConfig(
name="weather_service",
tool_type=ToolType.WEATHER,
api_key="your_api_key"
))
📝 开发指南
项目结构说明
核心层:
├── openclaw_controller.py # OpenClaw控制流核心
├── amap_mcp_tool.py # MCP工具封装层
业务层:
├── itinerary_generator.py # 行程生成业务逻辑
├── poster_renderer.py # 海报渲染业务逻辑
应用层:
├── openclaw_travel_planner.py # 主应用程序
└── assistant_mcp_amap_bot.py # Web界面对话助手
扩展新功能
- 添加新的MCP工具: 在
amap_mcp_tool.py中添加新方法 - 优化行程算法: 修改
itinerary_generator.py中的生成逻辑 - 自定义海报样式: 调整
poster_renderer.py中的CSS样式 - 集成新的数据源: 在
openclaw_controller.py中注册新工具
🤝 贡献指南
欢迎提交Issue和Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
📄 许可证
本项目采用 MIT 许可证 - 详见 LICENSE 文件
📧 联系方式
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发送邮件至: your_email@example.com
🙏 致谢
Made with ❤️ using OpenClaw + MCP + FunctionCall