开场:教科书教你 3 步,生产环境要 11 步
教科书说 Agent 循环是「想→做→看」三步。但当你真正把 Agent 推上生产环境,每转一圈要做的事比你想象的多得多——真实生产版单轮循环有 11 步。
这篇实战指南讲透四件事:真实循环里藏着什么、Agent 会怎么卡死、怎么防呆、怎么让用户不干等,最后算一笔「一条消息的真实成本」账。
一、教科书 3 步 vs 真实 11 步
教科书版 ReAct
- Think — 思考下一步该做什么
- Act — 调用一个工具
- Observe — 拿到结果,决定下一步
循环直到任务完成。
真实生产版(单轮 11 步)
- 接收用户消息,解析意图
- 上下文裁剪 & Token 预算检查
- 注入系统指令 & 约束规则
- Think — 模型规划下一步动作
- 权限校验 & 参数合规检查
- Act — 并发调度工具执行
- 超时监控 & 错误兜底
- Observe — 解析工具返回结果
- 结果回写上下文 & 状态更新
- 安全审计日志记录
- 判断:继续循环 or 返回用户
3 个教科书步骤 vs 11 个真实步骤——每一轮循环中,那些看不见的步骤才是工程量最大的部分。
为什么多出来这么多?
教科书省略的部分,恰恰是让 Agent 稳定、安全、可用的关键:
| 隐藏工作 | 为什么必须做 |
|---|---|
| 上下文压缩 | 对话越来越长,不裁剪就会超出窗口 |
| 权限校验 | 这个工具用户有没有权限调?参数合不合法? |
| 并发调度 | 多个工具能同时跑吗?怎么协调? |
| 错误处理 | 工具超时怎么办?返回格式错了怎么办? |
| 结果回写 | 执行结果要写回上下文、更新状态、触发通知 |
| 安全审计 | 记录每一步操作,出问题可追溯 |
真实的 Agent 每转一圈,要做的事比你想的多 5 倍。 教科书的 3 步只是骨架,生产环境的每一轮循环里藏着权限、压缩、容错、审计等大量隐藏逻辑,这些才是 Agent 工程的核心工作量。
二、为什么 Agent 会卡死:四种生产环境特有模式
实验室里的死循环很好发现:控制台一刷就看到了。但生产环境的卡死更隐蔽——用户不会说「你的 Agent 死循环了」,他只会说「你的 AI 怎么这么慢」或「它是不是傻了」。
| 卡死模式 | 现象 | 用户视角 |
|---|---|---|
| 同参数死循环 | 连续 3 次用完全相同的参数调用同一个工具 | 转圈、毫无进展 |
| 收益递减 | 跑了 50 轮循环,几乎没产出有价值内容 | 越答越偏、答非所问 |
| 文本复读 | 模型开始重复自己说过的话,一段内容反复出现 | 车轱辘话来回说 |
| 工具连续失败雪崩 | 一个工具挂了,Agent 疯狂重试,拖垮整条链路 | 越来越慢、最终超时 |
生产环境的 Agent 挂法和实验室里不一样:用户不会告诉你「Agent 死循环了」,他只会说「你的 AI 怎么这么慢/这么蠢」。 识别这些模式,是做防护的前提。
三、防呆设计:让循环自己停下来
知道了 Agent 会怎么卡死,下一步就是设计防护。好的防呆是三层网,让系统既不会失控,又不会轻易放弃。
三类防护策略
① 硬限制(无条件刹车,不管什么情况都会触发)
| 策略 | 说明 |
|---|---|
| 迭代上限 | 最多循环多少轮,到顶即停 |
| 总超时 | 整体运行时长封顶,超时强制结束 |
| 单工具次数上限 | 每个工具最多调用多少次 |
② 检测类(监控运行状态,发现异常模式时预警)
| 策略 | 说明 |
|---|---|
| 同参数检测 | 相同参数重复调用 → 报警 |
| 同工具名检测 | 反复调同一个工具 → 报警 |
| 收益递减检测 | 多轮无新产出 → 预警 |
③ 降级类(带伤继续或优雅退出,先不直接停)
| 策略 | 说明 |
|---|---|
| 注入纠错提示 | 把"你好像卡住了"作为提示喂回给模型 |
| 禁用故障工具 | 暂时下线出问题的工具 |
| 强制总结当前进度 | 先把已做的整理成半成品交回 |
三层防护的层次关系
防呆不是一道墙,是三层网: 降级类(优雅续命,尽量完成任务)→ 检测类(及时发现,提前预警)→ 硬限制(最后兜底,绝对不失控)。
设计原则:先让降级尝试自救 → 自救失败由检测上报 → 最终由硬限制兜底。
大多数情况下,Agent 应该被温柔地纠正,粗暴杀死是下策——对用户来说,带着半成品回来比空手而归好得多。
四、流式体验:别让用户干等
Agent 在后台跑了 30 秒,用户屏幕上应该看到什么?同样是等 30 秒,有没有进度感,体验天差地别。
进度感设计三原则
- 让用户看见过程:别只给一个转圈,要展示正在做什么——搜索中、分析中、整理中
- 让进度可感知:「找到 3 条结果」「已分析 2/5 个文件」,有数字、有变化、有推进感
- 让输出渐进出现:让文字逐字流出——流式输出本身就是最好的进度条
常见的进度感手段
| 手段 | 示例 |
|---|---|
| 状态文案 | 「正在搜索相关信息...」→「找到 5 条结果,正在分析...」 |
| 工具展示 | 把正在调用的工具名和参数展示给用户,让他知道 AI 在做什么 |
| 流式输出 | 模型生成的文字逐 Token 显示,让等待变成阅读 |
| 阶段标记 | 「第 1 步 / 共 3 步」,即使无法精确预估,分阶段也比不分好 |
| 中间产物 | 先给一个粗略结果,再逐步精化:先给大纲,再填充细节 |
用户能忍受等待,但不能忍受「不知道在等什么」。 进度感 ≠ 进度条。进度感的核心是让用户觉得「AI 在认真干活」,不让他对着空白屏幕怀疑人生。
五、一条消息背后的真实成本
用户只发了一句话,但底层可能跑了 10+ 轮循环、产生几十条 API 消息。当你打开账单,可能会吓一跳。
成本随复杂度指数增长
| 成本组成 | 为什么是大头 |
|---|---|
| System Prompt | 每轮都要重复发送,轮次越多重复消耗越大 |
| Tool Results | 工具返回的文本通常很长(整个文件内容、搜索结果...) |
| 上下文累积 | 后面的轮次要带上前面所有消息,滚雪球式增长 |
以一条中等复杂度消息为例,单轮成本拆解:
- System Prompt:约 850 Token(每轮重复)
- 工具返回:约 86 Token(往往更长,整文件/整页)
- Assistant 输出:约 63 Token
- 上下文累积:轮次越多越滚越大
你的用户每说一句话,你的账单上可能多了 10 美分。 Agent 的成本随轮次指数增长,远超线性——每一轮都要把之前所有内容重新发送给模型。知道成本在哪里,才能控制成本。
结语:Agent 实战四字诀
循环藏工程,卡死要防呆,等待有进度,成本算得清。
回顾全文:真实循环的 11 步里,隐藏的权限、压缩、容错、审计才是工程量主体(3 步 vs 11 步);生产环境的卡死很隐蔽,识别四种模式是防护前提(同参循环/收益递减/文本复读/工具雪崩);防护要三层网——硬限制兜底、检测预警、降级续命,温柔纠错优于粗暴杀死;等待要有进度感,别让用户对着空白屏幕怀疑人生;最后记账要算指数账,每一轮都在滚雪球。
记住那句最实用的判断:对用户来说,带着半成品回来比空手而归好得多;让 AI 显得在认真干活,比真的快两秒更重要。