你的编码智能体称其已添加重试和速率限制处理,并且其测试通过。 在相信这一点之前,请检查测试是针对什么运行的。
在一个测试中,我们运行了 3 个编码代理(210 个运行),我们要求他们让应用处理 API 故障并表明它有效。 在要求提供可运行代码的 140 次运行中,有 76% 的运行里智能体使用 fetch 存根、httpx.MockTransport或一次性 HTTP 服务器手动构建了故障。 在真实 API 可用且提示未排除使用它的 75 次运行中,有 0 次使用应用的真实 API URL 测试了该应用。 此类测试通过只能证明智能体的代码能处理智能体设想的故障。 这与 API 返回的故障不同。
清单
- 询问它针对什么进行了测试。 询问智能体:“在你的测试期间,应用调用了哪个 URL,是什么返回了错误?” 如果答案是它编写的存根或本地服务器,请将这些测试视为对其添加的分支的单元测试。
- 查找为测试添加的开关。 在差异中搜索新的环境变量、基 URL 设置或标志。 在我们的测试中,针对调用 GitHub、OpenAI 或天气 API 的应用进行的 105 次运行中,有 61 次添加了一个。 确定是否要在生产环境中使用它。
- 根据 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,仅识别标准状态代码的代码可能不会预料到这一点。
-
GitHub:如果超出主要速率限制,将得到 403 或 429,并将
- 查看读起来怎么样
Retry-After。 标头包含秒数或 HTTP 日期(RFC 9110)。 检查代码是否处理 API 发送的格式、限制尝试次数和总等待时间,并且不会在已经具有重试机制的 SDK 的基础上重试。 - 检查重试次数用尽时用户看到的内容。 查找清晰的提示信息,而不是堆栈跟踪或不断转动的加载指示器,并检查用户是否不会丢失其工作。
- 让应用调用其真实 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:
- GenericRandomErrorPlugin 按你选择的比例返回你定义的错误。 使用
--failure-rate设置速率。 请参阅用随机错误测试我的应用。 - LatencyPlugin 会延迟响应,以便可以检查代理设置的超时时间。 请参阅 模拟慢速 API 响应。
还可以要求编码代理编写 Dev Proxy 配置。将 Dev Proxy MCP 服务器 添加到代理,以便它可以查找 Dev Proxy 文档和最佳做法,并检查已安装的版本。 像审查智能体编写的任何其他代码一样审查该配置。
若要安装 Dev Proxy,请参阅 “设置 Dev Proxy”。