旅行规划AI服务

VoyagerX是一款自动化旅行规划服务,通过多代理架构和实时API调用,将用户的自然语言输入转化为结构化行程,包括航班、酒店和景点推荐,并生成个性化行程。

  • by Jagritibothra
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Jagritibothra/mcp-travel-agent

使用说明

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

🔹 分步流程

  1. 用户输入:“计划从12月10日到12月15日为期5天的巴黎之旅,预算为2000美元”
  2. 对话代理:提取结构化字段→ {destination: Paris, dates: Dec 10-15, budget: 2000}
  3. 规划师代理:通话 flightAgent() → 检索最佳航班
  4. 规划师代理:通话 hotelAgent() → 检索酒店选项
  5. 规划师代理:通话 attractionAgent() → 获取景点
  6. 规划师代理:通话 exportAgent() → 保存行程+用户资料
  7. 对话代理:退货 人性化行程总结

🔍 代理人职责

代理 角色 内部逻辑
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提供商。