GoGo 智能差旅助手

零、项目如何启动

(不看必挂!!! )

https://thoughts.aliyun.com/workspaces/6963289eb0fc2e001bb052eb/docs/6a5a032dd31fed0001c735ee

一、项目概述

GoGo 智能差旅助手是一个基于多 Agent 协作架构的企业级差旅管理系统,通过 AI 智能体为用户提供从差旅申请、审批、行程规划、预订到报销的全流程自动化服务。

项目名称:gogo-agent 版本:1.0.0-SNAPSHOT JDK 版本:Java 21


二、技术架构

2.1 后端技术栈

技术版本用途
------------------
Spring Boot3.4.0Web 框架
AgentScope1.0.12AI Agent 框架(ReAct 模式)
MyBatis-Plus3.5.9ORM 持久层
MySQL-主数据库
Redis-Session 存储 / Agent 中断广播 / ApiKey 缓存
Sa-Token1.39.0认证鉴权
Druid1.2.23数据库连接池
WebFlux (Reactor)-响应式流编排
TransmittableThreadLocal2.14.5跨线程上下文传播
Fastjson22.0.43JSON 处理
DashScope-LLM 模型服务(阿里云通义/百炼长期记忆)
Apache POI5.2.5Word/Excel 知识库文档解析
RAGAgentScope 原生景点/政策/指南知识库检索( AGENTIC 模式)

2.2 前端技术栈

技术版本用途
------------------
React19.2.6UI 框架
Vite8.0.12构建工具
TypeScript6.0.2类型安全
Ant Design6.4.4UI 组件库
Zustand5.0.14状态管理
react-markdown10.1.0Markdown 渲染
Recharts3.8.1图表可视化
Axios1.18.0HTTP 客户端

2.3 系统架构图

用户 → [React 前端] → SSE/REST → [Spring Boot 后端]
                                        │
                                  ┌─────┴──────┐
                                  │ ChatController │
                                  └─────┬──────┘
                                        │
                              ┌─────────┴─────────┐
                              │ AgentPipelineService │
                              └─────────┬─────────┘
                                        │
              ┌─────────────────────────┼─────────────────────────┐
              │                         │                         │
    QueryRewritingAgent     IntentRecognitionAgent         MasterAgent
                                                               │
                        ┌──────────┬───────────┬───────────────┤
                        │          │           │               │
             ItineraryManage  ItineraryPlan  Reimbursement   InfoAgent
                  Agent         Agent          Agent      (RAG×3 + MCP)
                                   │
                           ┌──────┴──────┐
                    ItineraryReview   Booking
                          Agent        Agent

外部能力挂载:
- SubAgentTool:MasterAgent 通过 subAgent 工具调用各子智能体
- SkillBox:tuniu-cli / flight-manager / flyai / rolling-go-hotel / reimbursement
- MCP:weather / orizn-visa
- 百炼长期记忆:MasterAgent / ItineraryPlanAgent AGENT_CONTROL 模式

三、核心模块开发进展

3.1 Agent 智能体系统

项目采用多 Agent 协作架构。严格意义上的 ReActAgent 共有 9 个;另有 2 个名字带「Agent」后缀的能力(ConversationTitleAgent / QuestionRecommendationAgent)是轻量 LLM 调用服务@Service + 单次 fastModel.stream),不参与多轮推理与工具调度,详见下表后的说明。

9 个 ReActAgent

智能体职责状态
---------------------------------------------------------
QueryRewritingAgent用户问题改写(上下文补全、指代消解)✅ 已完成
IntentRecognitionAgent多意图识别与分类(规则+RAG+LLM)✅ 已完成
MasterAgent总协调入口,意图路由与结果整合,承载百炼长期记忆✅ 已完成
ItineraryManageAgent差旅单生命周期管理(申请/审批/查询/取消)✅ 已完成
ItineraryPlanAgent行程规划、交通/酒店搜索比价与预订,承载百炼长期记忆✅ 已完成
ItineraryReviewAgent行程方案六维结构化审核(完整性/时间/出发目的地/预算/偏好/路径)✅ 已完成
BookingAgent预订执行(出票/订房/订火车票)及已有预订取消,与 ItineraryPlanAgent 平级✅ 已完成
ReimbursementAgent发票识别与报销单生成未完成
InfoAgent差旅政策/景点/签证/通用信息查询(3 RAG 知识库 + 双通道 + MCP)✅ 已完成

