第一篇:三个配置解决大部分调用问题
Python调AI接口总超时?改了三个地方没再报过错
写了个接AI的项目,踩了一堆坑。超时、429、流式中断,查日志发现不是平台问题,是自己客户端配置没搞对。记录一下。
一、超时
超时设太短是最常见的坑。设30秒,长文本生成跑不完就断。
改120秒。设长不代表每次都等那么久,只是给长任务留余地。模型10秒出结果,10秒就拿到了。
python
from openai import OpenAI
import httpx
client = OpenAI(
base_url="https://api.openstarry.com/v1",
api_key="sk-xxx",
timeout=httpx.Timeout(connect=10.0, read=120.0)
) 场景 读超时
短问答 30秒
一般对话 60秒
代码生成/长文 120秒
超长文本 300秒
二、流式
不开 stream,等全部生成完才返回,屏幕空白好几秒。
加上 stream=True,第一个字出来就感觉在响应。实际耗时没变,体感差很多。
python
stream = client.chat.completions.create(
model="glm-5.2",
messages=[{"role": "user", "content": "介绍一下量子计算"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
对话场景开,批处理可以关。
三、重试
429和5xx可以重试,4xx重试没用。
python
import time import random
def chat_with_retry(messages, max_retries=3):
retryable = {429, 500, 502, 503, 504}
for attempt in range(max_retries + 1):
try:
return client.chat.completions.create(
model="glm-5.2", messages=messages
)
except Exception as e:
status = getattr(e, 'status_code', None)
if status in retryable and attempt < max_retries:
wait = (2 ** attempt) + random.uniform(0, 1)
time.sleep(wait)
else:
raise
退避间隔:1s → 2s → 4s。加随机抖动,避免重试风暴。最多三次。
我用的API:OpenStarry国内的聚合服务。兼容OpenAI,换base_url和key就行。
总结 超时设长、开流式、加重试。这三件事搞定,大部分调用问题就没了。