文章目录
- 前言
- 一、Agent 一多就乱,问题到底出在哪
- 1.1 单打独斗的 Agent,像个全能实习生
- 1.2 ReAct 循环:走一步算一步,翻车了才知道
- 二、Plan 的全生命周期:从立 flag 到拔 flag
- 2.1 创建计划:先把活拆成待办清单
- 2.2 Hint 注入:AI 也会忘事
- 2.3 持久化:刷新页面不等于重头再来
- 2.4 SSE 推流:让用户看着你干活
- 三、主 Agent 与子 Agent:老板和打工人的正确打开方式
- 3.1 声明式配置:招人先写 JD
- 3.2 可观测与中断传播:子 Agent 不能是黑盒
- 四、A2A:跨部门的 Agent 协作
- 4.1 一次调用分三层
- 4.2 最容易被忽略的坑:会话归属
- 五、企业级能力:从 demo 到生产,差的是这口气
- 5.1 多租户全链路隔离
- 5.2 认证:三扇门
- 5.3 全链路追踪:谁干了啥,一清二楚
- 5.4 SSE 分层消息:每一步都直播给你看
- 5.5 异常保护:四道防线
- 5.6 双引擎 + MCP:知识的两个来源
- 六、纸上谈兵结束,来三个实战场景
- 6.1 场景一:复杂研究报告生成
- 6.2 场景二:多系统数据聚合
- 6.3 场景三:跨部门 A2A 协作
- 七、总结:从 demo 到生产,就差一个“能扛事”
P.S. 推荐一个大神的教程给想要了解或者学习人工智能知识的读者,这个教程里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏教程,请点击下方链接查看, 传送门https://blog.csdn.net/qq_74013365
前言
事情是这样的:我们的平台要同时服务研发、数据分析、知识问答好几个场景,Agent 一多,场面就开始失控。你想想,一群 Agent 同时干活,跟你过年回家被七大姑八大姨同时盘问工资是一个效果——信息量爆炸,谁都插一嘴,最后啥也没干成。
一、Agent 一多就乱,问题到底出在哪
先说结论:不是模型不行,是“组织方式”不行。
1.1 单打独斗的 Agent,像个全能实习生
让一个 Agent 又查数据、又检索资料、又写报告、又给建议,就像让实习生一个人扛下整个部门的 KPI——勇气可嘉,结局感人。工具集越挂越大,上下文越来越乱,权限边界越来越糊,最后它连自己是来干啥的都忘了。这个状态你肯定不陌生:打开手机想查个东西,结果刷了半小时短视频。
1.2 ReAct 循环:走一步算一步,翻车了才知道
ReAct 循环的逻辑是:推理 → 调工具 → 继续推理。听起来很优雅,用起来很刺激,因为它有四个经典大坑:
- **前置步骤没做完,干到一半才发现。**跟炒菜先放盐再洗菜一样,流程是对的,人已经傻了。
- **过程全藏在 Prompt 里,没法审计。**你问它干了啥,它给你写小作文。
- **Token 消耗没法预估。**月底一看账单,比打车费还离谱。
- **工具一失败就原地卡死,没有恢复路径。**像极了被领导当场问住的我。
所以我们要的是 Plan-and-Execute:先把“要干什么”和“怎么干”拆开。计划不再是一句备注,而是一个有状态、能持久化、能被前端盯着看的正经对象。说人话:先立 flag,再一个个拔。
二、Plan 的全生命周期:从立 flag 到拔 flag
2.1 创建计划:先把活拆成待办清单
平台把计划操作注册成工具,模型可以按需创建、调整计划。最小工具集长这样:
create_plan(name, description, subtasks) activate_subtask(index) finish_subtask(index, outcome) finish_plan(summary)这就跟写周报一个道理:先把事拆开,才有机会一项项打勾。没有计划的 Agent 干活,等于没有购物清单逛超市——出来发现买了一堆用不上的,还超了预算。
2.2 Hint 注入:AI 也会忘事
模型有个致命缺点:它会忘记自己正在执行计划。这毛病我太熟了,跟我出门忘带钥匙的频率差不多,属于医学上说的“刚站起来就忘了要干嘛”。
所以每轮推理前,我们会根据计划状态注入一段短提示:没计划就建议创建,有计划就提醒激活下一步,有进行中的任务就提示可以执行、完成或放弃。注意,Hint 是软约束,不替模型做决定;硬约束由框架负责,比如同一时刻只允许一个任务进行中,不能跳过没完成的前置任务。模型可以加任务也可以放弃任务,但必须留下状态变化——跟离职要交接一样,不能拍拍屁股就走。
2.3 持久化:刷新页面不等于重头再来
长任务最怕什么?干到一半,用户刷新页面了、网络断了、服务重启了。那一刻的心情,跟游戏没存档就关机差不多。
所以计划状态要独立保存,每次变化立即序列化,重连后读最后一个有效版本继续干。恢复还得幂等:工具响应丢了,就按任务标识去查,而不是无脑重试。什么叫无脑重试?就是快递丢了不去查物流,而是把同一件东西再买一遍。
2.4 SSE 推流:让用户看着你干活
用户讨厌的不是等待,而是不知道要等多久。平台用 SSE 推送结构化事件:CHAT 是回复增量,PROCESSING 是计划、工具、子 Agent 的状态,ERROR 是翻车现场。
前端可以展示“正在检索资料”“第 2/5 项已完成”这种状态卡片。等 Agent 干活跟等外卖一样,你得让它显示“骑手正在赶来”,用户才愿意继续等,不然他以为你把人家的需求忘了。
三、主 Agent 与子 Agent:老板和打工人的正确打开方式
单个 Agent 啥都干,工具集会爆炸,上下文会发霉,权限边界会消失。主/子模式把职责拆开:主 Agent 负责理解目标、拆任务、汇总结果;子 Agent 负责某一类专业活。说白了,主 Agent 是老板,子 Agent 是打工人——老板可以不懂 SQL,但必须会分活。
3.1 声明式配置:招人先写 JD
子 Agent 用配置描述名称、职责、工具和模型:
name: data_analyst description: 负责数据查询与统计分析 tools: [query_data, calculate_metric]平台启动时创建独立实例,再包装成主 Agent 可调用的工具。子 Agent 有独立记忆、独立工具集、独立系统提示,只接收当前任务的输入——防止它闲聊时把上一个项目的八卦带进来。
短任务同步等,耗时任务异步查,多个独立任务还能并行。异步任务必须自带查询、取消、超时和回收能力,不然任务一旦跑飞,你只能看着它越跑越远,跟风筝断线一样。
3.2 可观测与中断传播:子 Agent 不能是黑盒
子 Agent 干得再专业,也不能当黑盒。主、子 Agent 的工具事件要汇进同一条追踪链路,前端能看见“哪个角色在调哪个工具”,排查问题时能还原完整调用树。
取消也得贯穿层级:父会话设中断标志,子 Agent 在每个执行周期检查,然后协作式退出;流式连接一关,后台任务进入可回收状态。这就像公司收工,不能只通知老板,得让所有人都知道,不然还有人傻乎乎在工位加班。
四、A2A:跨部门的 Agent 协作
同进程内的子 Agent 适合快速编排,但不同团队往往各自维护自己的 Agent 服务。这时候 A2A(Agent-to-Agent)协议登场:让大家发现彼此、提交任务、接收流式结果、管理会话。翻译一下:以前各部门自己干自己的,现在终于有了一本通讯录。
4.1 一次调用分三层
- **发现:**服务发布 Agent Card,声明能力、技能和通信方式,调用方通过标准地址获取。相当于在楼下公告栏贴自己的简历。
- **调用:**用 JSON-RPC over HTTP/SSE,支持同步发、流式发、查任务、取消任务。
- **执行适配:**被调用方把协议消息转成统一会话入口,A2A 请求和用户请求共享 Plan、工具和推流能力。相当于外来访客也要刷卡,跟内部员工一个通道。
A2A 不是一次性 RPC,典型时序是:发现层拿到对方 Agent Card 确认能力 → 发首条消息,对方建会话并返回 contextId → 后续请求带着标识延续上下文,长任务走流式逐步回传 → 执行期间随时能查状态、能取消。用户和租户身份必须随请求传递,异步执行时还要恢复。
4.2 最容易被忽略的坑:会话归属
contextId 必须和发起方身份绑定,否则谁捡到这个 ID 都能读别人的会话——这跟捡到别人的门禁卡就能进公司是一个道理,想想都后背发凉。
异步恢复时,租户条件要重新注入数据访问层,而不是信任调用方传来的快照。把这两条规则前置到协议适配层,业务 Agent 就不用每处都重写鉴权逻辑。一句话:把门禁系统做好,员工才能安心摸鱼。
五、企业级能力:从 demo 到生产,差的是这口气
“能用”和“企业级”之间,差的不是功能列表,而是生产环境的可靠性。说直白点:demo 可以靠运气,生产只能靠机制。
5.1 多租户全链路隔离
平台在 ORM 层强制注入租户条件,所有 SQL 执行前自动拼接租户标识。Agent 配置、对话记录、Plan 数据、向量索引,全部按租户维度隔离。这是架构级隔离,不是应用层的“自觉”。Plan 数据还细化到会话级:不同会话的计划文件物理隔离,谁也看不见谁的。
5.2 认证:三扇门
JWT 本地认证给平台 Web 端用;企业 SSO 对接现有身份体系,员工凭工号直接接入;API Key 是第三条路,专门给服务间调用和内部系统集成。把 Agent 能力嵌进 CRM、ERP、工单系统,从此成为标准操作。相当于公司给你开了三种门禁:人脸、工牌,还有一张万能卡。
5.3 全链路追踪:谁干了啥,一清二楚
每次 Agent 执行,平台建立追踪上下文,捕获完整调用层级:
Trace: conversationId=xxx, agentId=yyy ├─ Span: 主 Agent 推理(第1轮) │ └─ Tool Call: query_database [input/output/latency/tokens] ├─ Span: 子 Agent data_analyst 执行 │ ├─ Span: 子 Agent 推理 │ └─ Tool Call: execute_sql [input/output/latency/tokens] └─ Span: 主 Agent 推理(第2轮) └─ Tool Call: task_output [返回子 Agent 结果]每个节点都有输入输出、执行延迟、Token 消耗、模型版本。生产环境瓶颈定位、异常行为溯源、Token 成本分析,全都有精确数据支撑。以后再有人问“钱花哪了”,你不用猜,直接把账单拍他脸上。
5.4 SSE 分层消息:每一步都直播给你看
所有 Agent 响应都走 SSE 实时推流,执行监听器把每个事件转成结构化消息。PROCESSING 事件带组件类型(ToolCall / SubAgentCall / Agent / Plan)和状态(EXECUTING / FINISHED),前端能精确渲染每一步:工具调用显示工具名和执行状态,子 Agent 调用显示名字和内部工具执行,Plan 进度显示“执行计划(2/5 已完成)”。
开源框架通常只甩给你一个最终结果,你完全不知道 Agent 在想什么。我们不一样,我们直播干活,比吃播还详细。
5.5 异常保护:四道防线
- **工具级超时与重试:**每个工具独立设超时和退避重试,单个工具抖一抖,不拖整个任务下水。
- **ReAct 循环迭代上限:**防止 LLM 陷入无效工具调用循环。达到上限优雅终止,返回当前进展。这是给 AI 上的“防沉迷系统”。
- **Plan 状态合法性约束:**切子任务为进行中之前,先校验所有前置任务已完成或已放弃,同一时刻只允许一个进行中。LLM 就算想跳步,也会被框架一巴掌拍回去。
- **子 Agent 协作式中断传播:**用户取消对话,中断标志一设,父 Agent 每个推理周期检查,子 Agent 在下一个执行节点协作式停下。不存在后台游魂任务。
5.6 双引擎 + MCP:知识的两个来源
Agent 的知识不能只靠模型的参数记忆——毕竟它的记忆,跟你对象的“我记得你说过”一样不可靠。平台集成双检索引擎:向量数据库管语义检索,适合开放式知识问答;全文检索引擎管精确文本匹配,适合精确文档查找。两种方式可独立可组合,让 LLM 根据任务自己挑。
平台原生支持 MCP(Model Context Protocol),任意 MCP 服务动态挂载成 Agent 工具:
McpClientmcpClient=McpClient.builder().serverUrl(mcpServerUrl).build();toolkit.registerTool(newMcpTool(mcpClient,toolName));任何遵循 MCP 标准的工具服务,不用定制开发直接接入。这感觉就像手机终于统一了充电口,出门再也不用带三根线。
六、纸上谈兵结束,来三个实战场景
6.1 场景一:复杂研究报告生成
用户说:“分析同行业在电商平台的销售策略,对比我们的优劣势,给出下季度的运营建议。”Plan 模式下,Agent 自动创建计划:
- ✅ 子任务 1:调数据平台 API 获取同行业销售数据(已完成)
- ⏳ 子任务 2:检索知识库中的历史策略文档(进行中)
- □ 子任务 3:数据分析子 Agent 做多维对比
- □ 子任务 4:报告生成子 Agent 撰写分析报告
- □ 子任务 5:汇总结论并生成运营建议
用户等待的过程中,进度实时更新,心情从“这玩意儿靠谱吗”逐渐变成“有点东西啊”。
6.2 场景二:多系统数据聚合
用户说:“把 CRM、ERP 和 BI 的数据汇总成一份周报。”主 Agent 同时向三个专属子 Agent 派活,各带各的工具和权限:
主 Agent ├─ CRM 子 Agent(工具:crm_query, customer_filter) ├─ ERP 子 Agent(工具:erp_api, inventory_query) └─ BI 子 Agent(工具:bi_dashboard_fetch, metric_calculate)三个子 Agent 并行执行,主 Agent 聚合结果生成周报。整个过程,主 Agent 像极了周五下午开会的你——什么都不用干,把大家的活拼起来就行。
6.3 场景三:跨部门 A2A 协作
公司里有两个独立 Agent 服务:运营 Agent 管数据分析,法务 Agent 管合规审查。以前这俩部门合作全靠邮件,一封邮件能跑三天。现在通过 A2A,运营 Agent 生成报告后自动调法务 Agent 做合规扫描,两个服务各自维护,用标准协议互操作。合规这件事,终于不用人肉催了。
七、总结:从 demo 到生产,就差一个“能扛事”
Plan 让复杂任务可拆解、可恢复;主/子 Agent 让专业能力可组合、可隔离;A2A 让不同团队的 Agent 通过标准协议协作。系统能不能进生产,就看几件事:计划是否持久化、状态是否可见、取消能否传递、权限能否跨服务保持、失败时有没有清晰边界。
当这些能力被统一封装,Agent 才真正从“演示程序”变成“能长期运行的软件系统”。否则它就是个高级点的玩具——会说话,但扛不住事。
最后送大家一句:技术选型就像选对象,光看 demo 是看不出问题的,得上生产环境里过过日子。
P.S. 推荐一个大神的教程给想要了解或者学习人工智能知识的读者,这个教程里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏教程,请点击下方链接查看,传送门https://blog.csdn.net/qq_74013365