常见错误码说明
本文档详细说明了 RealmRouter API 调用过程中可能遇到的错误码、错误原因以及相应的解决方案,帮助开发者快速定位和解决问题。
错误响应格式
所有 API 错误响应都遵循统一的格式:
json
{
"error": {
"code": "invalid_api_key",
"message": "Invalid API key provided",
"type": "authentication_error",
"param": "authorization",
"timestamp": "2024-01-01T12:00:00Z",
"request_id": "req_123456789"
}
}字段说明
- code: 错误代码,用于程序化处理
- message: 错误描述,便于人工理解
- type: 错误类型,用于分类处理
- param: 相关参数,指示错误来源
- timestamp: 错误发生时间
- request_id: 请求唯一标识,用于问题追踪
认证错误 (4xx)
401 Unauthorized
invalid_api_key
- 错误码:
invalid_api_key - 错误信息: "Invalid API key provided"
- 原因: API 密钥无效、格式错误或不存在
- 解决方案:
- 检查 API 密钥是否正确
- 确认密钥格式(应为 "sk-" 开头)
- 验证密钥是否已激活
- 重新生成 API 密钥
api_key_expired
- 错误码:
api_key_expired - 错误信息: "API key has expired"
- 原因: API 密钥已过期
- 解决方案:
- 检查密钥有效期
- 重新生成新的 API 密钥
- 更新应用中的密钥配置
insufficient_permissions
- 错误码:
insufficient_permissions - 错误信息: "Insufficient permissions for this operation"
- 原因: 当前密钥权限不足
- 解决方案:
- 检查密钥权限范围
- 联系管理员提升权限
- 使用具有足够权限的密钥
403 Forbidden
account_suspended
- 错误码:
account_suspended - 错误信息: "Account has been suspended"
- 原因: 账户被暂停使用
- 解决方案:
- 检查账户状态
- 联系客服了解原因
- 处理违规问题后申请恢复
rate_limit_exceeded
- 错误码:
rate_limit_exceeded - 错误信息: "Rate limit exceeded"
- 原因: 超出调用频率限制
- 解决方案:
- 降低请求频率
- 实现指数退避重试
- 升级到更高套餐
- 使用请求队列
quota_exceeded
- 错误码:
quota_exceeded - 错误信息: "Quota exceeded"
- 原因: 超出使用配额
- 解决方案:
- 检查当前配额使用情况
- 等待配额重置(通常按月重置)
- 升级套餐增加配额
- 购买额外配额包
请求错误 (4xx)
400 Bad Request
invalid_request
- 错误码:
invalid_request - 错误信息: "Invalid request format"
- 原因: 请求格式不正确
- 解决方案:
- 检查 JSON 格式是否正确
- 验证必需参数是否完整
- 确认参数类型和格式
- 参考 API 文档检查请求结构
invalid_model
- 错误码:
invalid_model - 错误信息: "Invalid model specified"
- 原因: 指定的模型不存在或不可用
- 解决方案:
- 检查模型名称拼写
- 确认模型是否可用
- 查看支持的模型列表
- 使用正确的模型标识符
invalid_parameters
- 错误码:
invalid_parameters - 错误信息: "Invalid parameters provided"
- 原因: 参数值无效或超出范围
- 解决方案:
- 检查参数值范围
- 验证参数类型
- 确认必需参数
- 参考参数说明文档
context_length_exceeded
- 错误码:
context_length_exceeded - 错误信息: "Context length exceeded"
- 原因: 输入内容超出模型上下文长度限制
- 解决方案:
- 减少输入内容长度
- 使用支持更长上下文的模型
- 实现文本分割策略
- 移除不必要的上下文
408 Request Timeout
request_timeout
- 错误码:
request_timeout - 错误信息: "Request timeout"
- 原因: 请求处理超时
- 解决方案:
- 减少请求复杂度
- 降低 max_tokens 参数
- 使用流式输出
- 增加客户端超时时间
服务器错误 (5xx)
500 Internal Server Error
internal_error
- 错误码:
internal_error - 错误信息: "Internal server error"
- 原因: 服务器内部错误
- 解决方案:
- 稍后重试请求
- 检查服务状态页面
- 联系技术支持
- 提交错误报告
model_overloaded
- 错误码:
model_overloaded - 错误信息: "Model is currently overloaded"
- 原因: 模型服务负载过高
- 解决方案:
- 等待一段时间后重试
- 使用其他可用模型
- 降低请求频率
- 联系客服了解恢复时间
503 Service Unavailable
service_unavailable
- 错误码:
service_unavailable - 错误信息: "Service temporarily unavailable"
- 原因: 服务暂时不可用
- 解决方案:
- 检查服务状态公告
- 等待服务恢复
- 使用备用服务
- 订阅服务状态通知
maintenance_mode
- 错误码:
maintenance_mode - 错误信息: "Service under maintenance"
- 原因: 服务维护中
- 解决方案:
- 查看维护公告
- 等待维护完成
- 调整使用计划
- 提前安排重要任务
内容错误 (4xx)
400 Bad Request
content_filtered
- 错误码:
content_filtered - 错误信息: "Content filtered by safety policy"
- 原因: 内容违反安全策略
- 解决方案:
- 检查输入内容
- 修改或删除敏感内容
- 使用更中性的表达
- 了解内容政策
inappropriate_content
- 错误码:
inappropriate_content - 错误信息: "Inappropriate content detected"
- 原因: 检测到不当内容
- 解决方案:
- 修改输入内容
- 避免敏感话题
- 使用内容预检查
- 了解使用条款
错误处理最佳实践
1. 错误重试策略
python
import time
import random
from requests.exceptions import RequestException
def api_call_with_retry(url, headers, data, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(url, headers=headers, json=data, timeout=30)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
# 速率限制,指数退避
wait_time = (2 ** attempt) + random.uniform(0, 1)
time.sleep(wait_time)
continue
elif response.status_code >= 500:
# 服务器错误,重试
if attempt < max_retries - 1:
time.sleep(1)
continue
else:
raise Exception("Server error after retries")
else:
# 客户端错误,不重试
response.raise_for_status()
except RequestException as e:
if attempt == max_retries - 1:
raise e
time.sleep(1)
raise Exception("API call failed after retries")2. 错误日志记录
python
import logging
import json
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def log_api_error(response):
try:
error_data = response.json()
error_info = {
'status_code': response.status_code,
'error_code': error_data.get('error', {}).get('code'),
'error_message': error_data.get('error', {}).get('message'),
'error_type': error_data.get('error', {}).get('type'),
'request_id': error_data.get('error', {}).get('request_id'),
'timestamp': error_data.get('error', {}).get('timestamp')
}
logger.error(f"API Error: {json.dumps(error_info, indent=2)}")
except:
logger.error(f"API Error: HTTP {response.status_code} - {response.text}")3. 错误分类处理
python
def handle_api_error(response):
if response.status_code == 401:
# 认证错误
raise AuthenticationError("Invalid API key or permissions")
elif response.status_code == 429:
# 速率限制
raise RateLimitError("Rate limit exceeded")
elif response.status_code == 400:
# 请求错误
error_data = response.json()
error_code = error_data.get('error', {}).get('code')
if error_code == 'context_length_exceeded':
raise ContextLengthError("Input too long")
elif error_code == 'invalid_model':
raise InvalidModelError("Model not available")
else:
raise InvalidRequestError("Invalid request")
elif response.status_code >= 500:
# 服务器错误
raise ServerError("Server error occurred")
else:
# 其他错误
raise APIError(f"API error: {response.status_code}")监控和告警
1. 错误率监控
- 设置错误率阈值告警
- 监控不同类型错误的分布
- 跟踪错误趋势变化
2. 性能监控
- 监控响应时间
- 跟踪成功率变化
- 监控服务可用性
3. 业务监控
- 监控 API 调用量
- 跟踪用户行为
- 监控成本变化
获取帮助
如果遇到无法解决的错误:
- 查看错误码对应的解决方案
- 检查服务状态页面
- 搜索开发者社区
- 提交技术支持工单
- 联系客户经理