VoyageAI Planner

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 端点来驱动整个体验。约束解析器是双语的——同一个流程可以从英文和中文的自然语言请求中提取目的地、时长、预算和旅行类型。

VoyageAI Planner UI screenshot

系统架构

完整的图流程(从用户消息输入到生成已验证的行程):

开始

安全检查  (守卫节点 — 拦截提示注入/无关话题)

信息提取  ────→  拒绝

意图识别

[ 规划  |  优化  |  聊天  ]  ────→  回复 (针对聊天分支)

规划器 → 协调器 (循环) → 优化计划

┌───────────────────────────────────────┐
│ 智能体循环 · 工具使用 + 自我判断        │
│   智能体 → 工具 → 判断器 → (循环)      │
└───────────────────────────────────────┘

合成

验证  (若违反约束则重试)

回复

👉 完整的交互式架构图 (独立 HTML 页面)。

我们的亮点

安全优先的关卡。 一个专门的 安全检查 节点位于入口点,在运行任何 LLM 规划工作之前,就过滤掉提示注入和无关话题请求——既节省了 token,又防止了滥用。

意图路由器。 一个端点,四种行为:规划优化聊天回复。意图识别节点将每条消息路由到其所需的子图——不会在简单的闲聊上浪费计算资源。

自我修正的智能体循环。 工具 → 判断器 → 工具。判断智能体决定一个子任务是否完成,或者是否需要再次调用工具,并设有硬性的重试上限和备用路径——没有无限循环,也没有静默失败。

计划验证节点。 每个合成的行程在到达用户之前,都会经过一个验证器,该验证器会根据原始约束检查时长、预算和结构完整性。

优化,而非重建。 一个专门的 优化计划 分支允许用户调整现有行程(例如“让第二天更便宜”),而无需重新运行整个流程——更快且成本更低。

基于 SSE 的流式用户体验。 前端实时显示节点进度——协调器判断器合成器——让用户看到智能体在“思考”,而不是盯着一个旋转的加载图标。

清晰、模块化的图结构。 节点、路由器、核心状态和工具类被组织在独立的包中。添加新功能只需注册一个新节点——没有纠缠的单体结构。

双语约束解析。 基于 LLM 的规范化处理,可以从英文和中文的自然语言请求中,使用同一套流程提取目的地、时长、预算和旅行类型。

技术栈详情

  • 智能体: LangGraph + LangChain + OpenAI GPT-4。节点作为 Python 模块注册在 travel_planner/ 目录下,路由器、核心状态和工具适配器有独立的包。
  • API: FastAPI,提供一个单一的 /chat/stream Server-Sent Events 端点,将节点事件多路复用到前端。
  • UI: React 19, Vite, TypeScript, Tailwind v4, TanStack Query 以及 Lucide 图标。聊天界面订阅 SSE 流,并内联渲染每个智能体节点的进度。

我的贡献

第 6 组项目——具体贡献说明在此处。