08. Agent 为什么经常失败?常见的失败模式有哪些?

整理 Agent 常见失败模式、成因分析与缓解思路。

简单回答

Agent 失败的根源是 LLM 的推理和决策能力不够可靠。常见失败模式包括:工具选择错误(该调 A 调了 B)、参数生成错误(调对了工具但参数不对)、陷入循环(反复执行无效操作)、过早终止(信息还不够就急着给答案)、规划偏差(步骤拆分不合理)、以及错误累积(前面步骤的小错误在后面被放大)。本质上这些都源于 LLM 的判断力有限,而 Agent 把多个判断串联起来,可靠性按乘法递减。

详细解释

Agent 可靠性的数学直觉

理解 Agent 为什么经常失败,有一个简单的数学直觉。假设 LLM 在每一步做出正确决策的概率是 95%(已经很高了),一个需要 10 步的任务,全部正确的概率是:

也就是只有 60%。如果每步准确率是 90%,10 步下来则是:

也就是只有 35%。

这就是 Agent 最根本的可靠性问题:多步任务中错误会累积。单步看 LLM 的准确率可能很高,但步骤一多就不行了。这也是为什么复杂 Agent 任务的端到端成功率普遍不高的原因。

常见失败模式详解

工具选择错误。 LLM 在多个可用工具中选了不对的那个。比如应该查数据库的问题,Agent 去做了网页搜索。通常原因是工具的描述写得不够清晰或有歧义,或者用户查询本身有多义性,LLM 做了错误的意图理解。

参数生成错误。 选对了工具但传参不对。比如调日期查询接口时日期格式不对,调搜索接口时 query 关键词选得不好。LLM 是"猜"参数应该是什么样的,猜错了很正常。特别是涉及精确格式(日期、ID、正则表达式等)的时候,LLM 出错率会明显升高。

循环和死锁。 Agent 反复执行同样的工具调用得到同样的结果,但不知道该换个思路,陷入无限循环。或者在两个状态之间来回跳——"搜索没结果,那我换个关键词搜"→"还是没结果,那我换回第一个关键词试试"。这通常是因为 Agent 缺乏"反思"能力——没有意识到当前策略行不通需要换路线。

过早终止。 Agent 在信息还不充分的时候就急着给出答案。比如用户问了一个需要综合多源信息的问题,Agent 搜了一次就开始回答了,漏掉了关键信息。原因可能是 Prompt 中没有强调"确保信息充分再回答",或者模型天性倾向于快速给出回答。

过度行动。 和上面相反——Agent 该停下来的时候不停,一直在搜索、调工具、收集信息,不知道什么时候够了。这会导致延迟很长、token 消耗很大,而且过多的信息反而可能干扰最终生成。

规划失败。 Agent 对任务的拆分不合理。比如把一个本该分三步的任务一步就想完成,或者拆出了不必要的冗余步骤,或者子任务之间的依赖关系搞错了。

上下文污染。 前面步骤中工具返回的错误信息或无关信息被保留在上下文里,影响了后面步骤的决策。Agent 在第 3 步搜索时得到了一个错误信息,第 7 步基于这个错误信息做了错误推理。

格式和协议错误。 Agent 的输出不符合预期格式——比如应该输出 JSON 的地方输出了自然语言,或者工具调用的格式不对。这在 LLM 没有被很好地约束输出格式时尤其常见。

怎么缓解

最直接的手段是减少 Agent 需要做的决策步骤。 能用 Workflow 固定的路径就不要交给 Agent 决策。把 Agent 的决策空间限制在必要的范围内——比如不让 Agent 自由选择工具,而是根据 query 类型预先筛选出可能的工具子集。

改善工具描述和参数定义。 清晰、具体、有示例的工具描述能显著降低工具选择和参数生成的错误率。参数定义中加枚举值约束、格式说明、默认值等。

加循环检测和最大步数限制。 如果 Agent 连续两次调用了同一个工具且参数相同,自动跳出循环并强制换策略。设最大步骤数(比如 15 步),超过就强制终止。

每步验证。 在 Agent 的每一步之后做结果检查——工具调用是否成功?返回结果是否合理?是否有错误信息?不合理的结果在进入下一步前就处理掉。

添加 Reflection 能力。 在 Agent 的循环中加入自省步骤——"回顾一下当前的进展,有没有走偏?信息够不够?要不要调整策略?"这可以通过在 Prompt 中加反思指令实现。

好的 fallback 设计。 Agent 失败后怎么办?直接告诉用户无法完成?降级到简单模式?转人工?这些 fallback 路径需要提前设计好。

面试时可以这样答

Agent 经常失败的根本原因是多步决策的可靠性按乘法递减。单步 95% 的准确率,10 步下来只有 60%。

常见失败模式有几类。工具选择错误——该调 A 调了 B,通常是工具描述不清晰。参数生成错误——调对了工具但传参不对,特别是涉及精确格式的时候。循环——反复做同样的操作不知道换策略。过早终止——信息不够就急着给答案。还有上下文污染——前面步骤的错误信息影响后续决策。

缓解思路我总结为几点。尽量减少 Agent 的决策步骤,能固定的流程不要交给 Agent。改善工具描述减少选择和传参错误。加循环检测和最大步数限制。每步做结果验证。在关键节点加 Reflection 让 Agent 自省。最后要设计好 fallback——Agent 不是万能的,失败后要有兜底方案。

常见追问

  1. 你在项目中遇到过 Agent 失败的案例吗?怎么解决的?
  2. 怎么监控 Agent 在线上的成功率和失败原因?
  3. 错误累积的问题有没有根本性的解决方案?