运行与排障 · 2026-09-01 · HippoAPI Documentation Team

错误处理与重试

识别 API 错误,保留必要的排障信息,并且只重试可安全重复的临时故障。

错误响应格式

非 2xx 响应使用带有人类可读消息的错误对象,并且可能包括类型、代码或请求 ID。将 HTTP 状态视为第一个分类信号并保留请求 ID(如果存在)。

{
  "error": {
    "message": "Error description (request id: ...)",
    "type": "new_api_error",
    "code": ""
  }
}

状态码与处理方式

状态码含义应用处理方式
400请求、模型、字段无效或参数不受支持。修复请求。不要以不变的方式重试同一请求体。
401API 密钥丢失、格式错误、过期、禁用或无效。更正或旋转密钥。不要自动重试。
403账号、密钥、IP、组、模型不合法。检查访问控制和模型可用性。
402余额或额度不足。在发送更多请求之前检查钱包和密钥配额。
404未找到端点或模型资源。检查Base URL、端点路径和确切的模型标识符。
429当前请求率或并发过高。减少抖动并减少并发性。
5xx平台或上游提供商故障。重试安全请求,并有严格的尝试限制;保留请求 ID。

使用有上限的指数退避

仅重试可能是暂时性的错误:连接失败、HTTP 429 和选定的 5xx 响应。添加随机抖动,以便许多工作进程不会同时重试。设置最大尝试次数和总体截止日期。

const delaysMs = [500, 1000, 2000]

for (let attempt = 0; attempt <= delaysMs.length; attempt++) {
  try {
    return await callHippoAPI()
  } catch (error) {
    const status = error?.status
    const retryable = status === 429 || (status >= 500 && status < 600)
    if (!retryable || attempt === delaysMs.length) throw error
    const jitter = Math.floor(Math.random() * 250)
    await new Promise((resolve) => setTimeout(resolve, delaysMs[attempt] + jitter))
  }
}

记录排障信息,但不要记录敏感数据

请勿记录包含个人、机密或受监管数据的Authorization 请求头、完整 API 密钥或完整提示。在将错误转发到可观测性工具之前进行编辑。

  • UTC 时间戳和应用程序跟踪 ID。
  • HippoAPI 请求 ID(如果存在)。
  • HTTP 方法和端点路径。
  • 模型标识符、状态代码、持续时间和重试尝试。
  • 脱敏后的错误摘要。

联系技术支持前

使用最小的安全请求重现问题,确认模型出现在 GET /v1/models 中,并检查用量日志。然后向 [email protected] 提供时间戳、端点、模型、HTTP 状态、请求 ID 和脱敏后的请求摘要。

不要包含您的 API 密钥。如果您已经分享或公开了该信息,请在继续调查之前将其撤消。