云计算百科
云计算领域专业知识百科平台

Python 实战:给大模型 API 调用加上重试、超时与降级,别让一次 429 拖垮整个服务

一、场景:一次 429 怎么拖垮整条链路

接大模型 API 做业务,最怕的不是模型答得不好,而是上游抽风:限流 429、网关超时、偶发连接重置。你的接口如果不处理这些,一个外部抖动就会顺着调用链放大成用户侧的整页报错。

去年 DeepSeek 几次故障,大量依赖它的小应用集体 5xx,根因大多不是模型挂了,而是调用层没有重试、超时、降级三件套。这篇把这三件套用标准库手写一遍,不依赖任何第三方包,复制就能跑。

二、先要一个会随机失败的\”上游\”

用这个 mock 模拟不稳定 API:前几次按概率抛限流/超时错误,逼出重试逻辑。

import asyncio
import random

class RateLimitError(Exception):
\”\”\”模拟 429 限流,可重试\”\”\”
pass

class TimeoutErrorUpstream(Exception):
\”\”\”模拟网关超时,可重试\”\”\”
pass

async def fake_llm_api(prompt: str) -> str:
# 模拟 70% 概率瞬时故障,30% 正常
r = random.random()
if r < 0.5:
raise RateLimitError(\”429 Too Many Requests\”)
if r < 0.7:
raise TimeoutErrorUpstream(\”upstream timeout after 30000ms\”)
return f\”OK: {prompt[:20]}\”

三、核心:指数退避 + 抖动重试

只重试\”可重试\”错误(限流、超时),对参数错误、鉴权失败一律不重试,避免无效打爆上游。

async def call_with_retry(
prompt: str,
max_retries

赞(0)
未经允许不得转载:网硕互联帮助中心 » Python 实战:给大模型 API 调用加上重试、超时与降级,别让一次 429 拖垮整个服务
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!