BYOKSBYOKS Docs

API

错误处理

本指南介绍 BYOKS API 的错误码和处理方式。

错误响应格式

{
  "error": {
    "message": "错误描述信息",
    "type": "error_type",
    "code": "error_code",
    "param": "相关参数(如有)"
  }
}

HTTP 状态码

状态码说明
200成功
400请求参数错误
401认证失败
403权限不足
404资源不存在
429请求过多
500服务器错误
502Provider 错误
503服务暂不可用

错误码详解

400 Bad Request

请求参数有误:

{
  "error": {
    "message": "Invalid value for 'model': 'invalid-model' is not a valid model ID",
    "type": "invalid_request_error",
    "code": "invalid_model",
    "param": "model"
  }
}

常见原因

  • 模型 ID 不正确
  • 缺少必填参数
  • 参数格式错误

解决方法:检查请求参数是否正确。

401 Unauthorized

认证失败:

{
  "error": {
    "message": "Invalid API key provided",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}

常见原因

  • API Key 无效
  • API Key 已过期
  • 未提供认证信息

解决方法:检查 API Key 是否正确。

403 Forbidden

权限不足:

{
  "error": {
    "message": "You don't have access to this model",
    "type": "permission_error",
    "code": "model_not_available"
  }
}

常见原因

  • 未配置该模型的 Provider
  • 账户被限制

解决方法:检查是否配置了相应的 Provider。

429 Too Many Requests

请求过多:

{
  "error": {
    "message": "Rate limit exceeded. Please slow down.",
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded"
  }
}

常见原因

  • 超过每分钟请求限制
  • 超过并发连接数

解决方法:降低请求频率,或升级套餐。

502 Bad Gateway

Provider 返回错误:

{
  "error": {
    "message": "The upstream provider returned an error",
    "type": "provider_error",
    "code": "provider_error",
    "provider": "openai"
  }
}

常见原因

  • Provider 服务异常
  • Provider API Key 无效
  • Provider 配额用完

解决方法:检查 Provider 状态和配置。

503 Service Unavailable

服务暂不可用:

{
  "error": {
    "message": "All providers are currently unavailable",
    "type": "service_error",
    "code": "no_available_provider"
  }
}

常见原因

  • 所有配置的 Provider 都不可用
  • 服务维护中

解决方法:等待服务恢复,或配置更多 Provider 作为备用。

错误处理示例

TypeScript

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.byoks.com/v1',
  apiKey: 'your-byoks-key',
});

try {
  const response = await client.chat.completions.create({
    model: 'gpt-4o',
    messages: [{ role: 'user', content: '你好' }],
  });
  console.log(response.choices[0].message.content);
} catch (error) {
  if (error instanceof OpenAI.APIError) {
    console.error('API 错误:', error.status, error.message);

    if (error.status === 429) {
      // 速率限制,等待后重试
      await sleep(1000);
      // 重试逻辑...
    } else if (error.status === 502) {
      // Provider 错误,尝试其他模型
      // 重试逻辑...
    }
  } else {
    console.error('网络错误:', error);
  }
}

Python

from openai import OpenAI, APIError, RateLimitError
import time

client = OpenAI(
    base_url="https://api.byoks.com/v1",
    api_key="your-byoks-key",
)

try:
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": "你好"}],
    )
    print(response.choices[0].message.content)
except RateLimitError:
    print("速率限制,等待后重试")
    time.sleep(1)
    # 重试逻辑...
except APIError as e:
    print(f"API 错误: {e.status_code} - {e.message}")

重试策略

建议的重试策略:

错误类型是否重试策略
400 Bad Request修复请求参数
401 Unauthorized检查 API Key
429 Rate Limit指数退避重试
500 Server Error等待后重试
502 Provider Error尝试其他 Provider
503 Unavailable等待后重试

指数退避示例

async function withRetry<T>(
  fn: () => Promise<T>,
  maxRetries = 3,
  baseDelay = 1000
): Promise<T> {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await fn();
    } catch (error) {
      if (i === maxRetries - 1) throw error;

      if (error instanceof OpenAI.APIError) {
        if (error.status === 429 || error.status >= 500) {
          const delay = baseDelay * Math.pow(2, i);
          await sleep(delay);
          continue;
        }
      }

      throw error;
    }
  }
  throw new Error('Max retries exceeded');
}

下一步