Service API 接入 · 06

错误码

接口错误以 HTTP 状态码 + JSON 体形式返回(注意:不是 OpenAI 的 {"error": {...}} 嵌套结构,而是 FastAPI 的 {"detail": "..."} 形式):

json
{ "detail": "Invalid API key" }
状态码detail 示例处理建议
400"No user message found"messages 数组里没找到 role=user 的项
400"There was an error parsing the body"请求体被网关层判定为空 / 格式异常(常见于 PowerShell 单引号问题,建议改用 -d @body.json
401"Missing API key" / "Invalid API key"检查 Authorization
403"Service not published"service 被管理员下架,联系部署方
404"Conversation not found"传入的 conversation_id 不存在或不属于当前 service
422[{"type":"json_invalid","loc":["body",N],"msg":"JSON decode error",...}]请求体被 FastAPI 校验失败(合法 HTTP 但 JSON 解析错 / 字段不符 schema)。注意 detail 是数组,不是字符串
5xx各种服务端问题,重试或联系部署方

400 vs 422 区分:完全打不开的 JSON 一般是 422(FastAPI 校验拦截);通过校验但语义不符(如缺 user 消息)才是 400。客户端建议两种都按"请求方写错了"处理,不要重试。

流式中错误

流式响应中如果中途出错,/chat/completions(OpenAI 兼容) 会:

  1. 追加一个 chunk:delta.content = "\n\n[Error: <错误信息>]"
  2. 紧接着发 finish_reason: "stop" + data: [DONE]
  3. 抛出 HTTP 错误码(连接已经在 200 状态下建立)

/chat(自定义 SSE) 出错时则发 data: {"type": "error", "content": "..."}不会再发 done。客户端要把 error 也当作终止信号处理。