犀速AI
文档目录
更新于 2026-10-04

API 与错误码

错误码与限流

犀速AI错误码与限流处置:每个错误码对应的下一步,Anthropic 协议下余额不足也报 rate_limit_error,收到 429 如何按 Retry-After 退避,余额不足与余额为负的区别,以及报障时为什么要带 request_id。

接入期遇到的失败绝大多数都在下面这张表里。它们都不属于「服务坏了」, 每一条都有明确的下一步。

错误码 含义 怎么办
invalid_api_key 密钥无效 检查是否被吊销 / 复制完整;若此密钥配了 IP 白名单,从别处调用看到的也是这一句 —— 先确认来源 IP
insufficient_balance 余额不足 去充值
account_overdrawn 余额为负,通常是退款扣回 联系客服核对账务
budget_exceeded 此密钥已达预算上限 调整预算或换一把密钥
model_not_allowed 该密钥不能调这个模型 看 message:「…by your plan」= 升级套餐;「…for this API key」= 套餐是够的,联系客服放宽这把密钥
rate_limit_exceeded 请求过快 按 Retry-After 退避
no_available_channel 该模型暂时不可用 稍后重试
upstream_error 上游返回了错误,而原因归不到你的载荷上 先换一个模型试试;这类多半要我们去接上游。载荷真不合法时回的是 upstream_rejected_request(400)—— 但收到这个 502 也不能断定你的载荷没问题,反复失败时对照 message 看一眼。持续出现请带 request_id 提工单
upstream_rejected_request 上游认定这个请求本身不合法 —— 这一条确实出在载荷上 改载荷再发;原样重试一定是同样的结果。message 里通常带着上游的原话,照它改 —— 最常见的是工具/函数的 JSON Schema 上游不收
system_not_supported_upstream 该模型当前的上游都会丢弃 system 提示词 去掉 system 后重试即可通过;或在模型广场挑一个没有「不支持 system」标记的模型
context_length_exceeded 输入长度超过该模型在本平台声明的上下文上限 缩短输入或分段发送;换一个上下文更大的模型也可以。重试无效,报错里带着实际长度和上限
content_policy_violation 内容被平台的内容策略拦下 原样重试一定是同样的结果,需要修改内容再发;认为是误判请带 request_id 提工单
content_policy_needs_text 请求里有平台读不出文本的内容(预分词的 token 数组、图片、PDF 等) 改发文本再试;确需发这类内容,提工单申请为这把密钥放行
tenant_closing 账号正在注销 联系客服,充值不会恢复

走 /v1/messages 时是另一套错误类型

Anthropic 原生协议有它自己的一套错误类型(响应体里的 error.type), 与上面那张表不通用 —— SDK 读的就是它。

error.type HTTP 含义 怎么办
invalid_request_error 400 请求被判为不合法(你的载荷 / 输入过长 / 上游拒收 / 含平台读不出文本的内容,都落在这一个类型上) 改载荷再发,别原样重试 —— 这几种成因的下一步都是改载荷。看 message:它会说明是哪一种,并带着我们的 request_id
authentication_error 401 密钥无效 检查是否被吊销 / 复制完整;配了 IP 白名单时,从别处调用看到的也是这一句
permission_error 403 套餐或密钥不允许这个模型、内容被内容策略拦下,或账号正在注销 看 message:写的是模型不允许就去调整密钥的模型范围或升级套餐;写的是内容策略就修改内容(误判带 request_id 提工单);写的是账号状态就联系客服
not_found_error 404 这个模型不在 /v1/messages 上(它没有配 Anthropic 上游) 换一个模型,或改走 /v1/chat/completions —— message 里会指路。重试没有意义
request_too_large 413 请求体过大 压缩或拆分(多模态内容通常是大头)
rate_limit_error 429 限流 / 配额用尽 / 余额不足 / 密钥预算到顶(四种共用这一个类型) 先看余额,再看 message —— 写明是账务限制的,重试没用;确实是限流的才按退避重试
api_error 502 / 504 上游全部失败,或到点被硬中止 稍后重试;反复出现就带 request_id 开工单
overloaded_error 503 这个模型此刻没有可用上游(冷却或受限),不是「没有这个模型」 按响应里的 Retry-After 退避重试 —— 这是暂时的

⚠️ 最容易误判的是 rate_limit_error:余额不足在这套协议里也报它 (Anthropic 协议里没有「余额不足」这个类型)。收到 429 先看余额, message 里会写明是不是账务限制 —— 是账务限制的话,重试多少次都不会好。

限流怎么退避

收到 rate_limit_exceeded 时,响应里会带 Retry-After(秒)。 按它退避,不要固定间隔重试 —— 固定间隔在高峰期会让你和自己抢配额。

建议指数退避 + 抖动,上限取 Retry-After 与你自己的超时中较大的那个。

报障要带 request_id

每个响应都带 request_id。没有它我们查不到那一笔 —— 网关每天的调用量很大,靠「大概十点多的那次」是定位不到的。

开工单时贴上:request_id、发生时间、用的模型、完整的错误响应体。

一类特别容易误判的情况

insufficient_balance(余额不足)和 account_overdrawn(余额为负)不是同一件事:

  • 余额不足:余额还是正的,只是不够这一笔。充值确实能解决。
  • 余额为负:多半是一笔退款扣回把余额扣穿了。再充值也解决不了根因, 应该开工单让客服核对账务。

这两条以前是合成一行的,结果就是被扣穿的客户一直在充值,而账务上真正出的问题没人看。