2 个轻量 LLM 服务(仅作 Agent 命名,非 ReActAgent

提示词文件仍以 *-agent-system.md 命名(历史沿用),但实际实现是单次 LLM 调用的 @Service不计入上述 ReActAgent 数量。这两个任务均为纯文本生成、无需工具调用、无需多轮推理,套 ReActAgent 包装会带来不必要的开销,因此直接走 fastModel.stream(...)

提示词文件实际实现职责调度方式
------------
conversation-title-agent-system.mdConversationTitleService@Service + @Async("titleTaskExecutor")根据用户问题 + 意图识别结果异步生成对话标题独立线程池 titleTaskExecutor 异步触发,单次 fastModel.stream
question-recommendation-agent-system.mdQuestionRecommendationService@ServiceMasterAgent 返回后生成下一步推荐问题(关键词按场景使用)MasterAgent 完成时由 ChatController.sendSuggestionsThenComplete 调用,单次 fastModel.stream

Agent 执行流水线(条件式,详见 3.9):

用户消息 → L1/L2 快速意图识别 →(命中→直接调度 / 未命中→QueryRewritingAgent 改写→完整 L1/L2/L3)→ 单意图直跳子智能体 或 MasterAgent 路由

重要架构决策

3.2 Agent 生命周期 Hook

Hook功能状态
------------------
ProgressNotifierHook通过 SSE 实时推送执行进度、搜索结果、Plan 变化到前端✅ 已完成
SessionPersistenceHookAgent 多轮对话记忆持久化(MySQL)✅ 已完成
ActiveAgentPersistenceHook活跃 Agent 状态持久化,支持会话续跑✅ 已完成
AgentExecutionRegistryHookAgent 执行注册与优雅中断✅ 已完成
AgentExecutionLoggerHookAgent 执行过程日志记录✅ 已完成
ToolCircuitBreakerHook工具维度熔断(半开探测 + 指数退避 + 显式关闭工具组)✅ 已完成
AbstractShellApiKeyHookSkill Shell 命令 ApiKey 注入抽象基类✅ 已完成
FlightApiKeyHook飞行相关 Skill 的 API_KEY 动态管理✅ 已完成
TuniuApiKeyHook途牛 Skill 的 API_KEY 动态管理✅ 已完成
RghUserIsolationHookrolling-go-hotel Skill 多用户登录状态隔离✅ 已完成
BookingPersistenceHook预订记录自动落库(解析 tuniu 下单/取消 CLI 结果写入 booking_record,对 LLM 透明)✅ 已完成
CliResultCompressHookMCP/CLI 工具结果压缩(去重 structuredContent + 去空/黑名单字段 + 紧凑序列化,降 token)✅ 已完成
SkillContentCollapseHook历史技能正文折叠(SKILL.md 正文完成使命后折叠为占位符,避免每轮 reasoning 重放)✅ 已完成
DynamicTimeInjectionHook动态时间注入(每轮 LLM 推理前插入当前时间 system 消息,保持主 system prompt 前缀稳定以利用百炼隐式缓存)✅ 已完成
~~PreferenceInjectionHook~~~~用户偏好自动注入 Agent 上下文~~~~已移除,改为由 Agent 通过 retrievefrommemory 主动召回~~
~~McpResultDedupHook~~~~MCP 结果去重(早期版本)~~~~已由 CliResultCompressHook 取代,未装配~~

3.3 工具系统

通用工具

差旅单工具

规划工具

预订工具

报销工具

3.4 Skill 外部能力

Skill功能
-------------
tuniu-cli ⭐推荐途牛旅行统一助手(机票/酒店/门票/火车票/邮轮/度假产品)
flight-manager机票搜索与预订(FlightApiKeyHook 动态注入 KEY)
flyai备用机票/火车票搜索与预订
rolling-go-hotel酒店搜索与预订(RollingGo 平台,RghUserIsolationHook 多用户隔离)
reimbursement报销单生成规则

tuniu-cli 已统一整合 tuniu-flight / tuniu-hotel / tuniu-ticket / tuniu-train / tuniu-cruise 等单独服务,优先使用。 原 travel-planner / roundtrip-planner 行程优化 skill 已下沉为进程内 Java 工具 RoundtripPlannerToolplan_roundtrip),不再以 Python skill 形式存在。

