限流、超时与流式中断
处理 429 限流、5xx 上游错误、请求超时和流式输出中断:指数退避重试示例、超时设置建议和视频任务的轮询间隔。
429:请求过于频繁
触发限速 / 限流时返回 429。处理方式:
- 降低并发数和请求频率;
- 使用指数退避重试:每次失败后等待时间翻倍,并加入随机抖动,设置最大重试次数;
- 批量任务分散到更长的时间段内执行。
下面是一个通用的指数退避示例(Python,使用 OpenAI SDK):
import os
import random
import time
from openai import OpenAI, RateLimitError, APIStatusError
client = OpenAI(api_key=os.environ["FLUXLANE_API_KEY"], base_url="https://run.fluxlane.ai/v1")
def chat_with_retry(messages, model="模型名称", max_retries=5):
delay = 1.0
for attempt in range(max_retries + 1):
try:
return client.chat.completions.create(model=model, messages=messages)
except (RateLimitError, APIStatusError) as e:
status = getattr(e, "status_code", 429)
retryable = status == 429 or 500 <= status < 600
if not retryable or attempt == max_retries:
raise
time.sleep(delay + random.uniform(0, delay / 2))
delay = min(delay * 2, 30)
只对 429 和 5xx 重试;400、401、403、666 等请求本身的问题重试也不会成功,应先修正请求。
5xx:上游异常
| 状态 | 原因 | 处理 |
|---|---|---|
| 500 / 502 | 上游异常 | 稍后重试,可使用上面的退避逻辑 |
| 503 | 无可用渠道或上游服务不可用 | 稍后重试;持续出现时确认模型可用性或联系支持 |
持续出现时,记录请求 ID(X-Oneapi-Request-Id)并联系支持与反馈。
超时
生成较慢或网络中断都会导致超时:
- 开启流式输出,内容会边生成边返回,避免长时间没有数据;
- 适当提高客户端的读取超时,生成长文本时尤其需要;
- 合理设置输出长度上限,避免不必要的长输出。
流式输出中断
- Chat Completions 正常结束时会收到
data: [DONE],Anthropic Messages 会收到message_stop; - 没有收到结束标记就断开,应视为请求未完成,可以重新发起请求;
- 需要用量统计时带上
"stream_options": {"include_usage": true},用量在最后一个分片中。
视频任务轮询
视频生成是异步任务,不要用一个长连接等待结果:
| 接口 | 建议轮询间隔 |
|---|---|
Seedance GET /v1/video/generations/{task_id} | 每 3~5 秒 |
Kling、Hailuo、Vidu GET /v1/videos/{id} | 每 5~10 秒 |