行程生成器

一个多代理LangGraph系统,提供两种AI驱动的旅行规划解决方案:行程生成器和交通优化器。

  • by luizlzg
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 luizlzg/mcp-agent-transport

使用说明

行程生成器

一个多代理LangGraph系统,具有两个基于人工智能的旅行规划解决方案:

  • 行程生成器 --将景点列表转换为专业格式的每日PDF行程,包括地图、图像、官方门票链接和成本估算
  • 传输优化器 --对话式路线规划器,比较交通方式,研究实际成本和支付方式,并生成PDF摘要

架构——行程生成器

User Input
    │
    ▼
Coordinate Finder Agent  ← Google Places (Serper)
    │
    ▼
Day Organizer Agent      ← classify → configure → finalize → approval loop
    │
    ▼
Attraction Researcher    ← parallel (1 agent/day)
Agents
    │
    ▼
PDF Builder              ← ReportLab, route map, costs

架构——传输优化器

User (chat)
    │
    ▼
Route Collector Agent    ← Google Places (Serper)
    │
    ▼
Transport Overview Agent ← Web search (Serper)  · runs once, silent
    │                       general fare/ticketing model for the city
    ▼
Transport Researcher     ← Google Maps Directions API
Agent                      (place_id routing, per-mode alternatives)
    │
    ▼
Cost Calculator Agent    ← Web search (Serper)
    │
    ▼
PDF Builder

功能--行程生成器

  • 智能分类:隔离/偏好/灵活/专属日
  • K表示地理集群,可选择每天的最小/最大值
  • 路线优化:每天内最近的邻居,可配置的起点/终点
  • 交互式审批流(CLI中断)
  • 平行吸引力研究(每天一名代理人)
  • 图像搜索,过滤30+水印域+URL验证
  • 仅限官方门票链接(11个以上经销商域名被屏蔽)
  • 重复吸引力检测(多日发生)
  • 复合景点(单独研究的子地点)
  • 仅限免费的偏好检测
  • 多语言输出(pt-br、en、es、fr)
  • 带目录、路线图、图像、可点击链接、成本汇总的PDF
  • 可选电子邮件投递(SMTP/Gmail)

功能--传输优化器

  • 通过自然聊天定义对话路线
  • 首先进行一般票价模型研究:一个无声的概述代理研究城市的票务工作原理(单程票价、跨模式票价整合、换乘规则、通行证、机场票价),并将其反馈给后来的代理
  • 多模式比较:步行、交通、驾驶(谷歌地图方向API)
  • 每个选项最多3个 解决 模式(3列火车、3辆公共汽车、3条地铁……)——不是3条公交线路,所以火车不会隐藏在公共汽车/地铁后面
  • place_id-基于路由的大型场所(机场、公园、车站)可以快速到达可步行的入口,而不是内部引脚
  • 具有代表性的日间运输发车,因此即使工具在夜间运行,也会出现预定的日间服务(如机场列车)-离线计算(无时区API呼叫)
  • 选择过程中显示的每个选项的估计价格,从概述中逐字提取(从未发明;确切成本稍后确认)
  • 智能偏好规则(例如,“如果不到20分钟,请始终步行”)
  • 使用源链接进行真实定价研究,应用概述的票价整合/换乘规则
  • 付款方式利弊分析
  • 针对用户背景研究并包含在PDF中的交通跟踪应用程序
  • 长时间会话的会话总结
  • PDF:路线表、成本、价格解释、付款方式、跟踪应用程序和估算免责声明

快速开始

# 1. Clone and install dependencies
git clone <repository-url>
cd itinerary-generator
pip install -r requirements.txt

# 2. Configure environment
cp .env.example .env
# Edit .env with your API keys (see Configuration below)

# 3. Run the CLI
python main.py

配置

创建一个 .env 文件包含以下内容:

# OpenRouter API (required) - https://openrouter.ai/keys
OPENROUTER_API_KEY=sk-or-...

# Model Configuration — per-agent or global fallback
# Browse models at: https://openrouter.ai/models
# Itinerary Generator agents
COORDINATE_FINDER_MODEL=anthropic/claude-sonnet-4-20250514
DAY_ORGANIZER_MODEL=anthropic/claude-sonnet-4-20250514
ATTRACTION_RESEARCHER_MODEL=anthropic/claude-sonnet-4-20250514
# Transport Optimizer agents
ROUTE_COLLECTOR_MODEL=anthropic/claude-sonnet-4-20250514
TRANSPORT_OVERVIEW_MODEL=anthropic/claude-sonnet-4-20250514
TRANSPORT_RESEARCHER_MODEL=anthropic/claude-sonnet-4-20250514
COST_CALCULATOR_MODEL=anthropic/claude-sonnet-4-20250514
# Global fallback for any agent without a specific model
MODEL_NAME=anthropic/claude-sonnet-4-20250514

# Serper API (required — Google Places + Google Search) - https://serper.dev
SERPER_API_KEY=...

