API实践第一篇:三个配置解决大部分调用问题

3 阅读2分钟

第一篇:三个配置解决大部分调用问题

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就行。

总结 超时设长、开流式、加重试。这三件事搞定,大部分调用问题就没了。