GoGo 智能差旅助手(gogo-agent) 是一个基于 多 Agent 协作架构 的企业级差旅管理系统,通过 AI 智能体串起「差旅申请 → 审批 → 行程规划 → 交通/酒店预订 → 报销」的全链路自动化流程。 - 语言/JDK:Java 21 - 版本:1.0.0-SNAPSHOT - Agent 框架:AgentScope 1.0.12(ReAct 模式 + Hook 生命周期 + Tool/Skill/MCP 统一编排)(目前是基于1.0的,后面会改造成2.0) - 交互模式:SSE 流式推送 + Human-in-the-Loop
整体架构
分层视图

请求主流程(对话一次的旅程)

多智能体架构

技术栈
后端
| 分类 | 技术 | 版本 | 用途 |
|---|---|---|---|
| 语言/框架 | Java / Spring Boot | 21 / 3.4.0 | 主运行时 |
| AI Agent | AgentScope + agentscope-spring-boot-starter | 1.0.12 | ReAct 智能体、Tool/Skill/MCP/Hook 一体化 |
| LLM | DashScope(通义) | 2.22.9 | 主模型与 Embedding |
| 长期记忆 | 阿里云百炼 | bailian20231229 | AGENT_CONTROL |
| 响应式 | WebFlux (Reactor) | - | SSE 流式编排 |
| 上下文传递 | TransmittableThreadLocal | 2.14.5 | Reactor 线程切换的 ThreadLocal 传播 |
| ORM | MyBatis-Plus | 3.5.9 | 领域持久化 |
| 数据库 | MySQL + Druid | -/1.2.23 | 主库 + 连接池 |
| 缓存/协调 | Redis (Spring Data Redis) | - | Session、中断广播、熔断状态、APIKey 缓存、RGH 登录态 |
| 鉴权 | Sa-Token (+ Redis Jackson) | 1.39.0 | Token 认证、Redis 持久化 |
| JSON | Fastjson2 | 2.0.43 | Agent 上下文 & Tool 参数序列化 |
| 文档解析 | Apache POI | 5.2.5 | Word/Excel 知识库加载 |
| 敏感信息 | houbb sensitive(core + logback) | 1.7.0 | 日志与前端脱敏 |
| 测试 | JUnit 5 + AssertJ | - | 单元/集成测试 |
前端
| 分类 | 技术 | 版本 | 用途 |
|---|---|---|---|
| UI 框架 | React | 19 | 组件化 |
| 构建 | Vite | 8 | 开发/构建 |
| 语言 | TypeScript | 6 | 类型安全 |
| 组件库 | Ant Design | 6 | 基础 UI |
| 状态管理 | Zustand | 5 | 简洁 store |
| 富文本 | react-markdown + remark-gfm | 10 / 4 | Agent 消息 Markdown |
| 图表 | Recharts | 3 | 结果可视化 |
| HTTP | Axios | 1 | REST 调用 |
外部能力(Skill / MCP / RAG)
- Skill Shell:tuniu-cli(⭐推荐,整合机票/酒店/门票/火车/邮轮/度假)、flight-manager、flyai、rolling-go-hotel、reimbursement
- MCP:weather-mcp(阿里云网关)、orizn-visa-mcp(stdio 子进程)
- RAG 知识库(3 个 Knowledge Bean,直出为 Spring Bean 供 Agent 链式注入):
- attractionKnowledge — 景点(tourist_attraction.xlsx,GENERIC + AGENTIC)
- corporateTravelPolicyKnowledge — 差旅政策(business_travel_policy.docx,AGENTIC)
- corporateTravelGuidelinesKnowledge — 差旅指南(business_travel_guidelines.docx,AGENTIC)
模块划分
| 层 | 目录 | 关注点 | 不做什么 |
|---|---|---|---|
| 接入层 | frontend/src | UI 渲染、事件时间轴、流式渲染 | 任何业务规则计算 |
| Web/API | controller/ | 协议转换(REST/SSE)、鉴权、SSE emitter 生命周期 | 业务规则、Agent 编排细节 |
| Agent 编排 | agent/ | 多智能体协作、工具/技能挂载、Hook 拦截、意图路由 | 直接写领域数据库 |
| 业务领域 | business/ | 差旅单/审批/预订/政策/偏好/用户领域模型与持久化 | 感知 Agent / SSE |
| 基础设施 | config/ | Bean 配置、鉴权、连接池、外部 SDK、MCP、Skill | 领域逻辑 |
核心功能点

