G

gogo-agent

项目实战3(gogo-agent)

旅行场景多智能体系统

82 篇 · 约 243 分钟
01

项目功能介绍与演示

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
02

项目整体架构与核心功能

GoGo 智能差旅助手(gogo agent) 是一个基于 多 Agent 协作架构 的企业级差旅管理系统,通过 AI 智能体串起「差旅申请 → 审批 → 行程规划 → 交通/酒店预订 → 报销」的全链路自动化流程。 语言/JDK:…

12 min
03

项目如何启动&快速开始

配置修改 找到项目中的application.yml,搜索 记得改成你自己的 这句话,他前面的配置你需要改成你自己的。 用途 配置项 获取方式 是否必改 DashScope API Key agentscope.dashscope.…

7 min
04

会话与消息的持久化

很多初学者最容易犯的错误,是把"聊天记录持久化"理解成"往一张 message 表里插数据"。但在一个 Agent 系统里,"会话"这个词同时对应两种完全不同的东西: 1. 用户在界面上看到的逐字聊天记录(谁说了什么、什么时候、能不…

8 min
05

项目中有哪些智能体,各自职责是什么?

gogo agent 不是"一个大模型干所有事",而是把一次差旅全生命周期拆成一条流水线,让不同职责的智能体各管一段。全项目共 9 个智能体,按角色分成三层: 分析层 QueryRewritingAgent 多轮问题改写与指代消除 …

9 min
06

什么是意图识别/问题改写,为什么要做?

意图识别和问题改写,是 gogo agent 在真正干活(调子智能体、查数据、下单)之前的两道"预处理"工序。它们本身不直接完成用户的诉求,而是把用户那句可能含糊、口语、带指代的话,加工成机器能可靠处理的形式。放在一起理解最清楚,因…

1 min
07

为什么意图识别/问题改写不放在主智能体或者做成Skill?

在 GoGo 智能差旅助手中,意图识别(IntentRecognition)和问题改写(QueryRewriting)被设计为 Agent 调用流水线的前置阶段,由 AgentPipelineService 统一编排,而非放入 Ma…

3 min
08

为什么问题改写/意图识别不用ReAct Agent?

问题改写和意图识别,我们是需要借助大模型的,依靠他的语言理解能力和总结能力帮我们做意图识别和问题改写。但是这两个工作我们没有使用ReAct Agent,而是选择了其他的方式实现。这也是有意为之的。 (除了这两个Agent,其实还有标…

3 min
09

非ReActAgent如何做Session持久化

无状态 Agent,比如我们的QueryRewritingAgent、IntentRecognitionAgent 这类"单次调用、不持有 Memory"的分析型 Agent。我们也需要针对他们做session的持久化,但是这类Ag…

1 min
10

通过问题改写融合多轮对话

用户:我想申请下周去杭州出差。 助手:好的,请告诉我具体出发和返回日期。 用户:周一去,周三回。 用户:帮我查一下那边的酒店 ← "那边"指哪?下游Agent看不懂

3 min
11

基于规则+RAG+LLM构建三层意图识别

意图识别嘛,把用户的话丢给大模型,让它输出一个分类 JSON 不就行了?能跑,但是实际企业里面用起来,这个"纯 LLM"方案有三个致命成本: 1. 慢。一次 LLM 分类动辄 300ms~2s,而"你好""查一下审批进度"这种高频、…

10 min
12

单次对话多意图识别与执行

前面我们讲过了三层意图识别,把前面的链路总结一下,一次请求进来有两个情况: L1/L2 命中 L3 命中 三层意图识别里,L1(正则)和 L2(向量最近邻)本质都是单标签分类器——一条规则、一条最近邻,只能给出一个意图。而L3则承载…

2 min
13

意图识别与问题改写的流水线编排

✅基于规则+RAG+LLM构建三层意图识别 意图识别嘛,把用户的话丢给大模型,让它输出一个分类 JSON 不就行了?能跑,但是实际企业里面用起来,这个"纯 LLM"方案有三个致命成本: gogo agent 的解法是把意图识别做成一…

3 min
14

用户意图很明确时,直接路由给子智能体还是主智能体?

"意图明确"是直跳的必要条件,但不是充分条件。 在本方案里,只有同时满足三条,才会跳过 MasterAgent、把请求直接交给某个子智能体: 1. 单意图(multi intent = false 且 intents 恰好 1 项)…

4 min
15

问题改写、意图识别、MasterAgent、SubAgent的执行顺序

前面介绍了一些关于问题改写、意图识别、MasterAgent、SubAgent之间的执行的一些顺序内容,这里整体放到一起讲一下。 下面的activeAgent这个分支可以先不用管,这个是后面会讲的。 问题改写不是必经步骤:先用原始问…

1 min
16

多智能体之间的上下文传递方式

在一个多智能体项目中,多个智能体之间的参数传递肯定不是单一手段,如果是单一手段,那这个项目也没啥必要学习了。 在我们的项目中,主要用到了以下这些手段在多智能体之间传递上下文。 1. Agent as Tool(主要的编排层交接方式)…

3 min
17

使用TTL实现多智能体之间的上下文传递

在我们的项目中,有一些参数,需要全局传递,比如userId,从用户一进来就确定了,我们需要在多个智能体之间传递、并且在tools、hook中也可能需要用到,那么如何实现这个参数的传递呢。 gogo agent 用 Transmitt…

4 min
18

主智能体功能介绍与开发

MasterAgent 是整个智能差旅系统的总协调者(Orchestrator)。它本身是一个 ReActAgent,但不直接干"查政策、订机票、提审批"这类脏活,而是把各个专业子智能体(ItineraryManageAgent /…

5 min
19

我给 Agent 加了哪些关键配置

先看 MasterAgent 构建时的完整配置,后面逐项拆解:

5 min
20

各个Agent配置对比一览

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
21

用了哪几种模型,分别用在哪?

@Bean("strongModel") @Primary public Model strongModel() { return DashScopeChatModel.builder() .apiKey(apiKey) // 12…

1 min
22

快速路由到上次执行的子智能体

多智能体系统里,一句完整的用户请求要先后经过"问题改写 → 意图识别 → MasterAgent 协调 → 子智能体执行"多级 LLM 推理。但真实对话中,用户在一个子智能体的处理过程里往往会连续追问或确认,比如:

5 min
23

如何避免模型幻觉导致用户id传错?

我们在代码中提供了很多工具,这些工具需要去做数据库的CRUD操作,比如查询行程单、取消行程单、查询用户的API KEY等。 这些工具,我们可以通过提供参数的方式,让LLM传入上下文中的用户ID,但是实际运行时会发现,有的时候LLM回…

3 min
24

行程管理智能体的功能介绍及开发

ItineraryManageAgent 是差旅单(Travel Order)的「全生命周期管家」——从用户口头表达出差意图到收集信息、冲突检测、提交审批、查询进度、修改计划、取消申请、联动取消关联预订,全部由它对话式驱动完成。它不…

5 min
25

行程管理相关业务数据模型

差旅的行程管理部分,我们主要有两个业务单据: 差旅申请单(travel order):出差的"意图"——去哪、什么时候、为什么,要走审批、要长期留存、要做冲突检测。 差旅审批单(approval record):差旅单提交后产生的审…

1 min
26

如果定义一个好的工具

工具是 LLM 与真实世界之间的合约。好的工具 = 好的合约。Agent中的工具的好坏和原来我们开发一个接口的好坏的评判标准可差别太大了 我认为,一个好的工具,应该是:命名精确(LLM 一看就知道什么时候该调)、参数明确(LLM 不…

6 min
27

如何基于回答更好的问题推荐?

推荐问题不是「凑几个相关问题」,一条好的推荐要同时满足四点: 1. 贴合当前阶段:助手在问选择题时,推荐的应该是具体选项,而不是干巴巴的「确定」。 2. 能一键执行:点了之后最好能直接触发后端动作(跳过重新编排),而不是又走一遍主智…

4 min
28

为什么要关闭模型的深度思考?

ReAct 的 Reason→Act→Observe 循环,本质上已经把"思考"拆成了多轮显式的 LLM 调用。每一轮 call 中,模型看到完整的 history(包括之前的推理轨迹、工具返回结果),然后决定下一步。这意味着模型不…

5 min
29

使用缓存减少工具重复调用

在 ReActAgent「推理→调工具→再推理」的循环里,重复调用几乎是必然的: 同一轮多步:规划一次差旅,模型可能在校验餐标、校验酒店标、生成方案时各查一次差旅政策——其实是同一份数据。 跨会话高频:用户每开一轮新对话,Agent…

4 min
30

为什么行程规划智能体要用Plan-and-Exucute?

帮一个出差员工规划一趟"上海到杭州,周五去周日回"的行程,听起来简单。但拆开来看,Agent 至少要完成以下事情:查已审批的差旅单获取约束、召回用户历史偏好、查差旅政策拿到报销标准、搜索去程航班/高铁、搜索返程航班/高铁、搜索酒店、…

6 min
31

行程规划智能体的功能介绍及开发

ItineraryPlanAgent = "搜+算+审+修"闭环的行程规划专家——它从审批单或对话中获取需求,调 CLI/MCP 搜索候选交通酒店,让 LLM 对候选打偏好分后交给确定性计算引擎做组合排序,存 Redis 后委托审核…

8 min
32

为什么行程方案设计不用Skill要用工具?

整个行程规划流程分为两个阶段,恰好对应使用了2种能力: 数据收集天然适合 Skill:调用外部 API 本质就是按照文档拼接命令参数,LLM 擅长理解"搜索上海到杭州的航班"然后映射到正确的 CLI 命令。 但方案计算为什么不能也用…

3 min
33

行程方案设计工具设计细节

plan itinerary,是行程规划的"计算大脑",承担了最核心的数学逻辑。 ✅为什么行程方案设计不用Skill要用工具? 整个行程规划流程分为两个阶段,恰好对应使用了2种能力: 数据收集天然适合 Skill:调用外部 API …

1 min
34

市面上可用的旅行相关skill/mcp工具对比

在我们的项目中,我们需要查询酒店、机票、火车票,并且还需要做预订、取消等等,这些我们没办法自己做,需要依赖第三方能力。 在以前,我们只能调第三方接口,但是ai时代,我们可以通过第三方的skill或者mcp来实现,我找遍了市面上的所有…

5 min
35

天气查询工具/MCP的接入

市面上关于天气相关的工具有很多,但是要么就有限制,要么就要收费。 gogo agent 首选的 wttr.in 是一个开箱即用、无需 API Key 的免费天气服务,但它只能给出今天起 3 天内(今天 + 未来 2 天)的预报。而差…

4 min
36

为什么行程审核不用Skill要用子智能体?

我们的项目中,在行程规划后,我们需要对行程进行审核,检查时间是否正确,目的地是否正确, 是否符合差旅政策等等。 这个审核的节点,有很多实现方式,比如直接写在行程规划的智能体的prompt中,比如做成一个skill让行程规划智能体执行…

3 min
37

行程审核智能体的功能介绍及开发

差旅系统里,行程规划 Agent(ItineraryPlanAgent)会用一个强模型(qwen3.7 max + 深度思考)一次生成好几套候选方案:综合最佳、时间最短、价格最低……但「生成」和「把关」是两种截然不同的认知任务。 生…

6 min
38

ReviewAgent如何获取到PlanAgent的规划结果?

ReviewAgent和PlanAgent之间需要传递方案,但是我们不是通过参数传递,而是通过 Redis 中转。PlanAgent 把规划结果写进 Redis,ReviewAgent 从同一个 key 读出来。(如果不考虑集群部署…

2 min
39

为什么单独搞一个BookingAgent?

我们为什么要单独搞一个BookingAgent,直接把他和PlanAgent放一起不就行了么,反正都要调用tuniu cli。 一开始我确实是这么干的,但是后来我把他拆开了。 职责不同 因为「规划」和「预订」是两种性质截然不同的操作…

2 min
40

行程预订智能体的功能介绍及开发

到了预订这一步,Agent 要干的是真实的写操作:调第三方平台出机票、订酒店、订火车票。以及用户如果要取消预订,也是通过BookingAgent来支持的。 BookingAgent 先看这个 Agent 怎么装出来的。文件在 age…

7 min
41

预定时,为什么下单用skill,取消用工具?

预订智能体(BookingAgent)里有个乍看很别扭的不对称: 下单(出机票 / 订酒店 / 订火车票):没有任何一个 Java @Tool 负责下单。LLM 读 tuniu cli 技能文档,自己拼出 tuniu call fl…

5 min
42

行程预定相关业务数据模型

行程预定是通过第三方平台进行的,但是我们也会在本系统落一条记录,方便用户查询。 预订记录(booking record):真正花了钱的机票/酒店/火车票,来自 tuniu、rolling go hotel、flight manage…

1 min
43

Agent中如何实现第三方鉴权?

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
44

如何实现API KEY的动态管理与加密、脱敏

gogo agent 是一个差旅智能体,它需要调用多个第三方服务(机票搜索、酒店预订、火车票查询),每个服务都需要 API Key。这带来了一组工程挑战: 1. 存储安全:API Key 不能明文落库,泄露即资损 2. 多用户隔离:…

4 min
45

为了缩短执行链路,做了哪些优化?

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
46

多智能体之间通信方式如何选择?

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
47

什么时候用Skill,什么时候用SubAgent

选型的核心问题就一个:这个任务需要"独立思考"吗? 需要 → SubAgent 不需要,照着做就行 → Skill

1 min
48

工具并行执行&失败重试

在这套差旅助手里,Agent 每一轮 reasoning 之后往往要调用一批工具:查差旅政策、查订单、查目的地天气/资讯、调外部平台(tuniu / 签证 MCP)、甚至把子 Agent 当工具委托出去。这些调用有两个共同特征,直接…

3 min
49

引入工具级熔断机制避免重复失败

先看一个真实痛点。ItineraryPlanAgent 在规划行程时会调天气工具,如果工具存在网络抖动、服务不可用、连续返回错误,会发生什么? ReAct 循环是「推理 → 调工具 → 看结果 → 再推理」的闭环。工具报错后,模型看…

8 min
50

提示词工程——角色与人格设定

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
51

提示词工程——结构化输出约束

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
52

提示词工程——Few Shot

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
53

提示词工程——Step-back Prompting

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
54

提示词工程——Reflexion

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
55

提示词工程——决策表 / 路由表

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
56

提示词工程——要不要在prompt中写清楚工具该怎么用?

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
57

提示词工程——注意力引导

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
58

提示词工程——动态变量注入

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
59

提示词工程——职责边界与拒绝策略

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
60

上下文工程——记忆自动压缩

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
61

上下文工程——用Tool替代python脚本

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
62

上下文工程——如何对第三方Skill瘦身

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
63

上下文工程——工具返回内容裁剪

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
64

上下文工程——优化系统提示词利用KV缓存

我们在前面讲Manus的上下文工程实践的时候,讲过KV Cache ✅实战:Manus的上下文工程实践 Manus 曾经发表过一篇文章《Context Engineering for AI Agents: Lessons from …

5 min
65

上下文工程——上下文缓存

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
66

上下文工程——利用中间文件减少token消耗

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
67

上下文工程——Skill正文折叠

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
68

上下文工程——长期记忆

长期记忆让 Agent 跨会话记住"你是谁、你喜欢什么"——用户说过一次"我出差只坐高铁一等座、不订红眼航班",下个月再来规划时 Agent 自动带上这些偏好,无需重复交代。在 gogo agent 里,它由 AgentScope …

4 min
69

Harness工程——行程规划的执行闭环

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
70

Harness工程——分层记忆体系

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
71

Harness工程——沙箱

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
72

Harness工程——命令执行的安全护栏

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
73

Harness工程——可观测性

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
74

集群架构下的Agent打断与恢复

单机时代,打断和恢复都很简单:一个内存变量标记"停",一个内存对象存"待恢复状态"。但一旦上多节点集群,两个难题立刻浮现: 难题一:打断请求和运行中的 Agent 可能不在同一个节点。 用户点"停止",请求经负载均衡打到节点 B,可…

3 min
75

Agent 编排与智能调度

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
76

如何实现用户级别的鉴权隔离

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
77

接入RAG 知识库,让 Agent 拥有领域知识

大模型的参数里装着「世界的常识」,但装不下三类东西: 1. 私域知识:公司的差旅报销制度、住宿超标规则、差旅行为准则——这些从来没进过任何预训练语料。 2. 长尾/时效知识:某个小众景点的开放时间、某国最新签证政策——模型要么不知道…

6 min
78

外部能力集成 — MCP 与 Skill

一个只会聊天的 LLM 是没有价值的,它必须能查天气、查签证、搜航班、订酒店、开发票——这些都是「外部能力」。在 gogo agent 里,接入外部能力有两条截然不同的路径: MCP(Model Context Protocol):…

5 min
79

Human-in-the-Loop — Agent 与用户的结构化交互

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
80

实时通信 — SSE 流式推送架构

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
81

引入A2A实现跨域Agent通信

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min
82

会话管理与集群部署 — 生产级Agent 系统

本页原始导出仅包含标题。以下内容依据章节主题补充为工程实践指南;涉及具体项目参数时,请以实际代码与配置为准。

1 min