使用说明
WanderBot:自主AI旅行规划师
🌍 应用程序的核心目的
Voyager X旨在 消除旅行计划的复杂性 通过自动化流程的每一步。与只提供建议的传统聊天机器人不同,Voyager X通过以下方式执行现实世界的操作 多代理编排和实时API调用用户只需用自然语言描述他们的旅行意图,系统:
- 提取结构化的旅行详细信息(目的地、日期、预算)
- 使用API动态搜索航班、酒店和景点
- 生成一个 多日行程 提供人性化的建议
- 存储行程和用户偏好,以供未来个性化
这将旅行体验转变为 不干涉礼宾服务,将计划时间从数小时缩短到数秒。
✅ 问题陈述
当前的旅行计划工具需要 人力 跨多个平台。用户必须:
- 分别搜索航班和酒店
- 手动比较价格和评级
- 构建没有个性化的行程
这种分散的过程效率低下,容易出错。今天的AI助手只提供 口头建议,不是可操作的行程。
✅ 解决方案
Voyager X推出了一款 确定性多智能体架构 哪里:
- 每个代理执行 一个特定的角色 (例如,航班搜索、酒店检索)
- 代理通过以下方式进行通信 模型上下文协议(MCP) 用于工具调用
- 实时API确保 最新旅行数据
- 用户内存启用 个性化推荐 随着时间的推移
这种方法保证 准确性、可靠性和可扩展性.
📌 摘要
Voyager X演示 代理推理与基于工具的执行相结合。该系统使用:
- 对话代理:将自由格式文本转换为结构化行程参数
- 规划师代理:编排工作流程并确保确定性执行
- 工人代理人:使用MCP工具获取航班、酒店和景点
- 持久层:存储行程和用户配置文件以实现个性化
与静态推荐引擎不同,Voyager X能够动态地适应用户偏好和真实世界的数据。
🧱 架构与流程
graph TD;
User --> ConversationAgent;
ConversationAgent --> PlannerAgent;
PlannerAgent --> FlightAgent;
PlannerAgent --> HotelAgent;
PlannerAgent --> AttractionAgent;
PlannerAgent --> ExportAgent;
FlightAgent --> MCP;
HotelAgent --> MCP;
AttractionAgent --> MCP;
ExportAgent --> Persistence;
图表
为什么是这种架构?
- 规划师→ 工人模型 确保严格控制执行顺序
- 没有自由职业代理人:防止不可预测的行为
- MCP工具 提供真实世界的数据访问,而无需将原始API暴露给LLM
🔹 分步流程
- 用户输入:“计划从12月10日到12月15日为期5天的巴黎之旅,预算为2000美元”
- 对话代理:提取结构化字段→
{destination: Paris, dates: Dec 10-15, budget: 2000} - 规划师代理:通话
flightAgent()→ 检索最佳航班 - 规划师代理:通话
hotelAgent()→ 检索酒店选项 - 规划师代理:通话
attractionAgent()→ 获取景点 - 规划师代理:通话
exportAgent()→ 保存行程+用户资料 - 对话代理:退货 人性化行程总结
🔍 代理人职责
| 代理 | 角色 | 内部逻辑 |
|---|---|---|
| ConversationAgent | 意图提取 | 使用NLP解析日期、目的地、预算 |
| PlannerAgent | Orchestrator | 维护执行图,重试失败的步骤 |
| FlightAgent | 航班搜索 | 调用MCP工具→ RapidAPI飞行API |
| HotelAgent | 酒店搜索 | 按预算和评级筛选 |
| AttractionAgent | 发现 | 使用谷歌搜索MCP工具查找景点 |
| ExportAgent | 持久性 | 将行程存储在JSON/DB中并更新用户配置文件 |
⚙ MCP工具和调用模式
| 工具 | 目的 | 示例调用 |
|---|---|---|
| searchFlights | 获取航班 | mcp.invoke('searchFlights', params) |
| searchHotels | 获取酒店 | mcp.invoke('searchHotels', params) |
| 谷歌搜索 | 景点 | mcp.invoke('google_search', query) |
| persist_itinerary | 保存行程 | mcp.invoke('persist_itinerary', itinerary) |
为什么选择MCP? 它提供了一个 安全、结构化的界面 在LLM代理和外部API之间,防止即时注入和不受控制的API调用。
🧠 快速设计理念
- 角色隔离:每个代理只接收相关上下文
- 工具首次执行:提示指示代理调用工具,而不是幻觉数据
- 示例:
You are FlightAgent. Input: {destination: Paris, dates: Dec 10-15}. Task: Call searchFlights tool and return best option.
⚙ 详细的设置说明
# 1. Clone the repository
git clone https://github.com/Jagritibothra/mcp-travel-agent
cd mcp-travel-agent
# 2. Install dependencies
pip install -r requirements.txt
# 3. Configure environment variables
cp .env
为什么要采取这些步骤?
- 克隆可确保您拥有最新的代码
- 依赖关系包括MCP SDK、LLM库和API客户端
.env安全地存储敏感密钥
🔑 API密钥设置指南
添加您的密钥 .env:
RAPIDAPI_KEY=your_rapidapi_key
GOOGLE_API_KEY=your_google_api_key
为什么? 这些密钥验证您对航班、酒店和景点的外部API的请求。
🧾 带模式解释的模拟JSON示例
航班搜索响应
[
{
"flightId": "F001",
"airline": "SpiceJet",
"source": "DEL",
"sourceCity": "Delhi",
"destination": "BLR",
"destinationCity": "Bangalore",
"departureDate": "2025-02-12",
"arrivalDate": "2025-02-12",
"departureTime": "05:50",
"arrivalTime": "08:15",
"durationMinutes": 145,
"stops": 0,
"class": "Economy",
"price": 4890
},
{
"flightId": "F002",
"airline": "IndiGo",
"source": "BOM",
"sourceCity": "Mumbai",
"destination": "BLR",
"destinationCity": "Bangalore",
"departureDate": "2025-03-04",
"arrivalDate": "2025-03-04",
"departureTime": "13:05",
"arrivalTime": "14:45",
"durationMinutes": 100,
"stops": 0,
"class": "Economy",
"price": 4150
},
{
"flightId": "F003",
"airline": "Vistara",
"source": "DEL",
"sourceCity": "Delhi",
"destination": "BLR",
"destinationCity": "Bangalore",
"departureDate": "2025-04-02",
"arrivalDate": "2025-04-02",
"departureTime": "18:20",
"arrivalTime": "20:50",
"durationMinutes": 150,
"stops": 0,
"class": "Economy",
"price": 5290
},..]
模式:
airline:字符串price:数量(美元)departure&arrival:ISO日期时间
酒店搜索响应
[
{
"hotelId": "H001",
"name": "Blue Horizon Inn",
"city": "Bangalore",
"rating": 4.2,
"pricePerNight": 3500,
"amenities": ["WiFi", "Breakfast", "Gym", "Parking"],
"roomType": "Deluxe",
"distanceFromCenterKm": 3.1
},
{
"hotelId": "H002",
"name": "GreenLeaf Suites",
"city": "Bangalore",
"rating": 4.5,
"pricePerNight": 4800,
"amenities": ["WiFi", "Breakfast", "Pool", "Gym"],
"roomType": "Executive",
"distanceFromCenterKm": 2.0
},
{
"hotelId": "H003",
"name": "BudgetStay MG Road",
"city": "Bangalore",
"rating": 3.8,
"pricePerNight": 2100,
"amenities": ["WiFi", "Breakfast", "AC"],
"roomType": "Standard",
"distanceFromCenterKm": 1.8
},..]
模式:
name:字符串price_per_night:编号rating:浮动(1-5)
▶ 示例输入→ 示例输出
输入:
Plan a 5-day trip to Paris from Dec 10 to Dec 15 under $2000 budget.
输出:
Your Paris itinerary is ready! ✈️
- Flight: Delta Airlines, Dec 10, $450
- Hotel: Hilton Downtown, $120/night
- Attractions: Eiffel Tower, Louvre Museum, Seine River Cruise, Montmartre Walk
🚀 未来增强功能(附可行性说明)
- 多城市旅行:需要基于图表的行程规划
- 拼车集成:通过MCP工具添加优步/Lyft API
- 动态预算优化:实施基于约束的优化算法
- 语音交互:集成语音转文本和文本转语音模块
👤 作者和致谢
作者 贾格里蒂·博特拉 致谢: 感谢MCP开源社区和RapidAPI提供商。