面向 AI 智能体:配置分步指南 — /docs/agents.md,文档索引 — /llms.txt。
错误与限制
网关的请求限制、超时和错误码。每个响应都会说明其触发条件以及应对方式:重试请求还是修正请求。
限制#
这些数值来自 GET /v1/capabilities 响应的 limits 字段:那里的值始终是最新的。
| 限制项 | 数值 | 超限时 |
|---|---|---|
| 每个密钥每分钟的请求数 | 120,窗口为自首个请求起 60 秒 | 429 rate_limit_exceeded 及 Retry-After 请求头;网关 5xx 失败不消耗配额 |
| 账户并发请求数 | 有上限 | 超出的请求排队等待;未等到则返回 429 queue_timeout |
| 请求体大小 | 16 MiB | 413 |
| 输出长度 | 按模型——见下表 | 超过模型上限——会被截断到上限,不报错 |
| 子密钥 | 每个管理密钥最多 50 个,每个每分钟最多 120 次请求 | 如需提高上限——请联系技术支持 |
各模型的输出长度#
未传 max_tokens 时,网关会套用默认值:非流式时取较小值,以便响应在超时前完成;流式时用模型上限。max_completion_tokens 是同一个字段。
model | 上限 | 非流式 | 流式 |
|---|---|---|---|
MiniMaxAI/MiniMax-M2.7 | 8192 | 1500 | 8192 |
deepseek-ai/DeepSeek-V4-Flash-0731 | 32768 | 1500 | 32768 |
zai-org/GLM-5.3-Flash | 8192 | 3000 | 8192 |
超时#
| 阶段 | 数值 | 会发生什么 |
|---|---|---|
| 等待队列空位 | 45 秒 | 429 queue_timeout 并带 Retry-After: 1 请求头 |
| 网络开始响应,流式 | 150 秒 | 504 upstream_timeout;会按输入 token 估算扣费 |
| 网络开始响应,非流式 | 150 秒 | 504 upstream_timeout;会按输入 token 估算扣费 |
| 生成响应 | ≈ 300 秒 | 网络中断生成:响应会带 finish_reason: length 返回——请用下一个请求继续 |
| 流式数据块之间的停顿 | 30 秒 | 流会关闭:joingonka-stream-stalled 数据块中的 finish_reason: stop |
| 流中的保活信号 | 15 秒 | : keep-alive 注释——SSE 客户端会忽略它 |
| 流的开启 | 30 秒 | 在此刻之前失败会以响应码返回,之后则以 joingonka-error 数据块返回 |
| 非流式响应的提前返回 | 90 秒 | 网关先返回 200,并每隔 15 秒 发送空格——JSON 保持有效;此后的错误会放在响应体 error 字段中返回,状态码仍为 200 |
超时时如何计费
网络一旦接受请求就无法撤销。在 504 upstream_timeout 时,会扣除输入 token 的预估费用,输出不扣;重试会再次扣费。在最终 usage 之前中断的流,计费方式相同。长回复请使用 stream: true。
错误码#
错误正文是一个 error 对象,包含 message, type, code, param;并非所有错误都有全部字段。请以状态码和 type 为准,并通过 code 确认细节:message 文本可能会变化。Anthropic 格式见 Anthropic 错误格式 部分。
JSON
{
"error": {
"message": "Model is currently overloaded in the Gonka network",
"type": "rate_limit_exceeded",
"code": "upstream_rate_limited"
}
}| 响应 | 何时 | 怎么办 |
|---|---|---|
400 invalid_request_error | 请求体无效:缺少 messages,消息不是对象,请求体不是 JSON;模型未知 — 并带有 param:model,正文中会列出可用模型 | 根据错误文本修正请求 |
400 invalid_request_error empty_content_after_normalization | 消息在规范化后为空 — 例如,其中只有一张图片 | 在消息中添加文本 |
400 invalid_request_error web_search_privacy_sanitization_not_supported | 同一个请求中同时使用 web 和 privacy-sanitization 插件 | 只保留其中一个 |
400 invalid_request_error previous_response_id_not_supported conversation_not_supported item_reference_not_supported background_not_supported hosted_tool_choice_not_supported | OpenAI Responses:引用已保存的回复、对话或条目;后台模式;要求使用内置工具 | 在 input 中发送完整历史记录 |
400 api_error | 网络拒绝了参数 — 例如 reasoning_effort 值不在其列表中 | 根据错误文本修正该值 |
401 authentication_error | 密钥未找到、已撤销或格式未知 | 在 gate.joingonka.ai/keys 页面检查密钥 |
402 insufficient_funds | 余额不足以支付请求预估费用;剩余额度见 balance_ngonka | 充值余额:gate.joingonka.ai/billing |
402 insufficient_funds | 请求没有密钥,且不是来自网站(is_demo: true) | 传入 API 密钥 |
402 child_key_limit_exceeded | 已超出密钥的支出限额 — 每日、每月或总额;剩余额度见 daily_remaining, monthly_remaining, total_remaining | 在 gate.joingonka.ai/keys 页面提高密钥限额,或等待重置 |
403 forbidden | 在模型请求中使用了管理密钥 gm-;在仅限控制台的路由上使用了 API 密钥 | 请求请使用 jg- 或 gc- 密钥;账户管理请使用控制台 |
404 invalid_request_error model_not_found | GET /v1/models/{model}:目录中没有该模型,或该模型被暂时隐藏 | 从 GET /v1/models 中获取 id |
404 invalid_request_error not_found compact_not_supported | OpenAI Responses:/v1/responses/{id} 及其他状态地址,/v1/responses/compact | 在本地保存历史记录;对于 Codex CLI,设置你自己的提供商 id |
404 invalid_request_error | 未知路径 | 检查方法、路径和基础地址 |
413 invalid_request_error | 请求体超过限制 | 缩短请求 |
415 invalid_request_error | 根据请求头,正文不是 JSON:需要 Content-Type: application/json | 发送 Content-Type: application/json |
429 rate_limit_exceeded | 已超出每个密钥每分钟的请求数限制;正文中包含 rate_limit 和 limit, remaining, reset | 等待 Retry-After 中指定的秒数 |
429 rate_limit_exceeded upstream_rate_limited | Gonka 网络上的模型过载 | 在 Retry-After 后重试,或换用其他模型 — 模型 |
429 rate_limit_exceeded queue_timeout queue_full | 网络的所有位置都被占用:队列已满或等待超时 | 在 Retry-After 后重试 |
500 server_error | 网关内部错误 | 稍后重试;如果反复出现,请联系支持并提供 x-request-id |
501 not_implemented | POST /v1/embeddings:网络上没有嵌入模型 | 使用其他嵌入服务 |
502 api_error upstream_unauthorized | 网络提供商拒绝了网关的凭据 — 你的密钥没有问题 | 一分钟后重试 |
502 api_error | Gonka 网络错误;如果网络发送了 code,则来自网络 | 暂停后重试,或换用其他模型 |
503 model_unavailable model_outage model_initializing model_unstable model_not_served | 根据网络探测,该模型当前不可用:崩溃、启动中、不稳定,或无人提供服务;会立即拒绝,无需等待 | 换用其他模型 — 错误文本会提示用哪个;列表见 模型 |
503 service_unavailable | 没有可用节点 | 稍后重试 |
504 timeout upstream_timeout | 网络已接受请求,但未及时响应;输入 token 的预估费用已扣除 | 长回复请使用 stream: true;重试会再次扣费 |
已打开流中的错误#
在流打开之前,拒绝会以普通响应码返回 — 与不使用流式传输时相同。打开之后,状态码已经是 200,错误会这样传来:
- Chat Completions — 一个带有
error的joingonka-error,然后断开且没有[DONE]。 - 非流式在提前响应之后 — 状态
200,正文包含error。 - Anthropic Messages — 一个
event: error,然后流关闭。 - OpenAI Responses — 一个
response.failed,原因在response.error.code中。 - Legacy Completions —
data: {"error": …},然后[DONE]。
SSE
data: {"id":"joingonka-error","object":"chat.completion.chunk","model":"MiniMaxAI/MiniMax-M2.7","choices":[],"error":{"message":"Gonka network error","type":"api_error"}}Anthropic 错误格式#
POST /v1/messages以 Anthropic 信封格式响应:{"type": "error", "error": {"type", "message"}}。- 网关拒绝会保留上表中的
type(insufficient_funds、model_unavailable等);此信封中没有code字段 — 原因在文本中。 - 请求格式错误 —
invalid_request_error:缺少消息或max_tokens,工具调用没有名称,模型未知。 - 未知路径 —
not_found_error,请求体过大 —request_too_large。
SSE
event: error
data: {"type":"error","error":{"type":"timeout","message":"Upstream timeout"}}哪些情况可以重试#
- 在
Retry-After指定的暂停后:429 - 采用递增暂停 — 1、2、4 秒,以此类推:
500,502,503 service_unavailable,504 - 换用其他模型:
503 model_unavailable - 不要在没有改动的情况下重试 — 修正请求、密钥或余额:
400,401,402,403,404,413,415,501
每次在 504 之后重试都会重新扣除输入预估费用;长回复请启用 stream: true。
如果错误反复出现,请联系支持,并附上响应头中的 x-request-id。