VoyageAI Planner
一款基于多智能体、LangGraph 驱动的 AI 旅行伴侣——围绕安全优先、自我修正的工作流构建。
- 类型
- 网站
- 角色
- 贡献者
- Status
- 进行中
- Tech
- LangGraph LangChain FastAPI Server-Sent Events OpenAI GPT-4 React 19 Vite TypeScript Tailwind v4 TanStack Query
- Started
- 2025年9月
- Ended
- 2025年12月
INFO 7375 · 期末项目 · 第 6 组 — 东北大学,2025 年秋季。
概述
VoyageAI Planner 能将一句简单的自然语言请求,例如 “用 2000 美元预算规划一个为期 3 天的巴黎蜜月旅行”,转化为一份经过验证的、按天排布的行程。
其核心是一个 LangGraph 状态机,它协调着多个专业智能体——包括协调器、任务分解器、工具使用判断器、合成器和验证器——这些智能体可以在任何内容到达用户之前进行重试、优化和自我修正。前端是一个通过 Server-Sent Events 实时流式传输更新的 React 聊天界面;后端是一个 FastAPI 服务,它暴露了一个单一的 /chat/stream 端点来驱动整个体验。约束解析器是双语的——同一个流程可以从英文和中文的自然语言请求中提取目的地、时长、预算和旅行类型。
系统架构
完整的图流程(从用户消息输入到生成已验证的行程):
开始
↓
安全检查 (守卫节点 — 拦截提示注入/无关话题)
↓
信息提取 ────→ 拒绝
↓
意图识别
↓
[ 规划 | 优化 | 聊天 ] ────→ 回复 (针对聊天分支)
↓
规划器 → 协调器 (循环) → 优化计划
↓
┌───────────────────────────────────────┐
│ 智能体循环 · 工具使用 + 自我判断 │
│ 智能体 → 工具 → 判断器 → (循环) │
└───────────────────────────────────────┘
↓
合成
↓
验证 (若违反约束则重试)
↓
回复
👉 完整的交互式架构图 (独立 HTML 页面)。
我们的亮点
安全优先的关卡。 一个专门的 安全检查 节点位于入口点,在运行任何 LLM 规划工作之前,就过滤掉提示注入和无关话题请求——既节省了 token,又防止了滥用。
意图路由器。 一个端点,四种行为:规划、优化、聊天 或 回复。意图识别节点将每条消息路由到其所需的子图——不会在简单的闲聊上浪费计算资源。
自我修正的智能体循环。 工具 → 判断器 → 工具。判断智能体决定一个子任务是否完成,或者是否需要再次调用工具,并设有硬性的重试上限和备用路径——没有无限循环,也没有静默失败。
计划验证节点。 每个合成的行程在到达用户之前,都会经过一个验证器,该验证器会根据原始约束检查时长、预算和结构完整性。
优化,而非重建。 一个专门的 优化计划 分支允许用户调整现有行程(例如“让第二天更便宜”),而无需重新运行整个流程——更快且成本更低。
基于 SSE 的流式用户体验。 前端实时显示节点进度——协调器、判断器、合成器——让用户看到智能体在“思考”,而不是盯着一个旋转的加载图标。
清晰、模块化的图结构。 节点、路由器、核心状态和工具类被组织在独立的包中。添加新功能只需注册一个新节点——没有纠缠的单体结构。
双语约束解析。 基于 LLM 的规范化处理,可以从英文和中文的自然语言请求中,使用同一套流程提取目的地、时长、预算和旅行类型。
技术栈详情
- 智能体: LangGraph + LangChain + OpenAI GPT-4。节点作为 Python 模块注册在
travel_planner/目录下,路由器、核心状态和工具适配器有独立的包。 - API: FastAPI,提供一个单一的
/chat/streamServer-Sent Events 端点,将节点事件多路复用到前端。 - UI: React 19, Vite, TypeScript, Tailwind v4, TanStack Query 以及 Lucide 图标。聊天界面订阅 SSE 流,并内联渲染每个智能体节点的进度。
我的贡献
第 6 组项目——具体贡献说明在此处。