多 Agent 协作(8 个 ReActAgent + 2 个轻量 LLM 服务)
| 类型 | 名称 | 职责 |
|---|---|---|
| ReAct | MasterAgent | 总协调入口,通过 SubAgentTool 路由到子智能体,承载长期记忆 |
| ReAct | QueryRewritingAgent | 上下文补全 / 指代消解 |
| ReAct | IntentRecognitionAgent | LLM 兜底意图识别(L3, |
| Plan-and-Execute | ItineraryPlanAgent | 行程规划,交通/酒店比价预订,含长期记忆 |
| ReAct | ItineraryManageAgent | 差旅单 CRUD 与审批流转 |
| ReAct | ItineraryReviewAgent | 六维审核(完整性/时间/出发目的地/预算/偏好/路径) |
| ReAct | InfoAgent | 政策/景点/签证/通用信息(3 RAG + MCP) |
| ReAct | ReimbursementAgent | 发票识别与报销单生成 |
| 轻量服务 | ConversationTitleService | 独立线程池异步生成会话标题 |
| 轻量服务 | QuestionRecommendationService | 每轮回复后生成推荐问题 |
三层意图识别(L1 → L2 → L3,命中即短路)
| 层级 | 实现 | 手段 | 软目标延迟 |
|---|---|---|---|
| L1 | IntentRuleMatcher | 关键词 / 正则 | < 50ms |
| L2 | IntentVectorMatcher | DashScope Embedding + InMemoryStore Top-1 | < 100ms |
| L3 | IntentRecognitionAgent | LLM 单次调用兜底 | LLM 延迟 |
配套 查询重写条件触发 + 单意图直跳 两项优化: - L1/L2 命中 → 完全跳过 QueryRewritingAgent(省一次 LLM) - 单意图 + 高置信 + 命中子智能体白名单 → 直跳子 Agent(省一次 MasterAgent 路由,节省 1–3s) - 三层结果统一为 IntentRecognitionResult(标注来源 RULE/VECTOR/LLM 与置信度),下游零改动
Hook 生命周期能力(13 个)
- 进度可视化:ProgressNotifierHook 通过 SSE 实时推送 message / thinking / progress / travel_data / plan_update / user_interaction / agent-switch …
- 持久化:SessionPersistenceHook、ActiveAgentPersistenceHook(会话续跑)、BookingPersistenceHook(tuniu 下单结果自动落库,对 LLM 透明)
- 优雅中断:AgentExecutionRegistryHook + Redis Pub/Sub 广播,支持集群跨节点停止
- 稳定性:ToolCircuitBreakerHook(熔断/半开/关闭三态 + 指数退避 + 显式关闭工具组,Redis 共享状态)
- 多租户隔离:RghUserIsolationHook + RghTokenStore 隔离 RGH 登录态;FlightApiKeyHook / TuniuApiKeyHook 动态注入 API Key
- Token 成本优化:CliResultCompressHook(MCP/CLI 结果去重压缩)+ SkillContentCollapseHook(历史技能正文折叠)
- 上下文:DynamicTimeInjectionHook 动态注入当前时间
工具矩阵(14 个 @Tool 类)
- 通用:UserInteractionTools(Human-in-the-Loop)、PolicyTools、DestinationLiveTools、QueryUserInfoTools、InfoQueryTools、ApiKeyTools
- 差旅单:TravelOrderReadTools / WriteTools / CloneItineraryTools / TravelOrderConflictTools
- 规划:ItineraryReviewTools、RoundtripPlannerTool(往返方案对比:去×住×返组合 / 时间价格归一化 / policy 软约束 / 偏好分合成 / 输出 4 类代表方案)
- 预订:BookingReadTools
- 报销:ReimbursementTools
外部能力集成
- Skill Shell(5 个):tuniu-cli⭐(整合机票/酒店/门票/火车/邮轮/度假)、flight-manager、flyai、rolling-go-hotel、reimbursement
- MCP(2 个):weather-mcp(Streamable HTTP)、orizn-visa-mcp(stdio 子进程;工具白名单降 token)
- RAG(3 个 Knowledge Bean):attractionKnowledge / corporateTravelPolicyKnowledge / corporateTravelGuidelinesKnowledge;InfoAgent 采用 RAG 通道(语义问答)+ PolicyTools 通道(精确身份绑定) 双通道决策
- 百炼长期记忆:MasterAgent / ItineraryPlanAgent 启用 AGENT_CONTROL 模式,系统自动注册 record_to_memory / retrieve_from_memory;配请求级 TravelPreferenceMemoryCache 避免重复 LLM 调用
差旅业务能力
- 差旅政策合规:4 职级区间 × 3 城市等级 = 12 条规则,覆盖机票舱位 / 火车席别 / 酒店限额 / 星级 / 餐补 / 交通补贴 / 审批阈值 / 提前预订天数
- 行程冲突检测:TravelOrderConflictTools 检测同员工时间重叠(同城重复 / 跨城物理不可能)+ 跨城通行合理性,输出 HIGH/MEDIUM/LOW 三级
- 行程智能优化:RoundtripPlannerTool 双轨评分(LLM 偏好软判断 + 工具硬指标加权融合),多目标权衡输出 4 类代表方案
- 外部预订统一落库:booking_record 统一存储机票/酒店/火车/门票/邮轮/度假,含内外部单号与状态;按 userId 租户隔离查询
交互与前端能力
- SSE 流式协议 事件:message / thinking / progress / travel_data / plan_update / user_interaction / suggestions / agent-switch / interrupted / done
- Human-in-the-Loop:UserInteractionTools 支持 text / select / multi_select / confirm / form / date / number 等 UI 类型;工具暂停→前端表单→用户提交→Agent Resume
- 时间轴对话展示:前端按执行顺序渲染,思考/进度/结果混排
- 搜索结果卡片:多数据源(tuniu / flight-manager / flyai / rolling-go-hotel)经 TravelDataNormalizer 归一化为统一卡片模型
基础设施能力
- 集群部署:Redis Pub/Sub 广播中断、Redis 共享熔断状态、agentscope_session 表跨节点会话续跑
- 鉴权:Sa-Token(Redis Jackson 持久化,30 天 Token,随机 128 位)
- ThreadLocal 传播:TransmittableThreadLocal 解决 Reactor 线程切换的上下文丢失
- 全链路脱敏:SensitiveMasker(houbb sensitive)覆盖日志 Converter 与前端响应,覆盖手机号 / 身份证 / 银行卡 / 邮箱 / API Key / 密钥键值对
数据模型(11 张核心表)
| 表 | 用途 |
|---|---|
| agentscope_session | AgentScope 会话状态多状态键存储 |
| travel_order | 差旅申请单(生命周期状态机 DRAFT→SUBMITTED→APPROVED/REJECTED→COMPLETED/CANCELLED) |
| approval_record | 审批记录(关联差旅单) |
| user_profile | 用户档案(常驻城市 / 职级 / 姓名拼音 / 邮箱 / 证件 / 手机 / 性别) |
| user_account | 登录账号(含 USER/ADMIN 角色) |
| travel_policy_rule | 差旅政策规则(职级区间 × 城市等级) |
| chat_conversation | 对话会话(含 title / 逻辑删除) |
| chat_message | 对话消息(含 role / feedback / extra JSON:progress / thinking / planTasks / travelData / timeline) |
| user_api_key | 用户级第三方 API Key 加密存储 |
| booking_record | 外部预订统一记录(含内外部单号与状态) |
| user_preference | 用户偏好条目(已迁移至百炼长期记忆,保留兼容) |