3.5 RAG 知识库

Knowledge Bean数据源模式用途
------------------------------------
attractionKnowledgetourist_attraction.xlsxGENERIC + AGENTIC 双模式景点 RAG 检索
corporateTravelPolicyKnowledgebusinesstravelpolicy.docxAGENTIC差旅政策语义问答(通道 1)
corporateTravelGuidelinesKnowledgebusinesstravelguidelines.docxAGENTIC差旅注意事项与行为准则

RAG 中间层(Knowledge/GenericRAGHook)已删除,Knowledge 改为直出 Spring Bean,由 InfoAgent 链上直接 .knowledge(...) 注入。

3.6 前端系统

组件功能
------------
ChatWindow主聊天窗口,SSE 实时流式响应(已重构为时间轴顺序展示)
AgentMessageBlockAgent 回复块(Markdown 渲染 + 链接新窗口打开)
Sidebar侧边栏(历史会话列表)
LoginPage登录页面(Sa-Token 认证)
ProcessingPanelAgent 执行进度面板
ProgressCard进度卡片(步骤/状态可视化)
TravelResultCard搜索结果展示卡片(酒店/机票/火车,多数据源格式归一化)
BookingResultCard预订结果展示卡片(下单/取消结果可视化)
UserInteractionCard用户交互卡片(表单/选择/确认/工具确认)
AdminApprovalPage管理员审批页面(审批列表与决策操作)
MyTravelPage我的差旅页面(差旅单列表与详情查看)
PreferencePage用户偏好设置页面(差旅偏好管理)

前端通信方式:SSE(Server-Sent Events)实时推送,支持以下事件类型:

3.7 业务模块

模块功能状态
------------------
auth用户认证(Sa-Token + Redis)✅ 已完成
chat对话与消息历史持久化✅ 已完成
order差旅单管理✅ 已完成
booking外部预订记录管理(机票/酒店/火车/门票/邮轮/度假统一存储)✅ 已完成
approval审批记录管理✅ 已完成
approval对接钉钉审批回调🚧 待开发
policy差旅政策规则引擎(职级×城市等级)✅ 已完成
preference用户偏好设置(前端页面 + API + 百炼长期记忆)✅ 已完成
ragRAG 知识检索✅ 已完成(GENERIC + AGENTIC)
user用户档案管理✅ 已完成

3.8 基础设施能力

3.9 意图识别与查询重写优化

针对「每次对话都要跑 QueryRewriting + IntentRecognition + MasterAgent 三次 LLM」的高延迟高成本问题,做了分层短路 + 条件触发 + 单意图直跳三项优化。

三层意图识别(L1 → L2 → L3)

IntentRecognitionRouter 编排,命中即短路,尽量绕开大模型:

层级实现手段软目标延迟
-----------------------------
L1IntentRuleMatcher关键词/正则规则匹配< 50ms
L2IntentVectorMatcherDashScope Embedding + InMemoryStore 向量相似度 Top-1< 100ms
L3IntentRecognitionAgentLLM 兜底(Model.stream 单次调用,无 ReActAgent 循环/memory 开销)LLM 延迟

查询重写条件触发 + 单意图直跳

AgentPipelineService 把「查询重写」从必经步骤改为「仅在 L1/L2 未命中时才触发」的条件步骤:

用户消息
  │
  ├─ 用原始问题跑 L1/L2 快速识别(不触发 L3)
  │     │
  │     ├─ 命中 ─► 跳过查询重写,直接调度
  │     │
  │     └─ 未命中 ─► QueryRewritingAgent 改写 ─► 重走完整 L1/L2/L3 ─► 调度
  │
  └─ 调度决策:
        单意图 + 高置信 + 命中子智能体白名单 ─► 直跳对应子智能体(跳过 MasterAgent)
        否则 ─► 走 MasterAgent 路由

四、数据库设计(已完成)

