如何验证编码智能体编写的错误处理

你的编码智能体称其已添加重试和速率限制处理,并且其测试通过。 在相信这一点之前,请检查测试是针对什么运行的。

在一个测试中,我们运行了 3 个编码代理(210 个运行),我们要求他们让应用处理 API 故障并表明它有效。 在要求提供可运行代码的 140 次运行中,有 76% 的运行里智能体使用 fetch 存根、httpx.MockTransport或一次性 HTTP 服务器手动构建了故障。 在真实 API 可用且提示未排除使用它的 75 次运行中,有 0 次使用应用的真实 API URL 测试了该应用。 此类测试通过只能证明智能体的代码能处理智能体设想的故障。 这与 API 返回的故障不同。

清单

  1. 询问它针对什么进行了测试。 询问智能体:“在你的测试期间,应用调用了哪个 URL,是什么返回了错误?” 如果答案是它编写的存根或本地服务器,请将这些测试视为对其添加的分支的单元测试。
  2. 查找为测试添加的开关。 在差异中搜索新的环境变量、基 URL 设置或标志。 在我们的测试中,针对调用 GitHub、OpenAI 或天气 API 的应用进行的 105 次运行中,有 61 次添加了一个。 确定是否要在生产环境中使用它。
  3. 根据 API 文档中描述的行为检查代码。 每个 API 都以自己的方式失败:
    • GitHub:如果超出主要速率限制,将得到 403 或 429,并将x-ratelimit-remaining设置为0,并且等待到 x-ratelimit-reset 中的时间,以 UTC 纪元秒为单位。 对于次要速率限制,如果存在retry-after,则按其指定的时间等待;否则,如果x-ratelimit-remaining为0,则等到x-ratelimit-reset;否则,至少等待 1 分钟。 仅检查 429 的代码会漏掉 403。
    • OpenAI:一些 429 错误与 计费和支出限制 有关,例如 credit_balance_exhausted。 重试也无济于事。 对每个 429 都重试的代码会使你无法发现问题。
    • Anthropic:因达到支出上限而返回的 429没有retry-after标头,过载时返回529,仅识别标准状态代码的代码可能不会预料到这一点。
  4. 查看读起来怎么样 Retry-After。 标头包含秒数或 HTTP 日期(RFC 9110)。 检查代码是否处理 API 发送的格式、限制尝试次数和总等待时间,并且不会在已经具有重试机制的 SDK 的基础上重试。
  5. 检查重试次数用尽时用户看到的内容。 查找清晰的提示信息,而不是堆栈跟踪或不断转动的加载指示器,并检查用户是否不会丢失其工作。
  6. 让应用调用其真实 URL,并模拟故障。 这是显示正在运行的应用、SDK 及其重试策略如何协同运行的唯一步骤。

如何验证代理编写的错误处理

Approach 你找到的内容 您错过的内容
查看 diff 代码是否正确 它是否针对 API 的实际响应行为正确
运行代理的测试 它编写的分支可以运行 存根未建模的所有内容:实际状态代码、标头、错误正文和 SDK 重试
调用真实 API 直到其失败 实际行为 你无法按需触发故障,并且会消耗真实配额
让应用调用真实 URL,并模拟故障 正在运行的应用、SDK 及其重试策略如何处理 API 自己的错误 你的代码单独呈现。 保留智能体的单元测试以验证这一点。

在您的应用中试用

Dev Proxy 会截获应用发送到真实 API 的请求,并返回你选择的错误,且不会更改应用的代码。 对于常用 API,请从 预设开始。 若要检查智能体编写的 GitHub 速率限制处理:

devproxy config get github-rate-limiting
devproxy --config-file "~dataFolder/configs/github-rate-limiting/.devproxy/devproxyrc.json"

运行应用并查看 Dev Proxy 输出。 当应用超过限制时,预设会返回带有 GitHub 速率限制标头的 429。 预设中的 RetryAfterPlugin 指示应用是否在等待时间结束之前再次调用 API。 openai-throttling和anthropic-throttling预设对提供程序自身的速率限制错误执行相同操作,并且openai-throttling还会返回不应重试的credit_balance_exhausted 429。

对于其他 API:

还可以要求编码代理编写 Dev Proxy 配置。将 Dev Proxy MCP 服务器 添加到代理,以便它可以查找 Dev Proxy 文档和最佳做法,并检查已安装的版本。 像审查智能体编写的任何其他代码一样审查该配置。

若要安装 Dev Proxy,请参阅 “设置 Dev Proxy”。

后续步骤

另请参阅