LLM API 异常处理 3 步快速排查法:free-llm-api-resources 错误处理从 429 到 503 一次讲清 LLM API 异常处理 3 步快速排查法free-llm-api-resources 错误处理从 429 到 503 一次讲清【免费下载链接】free-llm-api-resourcesA list of free LLM inference resources accessible via API.项目地址: https://gitcode.com/GitHub_Trending/fre/free-llm-api-resources你照着列表里的某个免费端点发了句 Hi弹回 429。free-llm-api-resources 错误处理、LLM API 异常处理从哪下手429 限流怎么解、API 错误码速查看什么咱们就从这条报错聊起。 先搞清楚——这个错到底是谁的锅报错上来先别慌。刚上手 LLM API 调用的人最容易犯的错是拿到一个 4xx 就猛改 prompt。其实十秒钟判清锅在哪一层比盯着 traceback 干瞪眼强得多锅在哪一层现场表现10 秒判据对面还没收到你的请求DNS 解析失败、连接超时、连接被重置换个端点也连不上多半是网络的事请求到了回话读不懂JSONDecodeError响应是 HTML 页或半截内容先看 Content-Type 是不是 application/json门没让你进401 未授权、403 禁止访问key 失效、没开通该模型都是它对方忙不过来429 限流、503 服务不可用隔一会儿能通或公告里有故障这张表就是你要的 API 错误码速查入口版先认现场再对号入座。土办法是拿 curl -v 复现一次——卡在建连是网络层收到响应但解析炸是格式层弹 401/403 是权限层。层没判对后面的药就下错了。 对症下药——每类错误的修复动作退着试三次别手动重发免费端点负载高网络层抽风是常态手动重发既累又没节奏还容易顺手把配额刷没。import time, requests def call(url, payload): for wait in (1, 2, 4): try: return requests.post(url, jsonpayload, timeout10) except requests.exceptions.RequestException: time.sleep(wait)坑位提醒重试只认网络层错误响应正常返回的 4xx重试一万遍也不会变。先验 Content-Type再解 JSON有些服务挂了会直接回一个 HTML 错误页上来就 r.json() 必炸。响应头里其实早写明了真相只是没人告诉你该看哪。r requests.get(url, timeout10) ctype r.headers.get(Content-Type, ) if application/json not in ctype: raise ValueError(f拿到的是 {ctype}不是 JSON) data r.json()坑位提醒流式响应的 Content-Type 是 text/event-stream别拿 JSON 规则去卡它。429 限流怎么解读 Retry-After单独排队429 不是拒绝你是让你等而且通常还告诉你等多久。免费档配额大多按天计今天刷爆睡一觉基本回血。r requests.post(url, jsonpayload, timeout10) if r.status_code 429: wait int(r.headers.get(Retry-After, 5)) time.sleep(wait) r requests.post(url, jsonpayload, timeout10)坑位提醒Retry-After 缺省时按 5 秒起步别用死循环去刷免费配额。先等后换503 和 5xx 别硬刚5xx 是对面自己先趴了服务恢复快慢不受你控制硬重试只会雪上加霜。if 500 r.status_code 600: time.sleep(10) r requests.post(url, jsonpayload, timeout10)坑位提醒503 连着出现直接切备用端点别在一个坑里恋战。401 和 403 别混着处理401 是我不认识你403 是认识你但不给这个资源。两个码都指向身份与授权排查顺序一致先 key后模型。if r.status_code 401: print(key 没认查环境变量、大小写、多余空格) elif r.status_code 403: print(key 认了但没权限换模型或去控制台开通)坑位提醒key 从 .env 读出来常带换行符先 strip() 再怀疑别的。LLM API 重试策略一句话带过网络抖动 1s/2s/4s 退避429 单独排队读 Retry-After其余 4xx 直接认。这套节奏几行 if 就能落地真上量了再考虑 tenacity 这类重试库。回到项目里看一眼——free-llm-api-resources 怎么兜底的项目拉取各家模型清单时兜底套路如出一辙。src/pull_available_models.py 里的抓取函数基本是这个骨架try: r requests.get(url, timeout10) r.raise_for_status() except requests.exceptions.RequestException as e: logger.error(f拉取失败: {e}) # JSON 解析分支同理 return []请求挂了、解析炸了各走一个 except都是记日志加返回空列表不拖垮整份清单。src/data.py 里的 HYPERBOLIC_IGNORED_MODELS 也把已知坑位提前标了出来——照着做你自家的黑名单就行。️ 给自己装一层防弹衣排查是救火下面三样是防火日志带上时间戳、状态码、模型名、参数摘要按状态码分流4xx 认、429 排、5xx 退避所有请求设超时再备一个备用端点三句话排查清单卡住的时候按顺序走三句话基本能定位看错误类型定下是哪一层的锅验 key 有效性检查请求参数查该模型的状态页或服务公告三步走完还没定位说明锅在对方那边切端点比继续调参有用。还想再深一层项目看完自己写调用代码时这三个方向值得提前想把日志接到告警通道429 一出现就推送别等用户先发现。翻翻 src/data.py 里的 LAMBDA_IGNORED_MODELS哪些模型该进黑名单项目替你踩过坑了。给每次调用带一个 request id串起整条请求链路排查不再靠猜。报错这事见多了就不慌了——下一个免费端点等你去试。【免费下载链接】free-llm-api-resourcesA list of free LLM inference resources accessible via API.项目地址: https://gitcode.com/GitHub_Trending/fre/free-llm-api-resources创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考