错误处理
处理 GLM 5 API 的参数校验、认证、额度、限流与服务端错误。
非流式错误使用 OpenAI 兼容的错误对象:
{
"error": {
"message": "Invalid API key provided.",
"type": "invalid_request_error",
"code": "invalid_api_key",
"param": null
}
}
这也是多数 OpenAI 兼容 SDK 能直接识别的结构。应用逻辑优先读取 error.code,重试决策同时结合 HTTP 状态码。
错误码参考
| HTTP | Code | 含义 | 建议重试? |
|---|---|---|---|
| 400 | invalid_request_error | JSON、messages、工具参数或工具结果顺序不合法。 | 否 |
| 400 | context_length_exceeded | 请求超过了所选模型的上下文窗口。 | 否 |
| 400 | unsupported_parameter | 当前模型不支持请求中的某项能力。 | 否 |
| 401 | invalid_api_key | Bearer Key 缺失、无效、已停用或已删除。 | 否 |
| 402 | insufficient_quota | 当前积分无法覆盖预占。 | 否 |
| 404 | model_not_found | 模型 ID 不在公开模型列表中。 | 否 |
| 413 | request_too_large | 请求体超过 4 MB。 | 否 |
| 429 | rate_limit_exceeded | API Key 超过每分钟请求限制。 | 是 |
| 500 | internal_error | GLM 5 API 出现临时内部错误。 | 是 |
| 503 | service_unavailable | 公共 API 暂时不可用。 | 是 |
重试策略
只建议自动重试临时错误:
429:降低并发并按指数退避重试。500:使用指数退避重试。503:稍后重试。
不要自动重试 400、401、402、404、413。应先修正请求参数、凭证、余额或模型选择。
遇到 context_length_exceeded 时,缩短或摘要历史消息、减少工具定义,或降低 max_completion_tokens。不同模型的上下文限制可能不同。请求失败后,已经预占的积分会进入退款/结算流程。
async function withBackoff<T>(operation: () => Promise<T>): Promise<T> {
let delay = 500;
for (let attempt = 0; attempt < 4; attempt += 1) {
try {
return await operation();
} catch (error: any) {
const status = error?.status;
if (![429, 500, 503].includes(status) || attempt === 3) {
throw error;
}
await new Promise((resolve) => setTimeout(resolve, delay));
delay *= 2;
}
}
throw new Error('Unreachable');
}
流式错误
当流式响应已经开始后再出现错误,错误对象会出现在 SSE 数据流中:
data: {"error":{"message":"Internal server error.","type":"server_error","code":"internal_error","param":null}}
客户端需要同时处理开始流式响应前的 HTTP 状态码,以及流中出现的 error 对象。
排查上下文持续增长导致的失败
如果一个长时间运行的客户端开始出现 402 insufficient_quota,建议按顺序检查:
- 最近一次
usage.prompt_tokens。 - 客户端是否每轮都重新发送完整历史。
- 当前
max_completion_tokens设置。 - GLM 5 剩余积分。
更多方法见上下文与成本控制。