超时与模型不稳定
背景
由于网络波动或厂商服务不稳定,模型调用偶尔会出现超时或失败。图灵平台提供三个配置项来应对:
| 配置项 | 作用 |
|---|---|
timeout | 控制单次请求的最大等待时间 |
max_retries | 失败后自动重试 |
fallbacks | 主模型不可用时切换到备用模型 |
为什么会遇到超时?
如果你遇到超时错误,可能是以下原因:
- 大文件传输:上传大量图片或文件需要更多时间
- 长思考问题:使用思考模式的模型(如 o 系列、Deepseek R1)在复杂问题上可能需要较长的推理时间
- 模型静默期:模型在处理请求时可能有一段时间没有返回数据
排查方法:用 stream=True 模式验证是否有首个 chunk 返回
completion = client.chat.completions.create(
model="turing/deepseek-r1",
messages=[{"role": "user", "content": "复杂的数学问题..."}],
stream=True
)
for chunk in completion:
print(chunk) # 观察首个 chunk 返回时间
- 有首 chunk 返回但后续超时:说明模型正在工作,增加
timeout时间即可 - 一直没有返回:可能是网络问题或请求参数错误
实际案例
假设你的应用对响应时间有要求:希望 10 秒内完成大模型调用。
正常情况下,deepseek-v4-flash 平均 3-4 秒返回。但偶尔会出现超时或失败。
解决方案:设置 timeout: 5 秒,配合 fallbacks 降级到 doubao-seed-2.1-turbo。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "你好"}],
turing_options={
"timeout": 5,
"fallbacks": "doubao-seed-2.1-turbo"
}
)
效果:
- 正常情况:
deepseek-v4-flash3-4 秒返回 - 主模型超时(>5秒)或失败:自动切换到
doubao-seed-2.1-turbo - 总耗时控制在 10 秒以内
如果希望主模型有一次重试机会再降级:
turing_options={
"timeout": 5,
"max_retries": 1,
"fallbacks": "doubao-seed-2.1-turbo"
}
配置多个备用模型
turing_options={
"timeout": 10,
"max_retries": 1,
"fallbacks": [
"doubao-seed-2.1-turbo", # 第一备选
"turing/gpt-5.4-mini" # 第二备选
]
}
Fallback 时覆盖参数
如果备用模型需要不同的参数配置:
turing_options={
"fallbacks": {
"model": "doubao-seed-2.1-turbo",
"thinking": {"type": "enabled"}, # 启用深度思考
"temperature": 0.7
}
}
客户端超时说明
OpenAI SDK 的超时是客户端超时,turing_options.timeout 是服务端超时,两者独立生效。建议将 SDK 客户端超时设置得比服务端超时更长:
client = OpenAI(
timeout=60.0 # 客户端超时 60 秒
)
completion = client.chat.completions.create(
model="turing/gpt-4.1",
messages=[{"role": "user", "content": "Hello!"}],
turing_options={
"timeout": 30 # 服务端超时 30 秒
}
)
参数速查表
| 参数 | 类型 | 默认值 | 范围 | 说明 |
|---|---|---|---|---|
timeout | float | stream: 90s, non-stream: 120s | 0-300 | 请求超时时间(秒) |
max_retries | int | 0 | 1-3 | 最大重试次数 |
fallbacks | string | object | array | null | - | 备用模型配置 |
注意事项
- 流式请求在开始输出 chunk 后,如果发生错误不会重试或触发 Fallback
- 确保 fallback 模型支持原请求的功能(如 tools、vision 等)
- fallback 请求会产生独立的计费,按实际使用的模型计算