OhMyGPT

错误

状态码、错误响应体,以及每种错误的处理方法。

每条错误信息都写明了下一步该做什么,你可以直接展示给能处理它的人,代码则按 HTTP 状态码分支处理。每个响应(包括错误响应)都带有 X-Request-ID,联系客服时请附上它。

状态码

状态码code处理方法
400invalid_request、invalid_parameter、missing_required_parameter、unsupported_parameter、unsupported_content、unsupported_endpoint、context_length_exceeded按错误信息修正或去掉其中指出的参数、内容或端点,然后重新发送。
401invalid_api_key、api_key_expired、api_key_disabled到 API Key 页面换一个有效的 Key。
402insufficient_credits、api_key_spend_limit_exceeded到账单页面充值,或调高这个 Key 的消费额度。
403model_not_allowed、account_suspended把模型加入这个 Key 可调用的模型,或联系客服。
404model_not_found从 GET /v1/models 复制模型 ID。
413request_too_large减小请求体。
429rate_limit_exceeded等待 Retry-After 秒后重新发送。
500、502、503、504model_error、model_overloaded、model_unavailable、model_timeout、service_unavailable、internal_error退避重试,或换一个模型。

参数错误会保留模型自己的原话,所以错误信息里能看到可接受的取值范围:

{
  "error": {
    "param": null,
    "code": "invalid_request",
    "message": "Invalid 'temperature': decimal above maximum value. Expected a value <= 2, but got 5 instead.",
    "type": "invalid_request_error"
  }
}

错误响应体

响应体的格式跟随你调用的端点所属的协议,所以你的 SDK 会抛出它惯常的异常类型。

{
  "error": {
    "param": "model",
    "code": "model_not_found",
    "message": "The model `no/such-model` does not exist. List available models with `GET /v1/models`.",
    "type": "not_found_error"
  }
}

OpenAI 格式按 code 分支。Anthropic 格式在 error.type 里给出状态类别,Gemini 格式则在 details[].reason 里给出大写的错误码。

以 OpenAI Python SDK 为例:

import os

import openai
from openai import OpenAI

client = OpenAI(base_url="https://api.ohmygpt.com/v1", api_key=os.environ["OHMYGPT_API_KEY"])

try:
    completion = client.chat.completions.create(
        model="no/such-model",
        messages=[{"role": "user", "content": "Hi"}],
    )
except openai.RateLimitError as e:          # 429
    retry_after = int(e.response.headers.get("retry-after", "1"))
except openai.APIStatusError as e:          # any other non-2xx
    print(e.status_code, e.code, e.response.headers.get("x-request-id"))
404 model_not_found 01a19b5f-6ab6-7dc0-88ff-f5c95e0169e4

流式输出中途出错

流一旦开始,状态码就已经是 200。如果生成中途停止,流会以一个错误事件结束,取代正常的最后一个事件:

data: {"error":{"param":null,"code":"model_error","message":"The model `zhipu/glm-5.3-flash` stopped mid-response, so the output is incomplete. Try again.","type":"server_error"}}

OpenAI 和 Anthropic 的 SDK 会在你遍历流时把它作为异常抛出,按处理其他错误的方式处理即可。如果你自己解析流,凡是没有以最后一个事件(data: [DONE]、message_stop 或 response.completed)结束的流,都应视为不完整。

何时重试

供应商在应答前失败时,OhMyGPT 已经会把请求转给另一家,这部分不需要你写重试逻辑。你的代码只需这样处理:

  • 400、401、402、403、404: 先修改请求、Key 或余额;原样重发只会得到同样的结果。
  • 429: 等待 Retry-After 秒后重新发送。
  • 500、502、503、504: 按指数退避重试几次,响应带有 Retry-After 头时按它等待。如果仍然出错,换一个模型。

本页目录