报错解决 错误码 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:通常自动处理超时,如频繁出现可检查代理或网络设置。

快速排查清单

  1. 检查 API 地址是否可以 ping 通
  2. 确认防火墙/代理没有拦截 API 请求
  3. 增加客户端超时时间(30s → 60s 或更长)
  4. 减少单次请求的 max_tokens
  5. 添加重试和指数退避逻辑
  6. 联系技术支持确认服务端状态

相关教程