# Tavily API (required — web search + image retrieval) - https://tavily.com
TAVILY_API_KEY=tvly-...

# Google Maps API (required for Transport Optimizer)
GOOGLE_MAPS_API_KEY=...

# Email delivery (optional)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password

# Observability (optional)
LANGSMITH_TRACING=false
LANGSMITH_API_KEY=lsv2_pt_...
LANGSMITH_PROJECT=itinerary-generator

日程安排——三步工作流程

Day Organizer在请求用户批准之前运行一个结构化的3步流程:

  1. classify_attributions (必填)--将每个景点分为独立、偏好、灵活或专属,并在适用的情况下指定固定日期
  2. 配置路由优化 (可选)--设置路线订购每天的起点和终点
  3. 配置_日期_约束 (可选)——设置K-means聚类每天的最小和最大吸引力计数
  4. finalize_day_organization (必填)--对灵活的景点执行K-means聚类,并在每天内应用最近邻排序
  5. 请求_临时_批准 --显示结果并等待用户批准或修订

用户首选项类型

类型 示例 行为
孤立的 “迪士尼乐园需要一整天” 专属日,不添加其他景点
偏好 “埃菲尔铁塔第一天” 固定日期,可以与他人分享
独家 “第3天仅适用于X和Y” 固定设置,不接受灵活添加
灵活的 仅列出景点 K表示地理分组

项目结构

itinerary-generator/
├── main.py
├── requirements.txt
├── .env.example
├── src/
│   ├── itinerary_generator/
│   │   ├── graph.py
│   │   ├── state.py
│   │   ├── agent_definition.py
│   │   ├── tools.py
│   │   ├── prompts.py
│   │   └── other_nodes.py
│   ├── transport_optimizer/
│   │   ├── graph.py
│   │   ├── state.py
│   │   ├── agent_definition.py
│   │   ├── tools.py
│   │   └── prompts.py
│   ├── processor/
│   │   └── pdf_processor.py      # ReportLab PDF generation
│   ├── middleware/
│   │   ├── structured_output_validator.py
│   │   ├── summarization_middleware.py
│   │   └── handoff_tool_validator.py
│   ├── mcp_client/
│   │   └── tavily_client.py
│   └── utils/
└── .results/

工具参考

行程生成器

代理 工具 目的
坐标查找器 search_place_address 谷歌地点搜索+商店坐标
坐标查找器 return_invalid_input_error 处理无效输入
日组织者 classify_attractions 对所有景点进行分类(步骤1)
日组织者 configure_route_optimization 设置每天的开始/结束点(可选)
日组织者 configure_day_constraints 设置每天的最小/最大值(可选)
日组织者 finalize_day_organization 执行K-means+最近邻排序(步骤3)
日组织者 request_itinerary_approval 暂停以供用户查看
日组织者 update_itinerary_organization 应用用户更改
吸引力研究员 search_attraction_info 在网上搜索详细信息、工作时间、费用
吸引力研究员 search_attraction_images 使用水印过滤的图像搜索(Tavily)
吸引力研究员 search_ticket_link 仅限官方门票网址

传输优化器

代理 工具 目的
路线收集器 search_place_coordinates 查找并验证位置坐标(缓存可路由的 place_id)
路线收集器 register_route_pair 店铺来源→目的地配对
路线收集器 confirm_route_pairs 最终确定路线清单并移交
运输概述 search_transport_information 研究城市的一般票价/票务模式
运输概述 register_transport_overview 存储总体概述(摘要+来源)
运输概述 finish_transport_overview 移交给运输研究员
交通研究员 get_transport_options 谷歌地图方向API(place_id路线,每个模式的替代方案,白天出发)
交通研究员 register_user_preference 每条路线的存储模式选择
交通研究员 finish_transport_research 交给成本计算器
成本计算器 search_transport_information 通过网络搜索进行研究定价
成本计算器 route_reasoning 分析简单路线与复合路线
成本计算器 register_route_cost 每条路线的存储成本及说明
成本计算器 register_payment_methods 商店支付选项的优缺点
成本计算器 register_transport_apps 为PDF存储运输跟踪应用程序
成本计算器 finish_interaction 触发PDF生成

API要求

服务 目的 注意事项
OpenRouter LLM访问(Claude、GPT-4、Gemini等) 按令牌付费
Serper 谷歌地点+谷歌搜索 开始2500次搜索
Tavily 网络搜索+图像检索 每月1000次搜索
谷歌地图 路线API(交通优化程序) 按请求付费

技术栈

  • LangChain 1.0/LangGraph --代理编排和工作流管理
  • 开放路由器 --多提供商LLM访问(Claude、GPT-4、Gemini等)
  • 搜索者 --谷歌地点和谷歌搜索
  • 塔维利 --网络搜索与图像检索
  • 谷歌地图方向API --运输方式比较
  • scikit-learn/k-means约束 --具有可选大小约束的地理聚类
  • 报告实验室 --PDF生成
  • GeoPandas/Matplotlib --路线图可视化

许可证

MIT许可证-免费使用和修改