报错解决
错误码 timeout 相关服务:OpenAI
解决 AI API 请求超时 timeout 错误
API 调用经常超时?本文列出网络、代码和服务端三方面的排查方法,帮你找到超时根因并解决。
常见症状: 请求超时timeoutConnection timed outRead timeout请求无响应
一句话回答
API 超时通常由三个原因引起:客户端超时设置太短、网络连接不稳定、或服务端处理时间过长。分别从这三个方向排查即可。
超时的三种类型
1. 连接超时
客户端在指定时间内无法与服务器建立 TCP 连接。常见原因:
- 网络不通或被防火墙拦截
- DNS 解析失败
- API 地址拼写错误
2. 读取超时
连接已建立,但服务器在指定时间内没有返回完整响应。常见原因:
- 请求的 token 数量太大,生成时间过长
- 模型负载高,排队时间久
- 客户端超时设置过短
3. 写入超时
发送请求体时超时,较少见。通常是请求体太大或网络上传带宽不足。
解决方案
1. 调整超时设置
在代码中增加超时时间:
from openai import OpenAI
client = OpenAI(
api_key="your-key",
base_url="https://api.tokencheap.space/v1",
timeout=60.0, # 改为 60 秒
max_retries=2,
)
2. 减少单次请求的 token 数
如果每次请求的输出 token 设置过大(如 max_tokens=16000),模型生成时间会很长。建议:
- 长内容拆分为多次短请求
- max_tokens 默认设置 4096 以内
3. 检查网络连接
- 确认服务器可以访问
api.tokencheap.space - 检查防火墙或代理设置
- 测试网络延迟:
ping api.tokencheap.space
4. 添加重试逻辑
import time
def call_with_retry(prompt, max_retries=3):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
timeout=30,
)
except Exception as e:
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
else:
raise
5. 在 n8n 和 Dify 中处理超时
n8n:在 OpenAI 节点的 Options 中增加 Timeout 值,或在工作流中添加 Error Trigger 节点捕获超时后重试。
Dify:在模型供应商设置中检查超时配置,确认没有被设置得过短。
Cursor:通常自动处理超时,如频繁出现可检查代理或网络设置。
快速排查清单
- 检查 API 地址是否可以 ping 通
- 确认防火墙/代理没有拦截 API 请求
- 增加客户端超时时间(30s → 60s 或更长)
- 减少单次请求的 max_tokens
- 添加重试和指数退避逻辑
- 联系技术支持确认服务端状态