navi-go

1. 引言与方案概览

1.1 问题陈述

旅行规划是一个组合优化问题,需要同时平衡多种约束与偏好:预算限制、航班可用性、天气状况、个人兴趣以及安全考量。传统的基于规则的旅行引擎提供僵化、模板化的推荐,无法适应细腻的用户意图。

现代大语言模型(LLM)提供了自然语言理解与生成式规划能力,但单一的整体式提示不足以支撑可靠的多领域旅行规划。这种方式存在幻觉、跨规划维度推理不一致以及缺乏可验证性等问题。

1.2 解决方案:NaviGo

NaviGo 是一个基于 LangChain/LangGraph 构建的多智能体旅行规划系统,将旅行规划分解为多个专业化、协作式的 AI 智能体。每个智能体负责一个独立的领域(需求解析、表单补全、偏好提取、目的地选择、行程构建、预算分析、打包建议与安全审查)。主管式路由器协调智能体执行,而持久化状态图确保规划会话可断点续传。

核心设计原则

原则 实现方式
领域分解 每个规划关注点隔离在专用智能体中,具备类型化的输入/输出
有状态编排 基于 PlannerStateStateGraph,通过 PostgreSQL 实现线程级断点续传
外部信息 grounding 航班搜索(Duffel)与天气预报(Open-Meteo)通过类型化工具调用获取
双接口 同一编译后的图通过 HTTP(Fastify)与 CLI 提供服务,行为完全一致
双输入模式 支持结构化 UserRequest 或自然语言对话(含澄清式追问)
安全内建 风险守卫智能体在每个规划阶段前后运行;提示注入与不安全输出检测采用规则 + LLM 双层扫描

1.3 能力清单

1.4 技术栈

层级 技术
运行时 Node.js 18+ (ESM)
语言 TypeScript 5.6+,NodeNext 模块解析
AI 框架 LangChain / LangGraph
LLM 提供商 OpenAI(默认 gpt-4o-mini
外部 API Duffel(航班报价)、Open-Meteo(天气预报 + 地理编码)
持久化 PostgreSQL,通过 @langchain/langgraph-checkpoint-postgres
可观测性 LangSmith(可选,环境门控)
服务器 Fastify 5,含 @fastify/rate-limit@fastify/static
测试 Vitest
校验 所有边界使用 Zod schema

1.5 高层流程

结构化请求流程

用户请求(结构化 UserRequest)
         |
         v
  [risk_guard] -- 扫描注入/不安全模式
         |
         v
  [supervisor] -- 根据状态缺口决定下一步智能体
         |
    +----+----+----+----+----+
    |         |    |    |    |
    v         v    v    v    v
[preference] [destination] [itinerary] [budget] [packing]
    |         |    |    |    |
    +----+----+----+----+----+
         |
         v
  [plan_synthesizer] -- 组装最终产物
         |
         v
  最终计划

自然语言对话流程

用户消息(自然语言)
         |
         v
  [requirement_parser] -- 提取结构化字段
         |
         v
  [form_completer] -- 检查完整性;如缺失则发起追问
         |
    +---> END(pendingQuestions)---+
    |                               |
    +---< 用户回复 <----------------+
         |
         v
  [risk_guard]
         |
         v
  [supervisor] + 下游智能体
         |
         v
  [plan_synthesizer]

每个智能体输出 Partial<PlannerState> 更新,并追加到共享的 decisionLog,为每一步规划决策创建可审计的追踪。

1.6 项目仓库