K2.2.3 Task 2.2

"Operation Failed" × 5 次重试 × 30 秒 = 客户白等

每个错误都返回 {"content": [{"text": "Operation failed"}], "isError": true}。账户暂停、超时、日期格式错误——全部一样。Agent 对一个永久性权限错误重试 5 次,花了 30 秒。客户白等。

反模式

{"content": [{"type": "text", "text": "Operation failed"}], "isError": true}

以下情况都返回这个:

  • 数据库超时(应该重试)
  • 日期格式无效(应该修输入)
  • 账户暂停(应该升级)
  • 退款超限(应该通知客户)

Agent 看到四个一模一样的响应,套用一个策略:重试。四种错误类型中有三种重试永远不会成功。

错误码同样没用

“Error code 4003”对看文档的开发者有意义。LLM 查不了错误码表。它需要自然语言描述和可操作的上下文。

结构化替代方案

校验失败的好的错误响应:

{
  "content": [{"type": "text", "text": "Validation error: 'date' field must be ISO 8601 (YYYY-MM-DD). Received: '15th of March, 2024'. Convert to '2024-03-15' and retry."}],
  "isError": true,
  "structuredContent": {
    "errorCategory": "validation",
    "isRetryable": true,
    "invalidField": "date",
    "expectedFormat": "YYYY-MM-DD",
    "receivedValue": "15th of March, 2024"
  }
}

Agent 知道:什么失败了(date 字段)、为什么(格式错了)、怎么修(转成 ISO 8601)、修完重试能成功(isRetryable: true)。一个重试周期解决问题。

对 agent 行为的影响

通用错误:agent 对一切做相同重试。权限错误被徒劳重试。校验错误用同样错误的输入重试。业务错误在需要升级时被重试。15% 恢复率。

结构化错误:agent 重试瞬时性错误、修正校验输入、解释业务规则、升级权限问题。每种错误类型得到合适的处理。78-95% 恢复率。

30 秒事故

账户暂停。通用”Operation failed”。Agent 重试 5 次,每次返回同样的错误。30 秒客户等待时间。如果错误包含了 errorCategory: "permission", isRetryable: false,agent 会立即告知客户暂停情况并提议升级——2 秒而不是 30 秒。


一句话总结: 通用”Operation failed”导致盲目重试(永久性错误上 5 次尝试、30 秒客户等待)——带 errorCategory、isRetryable、字段级校验详情和建议动作的结构化错误实现 78-95% 恢复率 vs 15%。