Appearance
2.4 为什么 Agent 会失控
这是你目前最核心的痛点。Agent 开始很好用,深入后开始"脱离掌控"——这背后有明确的原因。
失控的几种模式
模式一:推理链雪崩
Agent 执行复杂任务时,是一步一步地思考和行动的。一旦某个中间步骤出了小错误,后续所有步骤都建立在这个错误之上,越跑越偏。
步骤1: 理解任务 ✓
步骤2: 制定计划 ✓
步骤3: 执行子任务A ✓
步骤4: 执行子任务B → 这里有个小误解
步骤5: 基于B的结果执行C → 错误被放大
步骤6: 基于C执行D → 完全偏离
步骤7: 输出结果 ✗(你不知道问题出在哪)应对方法:把复杂任务拆成有检查点的小步骤,每个关键步骤输出给你确认再继续。
模式二:上下文污染
随着任务进行,上下文里积累了越来越多的中间结果、工具输出、错误信息。AI 开始被这些信息"分心",对原始任务的理解反而变得模糊。
💡 类比:你让一个人同时看 20 份文件,然后让他回答原始问题。他越来越容易被后来的文件影响,忘了最开始你到底让他做什么。
应对方法:
- 关键指令放在 System Prompt 里(不容易被淹没)
- 超长任务分多个对话,不要一个对话做所有事
- 中间结果及时写到文件,而不是全堆在上下文里
模式三:工具调用错误但继续执行
AI 调用了一个工具,工具返回了错误,但 AI 没有正确处理错误,继续按照"假设成功"的逻辑往下走。
AI: 调用 create_file("config.json")
工具: 返回错误 "权限不足"
AI: 好的,文件创建成功 ✗
AI: 现在修改 config.json...(文件根本不存在)应对方法:
- 工具执行失败时,返回清晰的错误描述
- 让 AI 在关键工具失败时停止,而不是继续
- 在 System Prompt 里说明"遇到错误时请停下来说明,不要假设成功"
模式四:任务描述有歧义,AI 做了"合理但错误"的选择
你的任务描述里有歧义,AI 做了一个合理的解读,但不是你想要的。它执行完了,你发现结果完全不对。
示例:
你说:把所有旧文件删掉
AI 理解:删掉所有"旧版本"的文件(包括你还想留着的备份)
你的意思:只删掉超过 30 天的日志文件应对方法:
- 任务描述要具体,包含边界条件
- 高风险操作(删除、覆盖、发布)要让 AI 先描述它打算怎么做,你确认后再执行
模式五:Prompt 稀释
你给了 AI 20 条规则,但上下文越来越长,早期的规则开始被"淡忘"——AI 开始违反你最开始设定的约束。
应对方法:
- 规则放 System Prompt,不要放在对话消息里
- 规则要精简,只保留真正重要的
- 关键约束在关键步骤前重申
如何诊断 Agent 失控
当 Agent 跑偏时,按这个顺序检查:
第一步:看最后几步的上下文
→ AI 在执行那一步时"看到"了什么?
→ 是否有错误信息被忽略了?
第二步:找分叉点
→ 找到第一个"结果和预期不符"的步骤
→ 那一步的输入是什么?AI 是怎么理解的?
第三步:判断失控类型
→ 是理解错了任务?
→ 是工具出错没处理?
→ 是上下文太长被稀释了?
第四步:针对性修复
→ 理解问题 → 改 Prompt,加示例
→ 工具问题 → 加错误处理,让 AI 能感知错误
→ 上下文问题 → 拆分任务,减少单次上下文量设计"不容易失控"的 Agent
原则一:最小权限
Agent 只能访问它需要的工具,不给多余的权限。
✗ 给 Agent 所有数据库的读写权限
✓ 给 Agent 只读权限 + 特定表的写权限原则二:关键步骤要确认
危险操作不让 Agent 自动执行,先输出计划让你确认。
原则三:任务拆分
把一个大的复杂任务拆成有明确输入输出的小任务,每个小任务独立运行。
原则四:给 AI 退路
在 System Prompt 里说明:遇到不确定的情况,应该停下来询问而不是假设。
System Prompt 加上:
如果你对任务有任何不确定,或者遇到了错误,
请立刻停下来描述你遇到的情况,等待指示,
不要假设任何事情,不要继续执行。📌 关键结论
- Agent 失控通常有具体原因:推理雪崩、上下文污染、错误未处理、任务歧义
- 失控后按步骤找分叉点,不要直接改 Prompt 乱猜
- 预防比治疗更有效:最小权限、关键步骤确认、任务拆分
- 给 AI "遇到不确定就停下来"的指令,是最简单有效的防失控措施
下一节:2.5 AI 系统的评估方法