Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

智能旅行助手(Intelligent Trip Planner)

基于 LangChain + LangGraph 多智能体框架高德地图 MCP 的智能旅行规划系统。用户只需输入目的地、出行日期、预算和偏好,系统便会自动搜索景点、查询天气、推荐酒店与美食,并由大模型生成一份完整的每日行程计划。

功能特性

  • 多智能体行程规划:LangGraph 编排"搜索景点 → 查询天气 → 搜索酒店 → 搜索餐饮 → LLM 生成计划"五步工作流
  • 偏好驱动搜索:支持历史文化、自然风光、美食、购物、亲子、摄影等偏好标签,自动映射为高德 POI 搜索关键词
  • LLM 生成计划:OpenAI 兼容接口(支持 OpenAI / DeepSeek / 通义千问 / 智谱等),输出结构化 JSON 行程
  • 实时进度反馈:SSE 流式接口,前端实时展示各智能体的执行进度
  • 高德地图总览:按天分色在地图上标记所有景点,自动定位城市
  • 预算明细:门票、酒店、餐饮、交通、其他费用自动汇总,并随编辑实时重算
  • 行程可视化编辑:支持增删景点、调整景点顺序、删除某天行程
  • 导出功能:一键导出行程为 PNG 图片或 PDF
  • 单次最多规划 14 天 行程

技术栈

后端

  • Python 3.10+
  • FastAPI(REST + SSE 流式接口)
  • LangChain + LangGraph(多智能体编排)
  • amap-mcp-server(高德地图 MCP 工具:maps_text_search / maps_weather
  • Pydantic v2(请求/响应数据模型)

前端

  • Vue 3 + TypeScript + Vite
  • Ant Design Vue(UI 组件库)
  • 高德地图 JS API 2.0(@amap/amap-jsapi-loader
  • html2canvas + jsPDF(导出图片 / PDF)
  • Pinia、Vue Router、Axios、dayjs

系统架构

flowchart LR
    A[前端 Vue3 表单] -->|POST /api/trip/plan/stream| B[FastAPI 后端]
    B --> C[LangGraph 编排器]
    C --> D[搜索景点]
    D --> E[查询天气]
    D --> F[搜索酒店]
    D --> G[搜索餐饮]
    E --> H[LLM 生成行程]
    F --> H
    G --> H
    H --> J[结构化行程 JSON]
    J --> K[结果页: 概览/预算/地图/每日行程/天气]
    K --> L[导出 PNG / PDF]
Loading

调度策略:先串行搜索景点确定目的地上下文,再并行调度天气 / 酒店 / 餐饮三个节点(LangGraph fan-out),全部完成后统一进入 LLM 生成节点(fan-in)。节点内部使用 asyncio.gather 并发获取 POI 详情补全坐标。

目录结构

.
├── backend/                    # FastAPI 后端
│   ├── app/
│   │   ├── api/trip.py         # 行程规划 API(REST + SSE)
│   │   ├── config.py           # 环境变量配置
│   │   ├── main.py             # 应用入口
│   │   ├── schemas/trip.py     # Pydantic 数据模型
│   │   ├── services/
│   │   │   ├── trip_graph.py   # LangGraph 编排图(MCP 版,当前生效)
│   │   │   └── trip_planner.py # 行程规划编排器
│   │   └── agents/             # v1 遗留 Agent 代码(当前未使用)
│   ├── .env.example            # 环境变量示例
│   └── requirements.txt
├── frontend/                   # Vue 3 前端
│   ├── src/
│   │   ├── views/              # Home(规划表单)/ Result(行程结果)
│   │   ├── components/         # MapView / BudgetCard / DayPlanCard
│   │   ├── services/api.ts     # 后端 API 封装(含 SSE)
│   │   ├── types/trip.ts       # TypeScript 类型定义
│   │   └── router/             # 路由
│   ├── .env.example            # 前端环境变量示例
│   └── package.json
└── README.md

快速开始

1. 后端启动

cd backend
python -m venv .venv
# Windows: .venv\Scripts\activate   Linux/macOS: source .venv/bin/activate
pip install -r requirements.txt

# 配置环境变量
cp .env.example .env
# 编辑 .env,填入 LLM_API_KEY 和 AMAP_API_KEY

# 在项目根目录启动(backend 包路径)
uvicorn backend.app.main:app --reload --port 8000

接口文档:http://localhost:8000/docs

2. 前端启动

cd frontend
npm install

cp .env.example .env.local
# 编辑 .env.local,填入高德 JS API Key 与安全密钥

npm run dev

访问 http://localhost:5173(Vite 已将 /api 代理到后端 8000 端口)。

API 说明

健康检查

GET /api/health

行程规划(普通)

POST /api/trip/plan

行程规划(SSE 流式,推荐)

POST /api/trip/plan/stream

路线规划(地图绘制用)

POST /api/trip/route

{
  "origin": "120.169899,30.239827",
  "destination": "120.162923,30.254158",
  "mode": "walking"
}

返回可绘制路径点 path[[lng,lat], ...])及距离、耗时;mode 支持 walking / driving

请求示例:

{
  "city": "北京",
  "start_date": "2026-08-10",
  "end_date": "2026-08-13",
  "budget": "中等",
  "preferences": ["历史文化", "美食"],
  "travelers": 2,
  "departure_city": "上海"
}

SSE 事件类型:init(初始化步骤列表)、progress(单步进度)、result(规划结果)、error(错误信息)。

响应结构包含:行程概览、天气预测、预算明细、每日行程(景点/餐饮/酒店/交通/备注)、旅行贴士。

环境变量

后端(backend/.env

变量 说明 默认值
LLM_API_KEY LLM API Key(OpenAI 兼容) -
LLM_BASE_URL LLM 接口地址 https://api.openai.com/v1
LLM_MODEL 模型名称 gpt-4o-mini
LLM_TEMPERATURE 采样温度 0.7
LLM_JSON_MODE 是否启用 JSON 输出模式(不支持 response_format 的接口设为 false true
AMAP_API_KEY 高德 Web 服务 Key -
HOST / PORT 服务监听地址 0.0.0.0 / 8000
DEBUG 调试模式 true
MAX_SEARCH_RESULTS 每个关键词最大搜索结果数 5

前端(frontend/.env.local

变量 说明
VITE_AMAP_KEY 高德 JS API Key(Web 端)
VITE_AMAP_SECRET 高德 JS API 安全密钥(v2.0 必需)
VITE_AMAP_VERSION 高德 JS API 版本,默认 2.0
VITE_API_BASE_URL 后端 API 地址,开发环境默认 /api

高德 Key 申请地址:https://console.amap.com/

项目说明

  • v2.0 起使用 amap-mcp-server 提供的 MCP 工具获取景点 / 酒店 / 餐饮 / 天气数据,替代 v1 直调高德 REST API 的实现。
  • backend/app/agents/backend/app/services/amap_service.pyllm_service.py 为 v1 遗留代码,当前 API 并未引用,仅作参考。
  • 预算中酒店与交通费用为按预算档位估算的固定值(酒店 300 / 600 / 1000 每晚,交通 30 / 80 / 200 每天),门票与餐饮由 LLM 估算。

About

基于 LLM 多智能体框架的智能旅行行程规划系统,用户输入目的地、出行日期、预算、偏好等条件后,系统自动完成一次完整的旅行规划,输出每日行程、餐饮、酒店、天气、预算明细和地图展示。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages