Agent 重试环里的限流:防止 Claude / GPT 刷爆额度
{"title":"Claude Code 与 GPT Agent 重试限流:防止刷爆额度的配置坑","body":"## 为什么 Agent 一重试就把额度打穿\n很多人以为“超时=重试一次”很安全,实际上在 Claude / GPT 的 Agent 链路里,最容易出问题的是流式 SSE 断线后整段重放。如果重试层放在工具执行器外面,一次任务可能被完整推理 2~3 次,token 和 RPM 很快就爆了。另一个常见坑是 401:Claude 侧读到了 OPENAI_API_KEY,或者 OpenAI SDK 误拿了 ANTHROPIC_API_KEY,看起来像“接口不通”,其实是环境变量串了。\n\n## 配置上先做三件事\n1. 统一出口:让 Claude Code、OpenAI SDK、内部 Agent 都走同一层 base_url 或网关,按模型路由,不要按客户端路由。
2. 重试只放行 429/5xx:4xx 直接失败,别反复打;指数退避要加 jitter,重试上限建议 2~3 次。
3. 给流式请求打标:记录 request_id、模型名、会话 id,SSE 断流后先查日志,再决定是否重放,避免重复扣费。\n\n``js\nconst sleep = ms => new Promise(r => setTimeout(r, ms));\n\nasync function callWithRetry(fn, max = 3) {\n for (let i = 0; i < max; i++) {\n try {\n return await fn();\n } catch (e) {\n const code = e.status || e.response?.status;\n if (![429, 500, 502, 503, 504].includes(code) || i === max - 1) throw e;\n const retryAfter = Number(e.response?.headers?.get?.('retry-after') || 0);\n const backoff = retryAfter ? retryAfter * 1000 : (2 ** i) * 500;\n await sleep(backoff + Math.random() * 200);\n }\n }\n}\n`\n\n本地调试 base_url 用过 https://59api.com,可替换为你自己的网关。\n\n## 迁移检查清单\n- OPENAI_BASE_URL / ANTHROPIC_BASE_URL 不要互串\n- 代理层透传 Retry-After、x-request-id`\n- 关闭 SDK 默认无限重试,改成显式重试\n- 监控按“请求数 / 成功数 / 429 数 / token 消耗”四列看\n- 对“模型路由表”做灰度,先把高频 Agent 接到低风险模型,再逐步切 GPT / Claude\n\n如果你在迁移 Claude Code、ChatGPT API 或 OpenAI SDK 时经常遇到“明明没发很多请求,却突然限流”的情况,通常不是模型本身,而是重试和路由配置把问题放大了。","tags":["Claude Code","GPT","OpenAI"]}
更多推荐



所有评论(0)