能力边界与失败模式
智能体会一本正经地胡说,会在一个工具上反复打转,会丢三落四。理解它"必然怎么失败",比幻想"永不犯错"更接近生产现实。本章按"现象-原因-对策"拆解常见失败模式。
六大失败模式总览
| 模式 | 现象 | 原因 | 对策 |
|---|---|---|---|
| 幻觉 | 言之凿凿却与事实不符 | 模型本质是"接龙",知识有错漏 | 检索增强、要求引用来源、低置信拒答 |
| 工具选错/参数错 | 调了无关工具、传了非法参数 | 工具描述不清、推理不足 | 描述写准、工具白名单、参数校验重试 |
| 循环空转 | 反复执行同一动作不收敛 | 缺终止条件、反馈信号弱 | 最大轮次上限、去重检测 |
| 上下文超限/遗忘 | 长任务丢细节、报超限 | 上下文窗口有限 | 摘要压缩、外部记忆、裁剪历史 |
| 外部依赖失败 | 工具超时、报错、数据变了 | 现实世界不稳定 | 超时、重试、优雅降级 |
| 评测陷阱 | 指标好看但真实体验差 | 用例与裁判有偏 | 回归集+人工抽检结合 |
幻觉:不确知就不硬答
幻觉无法根除,只能压制。RAG 提供依据、要求输出引用,都有效;更简单的一招是允许说不知道:
if not evidence:
return "我没有足够资料确认这一点,请提供来源或换个问法。"
# 输出:我没有足够资料确认这一点,请提供来源或换个问法。
循环空转:设硬上限
再聪明的模型也可能在"重试-失败-再重试"里空转,必须在循环层设硬性护栏:
MAX_STEPS = 8
for step in range(MAX_STEPS):
action = agent.step(state)
if action.done:
break # 正常结束
else:
state.say("步骤超限,已终止并转人工") # 兜底护栏,绝不放任空转
上下文超限与遗忘
- 长对话滚动摘要:把旧轮次压成要点,只留最近细节;
- 外部记忆:关键事实写入向量库/数据库,用时检索(见记忆章节);
- 主动裁剪:丢弃无用工具返回与过期中间结果。
外部依赖失败:超时重试与降级
工具调用是真实网络/系统操作,必有失败。给每个调用包超时与有限重试,失败返回结构化错误而非裸异常:
for attempt in range(3):
try:
return http_call(url, timeout=5)
except TimeoutError:
if attempt == 2:
return {"error": "external_timeout"} # 降级结果,让智能体可解释
评测陷阱与概率本质
评测用例可能掩盖真实问题(见评测章节);更要接受根本现实——Agent 是概率系统:先接受不完美,再工程化降低失败率。可靠的产出来自护栏与反馈:上限、重试、确认、评测回归,而不是"祈祷这次不抽风"。
小结
幻觉、工具误用、循环空转、上下文超限、外部失败、评测陷阱六类问题各有其"现象-原因-对策"。工程上以轮次上限、参数校验、超时重试、外部记忆与回归评测做护栏;先接受概率性,再持续压低失败率,智能体才谈得上可用。