表名用途
------------
agentscope_sessionAgent 会话状态持久化
travel_order差旅申请单
approval_record审批记录
user_profile用户档案(常驻城市、职级、证件、航班偏好)
user_account用户登录账号
travelpolicyrule差旅政策规则(4 职级区间 × 3 城市等级)
chat_conversation对话会话
chat_message对话消息(含 feedback / progress / thinkingByAgent / planTasks / travelData / timeline)
userapikey用户级第三方平台 API Key(tuniu 等凭证)
booking_record外部预订记录(机票/酒店/火车/门票/邮轮/度假统一存储,含内外部单号与状态)
user_preference用户偏好条目(已弃用,迁移至百炼)

五、已完成的关键特性

  1. 多 Agent 协作流水线:QueryRewriting → IntentRecognition → Master → SubAgents 三级串行流水线
  2. 多意图支持:单次用户输入可识别并按顺序处理多个意图
  3. Human-in-the-Loop:Agent 可通过结构化 UI 向用户主动提问并暂停等待
  4. 实时进度推送:通过 SSE 将 Agent 思考过程、工具调用、搜索结果实时展示给用户
  5. 搜索结果可视化:机票/火车票/酒店搜索结果以卡片形式展示,支持多数据源(tuniu-cli / flight-manager / flyai / rolling-go-hotel)格式归一化
  6. 差旅政策合规检查:基于职级和城市等级的自动预算与舱位限制;InfoAgent 实现「RAG 通道(语义问答)+ PolicyTools 通道(精确身份绑定)」双通道决策
  7. 百炼长期记忆:通过 AGENT_CONTROL 模式自动注册记忆工具,MasterAgent/ItineraryPlanAgent 主动召回差旅偏好
  8. 请求级记忆内容缓存:当前请求生命周期内 retrievefrommemory 结果缓存,避免重复 LLM 调用
  9. 工具级熔断:ToolCircuitBreakerHook 实现工具维度的熔断/半开/关闭,半开期失败显式关闭工具组
  10. rgh 多用户隔离:rolling-go-hotel Skill 通过 Hook + TokenStore 隔离多用户登录态
  11. 对话历史持久化:完整的会话管理、历史消息存储与恢复(含 progress / thinkingByAgent / planTasks / travelData / timeline 等结构化扩展)
  12. 集群部署支持:Redis 中断广播 + 跨节点会话恢复
  13. 自动会话标题生成:由 ConversationTitleService 在独立线程池 titleTaskExecutor 异步生成对话标题(轻量 LLM 服务,非 ReActAgent)
  14. 时间轴对话展示:前端对话 UI 重构为按执行顺序的时间轴流式展示
  15. 推荐问题按场景化使用:助手抛出澄清/选择题时禁止硬塞"确定/确认",等待用户整体确认/修改时才优先用快速操作关键词
  16. 行程冲突检测:提交/修改差旅单时自动检测与已有生效单的时间重叠与跨城交通衔接冲突,分级告警供 LLM 决策
  17. 行程智能优化ItineraryPlannerToolplan_roundtrip)双轨评分(LLM 软判断偏好分 + 工具硬指标),多目标权衡输出 4 类代表方案对比;由 Python skill 平移为进程内 Java @Tool
  18. 全链路敏感信息脱敏:基于 houbb sensitive 框架,日志与前端输出中的身份证/手机号/银行卡/邮箱/密钥自动脱敏
  19. 依赖注入规范统一:全局 Spring Bean 由构造器注入统一改为字段注入,副作用下沉 @PostConstruct
  20. 意图识别与查询重写优化:L1/L2/L3 三层分层短路 + 查询重写条件触发 + 单意图高置信直跳子智能体,高频请求可省去改写与 MasterAgent 两次 LLM 调用(详见 3.9)
  21. 外部预订记录管理BookingPersistenceHook 自动将 tuniu 下单/取消结果落库 booking_recordBookingReadTools 供用户按租户隔离查询预订
  22. 上下文 token 优化:MCP/CLI 结果去重压缩(CliResultCompressHook)+ 历史技能正文折叠(SkillContentCollapseHook),压降多轮对话的 LLM 输入 token

六、项目统计

七、todo

1、通过A2A接入发票识别、做自动报销 2、基于AgentScope-Java 2.0做重构及改造 3、可观测性