Skip to main content

错误响应格式

所有错误响应遵循统一格式:
标准错误响应格式
响应头
字段说明
  • error: 错误类型(对应 HTTP 状态码)
  • message: 人类可读的错误描述
  • details: 可选的额外错误信息
  • statusCode: HTTP 状态码
  • correlationId: 用于追踪请求的唯一标识符(注意:401 认证错误不包含此字段)
  • X-Correlation-Id 响应头:与响应体中的 correlationId 相同(注意:401 错误也不包含此响应头)

HTTP 状态码

常见错误

错误响应层级说明
  • 401 认证错误:在 middleware 层处理
    • 响应体格式:{error, message, statusCode}(无 correlationIddetails
    • 响应头:不包含 X-Correlation-Id
  • 其他错误(400、403、500 等):在 API 路由层处理
    • 响应体格式:{error, message, statusCode, correlationId, details?}
    • 响应头:包含 X-Correlation-Id
  • 429 错误:当前未实现,不会返回此错误(错误类型已定义但未使用)

401 Unauthorized

原因:API Key 无效、缺失或格式错误 认证失败有以下几种情况,错误消息会相应变化:
401 错误响应
401 错误响应
401 错误响应
注意:401 认证错误在 middleware 层处理,响应中不包含 correlationId 字段,响应头中也不包含 X-Correlation-Id。只有进入 API 路由后的错误(400、403、500 等)才在响应体和响应头中同时包含 correlationId。(429 当前未实现)
解决方案
  1. 检查 API Key 是否正确
  2. 确认 Authorization 头格式:Bearer YOUR_API_KEY
  3. 验证 API Key 是否已过期
  4. 确认外部认证服务是否可用

403 Forbidden

原因:模型或工具不在许可列表中
403 错误响应
解决方案
  • 使用 GET /api/v1/models 查看可用模型
  • 使用 GET /api/v1/tools 查看可用工具
  • 联系管理员升级权限

400 BadRequest - 缺少必需上下文

原因:工具缺少必需的上下文参数
400 错误响应
注意details.error 字段包含与 message 相同的错误描述,missingContext 数组列出了所有缺失的上下文字段名称。
解决方案
  1. 使用 GET /api/v1/tools 查看工具的 requiredContext
  2. contexttoolContext 中提供缺失的字段
  3. 或使用 contextStrategy: "skip" 跳过该工具

429 TooManyRequests(当前未实现)

实现状态
  • ❌ 当前 API 未实现速率限制功能
  • ❌ 不会返回 429 错误响应
  • ❌ 不会设置 Retry-After 响应头
  • ✅ 错误类型已定义(TooManyRequests),但未在代码中使用
  • 💡 如需限流,建议在网关层或 middleware 实现
理论响应格式(如果实现):
429 错误响应(理论)
设计说明:如果未来实现限流功能,建议通过 HTTP 响应头 Retry-After(单位:秒)传递重试等待时间:
如果实现,建议的客户端处理策略
  • 实现指数退避重试策略
  • 读取响应头 Retry-After 获取建议的重试时间
  • 减少并发请求数
  • 联系销售团队提升限额

500 InternalServerError

原因:服务器内部错误
500 错误响应
重要:遇到 500 错误时,请务必记录 correlationId 并联系技术支持,这将帮助快速定位问题。
解决方案
  • 使用 correlationId 联系技术支持
  • 稍后重试
  • 检查服务状态页

错误处理最佳实践

基础错误处理
重试机制实现
关键点
  • ⚠️ 当前 API 未实现 429 限流,上述代码为未来兼容性保留
  • 其他错误使用指数退避策略(2^i 秒:1s, 2s, 4s)
  • 如果未来实现 429,建议读取 Retry-After 响应头
记录 correlationId
correlationId 获取方式
  • 错误响应:从响应体 data.correlationId 或响应头 X-Correlation-Id 获取(两者相同)
  • 成功响应:只能从响应头 X-Correlation-Id 获取(响应体不包含)
  • 401 错误:两处都不包含,无法获取 correlationId
  • 联系技术支持时提供此 ID 可以快速定位问题
错误类型处理
注意:当前 API 不会返回 429 错误(未实现限流),case 429 为未来兼容性保留。

完整示例

实现状态说明:示例代码中包含 429 限流处理逻辑,但当前 API 未实现限流功能,不会返回 429 错误。该逻辑为未来兼容性保留,建议保留以便将来 API 添加限流功能时无需修改代码。
完整示例特点
  • ⚠️ 包含 429 限流处理(当前未实现,为未来兼容性保留)
  • ✅ 网络错误等使用指数退避重试(1s, 2s, 4s)
  • ✅ 正确获取 correlationId:优先从响应体,失败则从响应头 X-Correlation-Id
  • ✅ 记录 correlationId 便于问题追踪
  • ✅ 最多重试 3 次后抛出最后一次的错误
  • 💡 建议保留 429 处理逻辑,以便 API 未来添加限流时无需修改代码

调试技巧

关于成功响应的 correlationId成功响应(200 OK)的响应体中不包含 correlationId 字段,但响应头中包含 X-Correlation-Id。建议在所有请求(成功或失败)中记录此响应头,便于追踪完整的请求链路。获取方式
  • JavaScript: response.headers.get('X-Correlation-Id')
  • Python (requests): response.headers.get('X-Correlation-Id')

记录 correlationId

保存每个请求的 correlationId(响应体或响应头),便于问题排查

使用 validateOnly

在正式调用前验证参数配置

监控错误率

跟踪不同类型错误的发生频率

日志记录

记录完整的请求和响应,便于复现问题

下一步

认证说明

了解 API 认证机制

调试技巧

学习更多调试方法