错误处理与重试
使用内置重试
- Python
- JavaScript
from openai import OpenAI
client = OpenAI(
api_key="your-api-key",
base_url="https://www.cheapertoken.work/v1",
max_retries=3,
timeout=60.0,
)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "your-api-key",
baseURL: "https://www.cheapertoken.work/v1",
maxRetries: 3,
timeout: 60000,
});
手动处理错误
- Python
- JavaScript
import time
from openai import OpenAI, RateLimitError, APITimeoutError, APIConnectionError
client = OpenAI(api_key="your-api-key", base_url="https://www.cheapertoken.work/v1")
def chat_stream(messages, max_retries=3):
for attempt in range(max_retries):
try:
stream = client.chat.completions.create(
model="gpt-5.4",
messages=messages,
stream=True,
)
result = ""
for chunk in stream:
if chunk.choices[0].delta.content:
result += chunk.choices[0].delta.content
return result
except RateLimitError:
wait = 2 ** attempt
print(f"触发限速,{wait}秒后重试...")
time.sleep(wait)
except APITimeoutError:
print("请求超时,重试中...")
except APIConnectionError as e:
print(f"连接错误: {e}")
break
raise Exception("请求失败,已达最大重试次数")
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "your-api-key",
baseURL: "https://www.cheapertoken.work/v1",
});
async function chatStream(messages, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const stream = await client.chat.completions.create({
model: "gpt-5.4",
messages,
stream: true,
});
let result = "";
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) result += content;
}
return result;
} catch (err) {
if (err instanceof OpenAI.RateLimitError) {
const wait = 2 ** attempt;
console.log(`触发限速,${wait}秒后重试...`);
await new Promise((r) => setTimeout(r, wait * 1000));
} else if (err instanceof OpenAI.APIConnectionError) {
console.error(`连接错误: ${err.message}`);
break;
} else {
console.log("请求超时,重试中...");
}
}
}
throw new Error("请求失败,已达最大重试次数");
}
常见错误码
| 错误类型 | 状态码 | 原因 | 处理方式 |
|---|---|---|---|
AuthenticationError | 401 | API Key 无效 | 检查 Key |
PermissionDeniedError | 403 | 无访问权限 | 检查账户 |
NotFoundError | 404 | 模型不存在 | 检查模型名称 |
RateLimitError | 429 | 频率/额度超限 | 指数退避重试 |
InternalServerError | 500 | 服务端错误 | 稍后重试 |