排查 Llama API 报错前,先确认一件事:Meta 的 Llama API 公共预览版已于 2026 年 7 月 6 日下线。继续调用旧地址,得到的往往不是 401 或 429,而是下线提示或重定向。很多“Key 失效”“模型不存在”的判断,其实是在调用已经停止服务的端点。
现在调用 Llama 模型,通常经过第三方托管商、自建推理服务或统一网关。各平台的鉴权、Base URL、模型 ID、限流口径和错误结构并不统一,不存在一张通用的报错表。本文按 401、404、429、超时和 400 工具调用五类拆开,给出排查顺序和可复用的错误处理代码。模型与价格以站内模型价格为准。
说明:Llama 是 Meta Platforms, Inc. 的商标。各托管商的接口、错误码和限流口径可能随版本调整,本文以 2026 年 10 月的常见情况为例,最终以对应平台的官方文档为准。
一、先分清报错发生在哪一层
同样失败,原因可能完全不同。先看状态码、错误类型和请求 ID,再决定改配置、改代码还是换平台。
| 现象 | 常见含义 | 优先检查 |
|---|---|---|
| 返回下线提示或重定向 | 请求打到已停止的端点 | 域名和 Base URL |
| 401 | 鉴权失败 | Key、请求头、平台配对 |
| 404 | 路径或模型不存在 | Base URL、路径、模型 ID |
| 429 | 限流或配额受限 | 并发、共享 Key、重试策略 |
| 400 且提到 context length | 上下文超限 | 输入长度、输出预留 |
| 400 且提到 tool 或 JSON | 工具调用格式不合法 | 参数 Schema、解析与重试 |
| 超时 | 连接、首 Token、读取超时 | 网络、输入长度、超时配置 |
| 5xx | 上游服务错误 | 退避重试、平台状态页 |
日志至少记录时间、平台、Base URL、模型 ID、状态码、错误类型、耗时和请求 ID;不要记录完整 Key 或用户原文。
二、401:Key 与平台必须配对
401 表示身份未通过验证,和模型能力、余额通常无关。Llama 没有通用 Key:Meta 旧平台的 Key 不能用于第三方托管商,反之亦然。常见原因还包括:
- 请求头没有使用
Authorization: Bearer <key>,或拼写、大小写不对。 - Key 前后带空格、换行或引号,从聊天窗口复制时最常见。
- 环境变量没有真正加载,部署环境仍是旧值。
- Key 被删除、轮换或停用,定时任务还在用旧值。
- 反向代理或网关覆盖、丢弃了
Authorization头。 - 账户状态或区域权限有问题,Key 有效但无权调用该模型。
先用 curl 打一条最小请求,确认 Key、Base URL 和模型 ID 三项同时通过。仍然 401 时换一把新 Key 复测,区分 Key 本身、代理和网关的问题。不要在客户端写死 Key,也不要让前端直接持有 Key。
三、404:Base URL、模型名与已下线端点
404 通常不是“模型坏了”,而是请求打到了不存在的地址或模型。2026 年最常见的情况,是旧教程里的 Meta 第一方地址已下线,请求返回 404 或下线提示。其他原因包括:
- Base URL 写成另一家平台,或多写、少写
/v1。 - SDK 会自动拼接
/chat/completions,手写路径时又拼了一次。 - 模型 ID 用了旧平台的名字,新托管商并不认识。
- 模型 ID 需要前缀或版本后缀,大小写、连字符不一致。
- 模型在目标区域未开放,或已被平台下架。
- 反向代理重写规则把路径改坏。
平台间模型命名差异很大,建议在配置里维护映射表,而不是在代码里散落模型名。切换时只改映射和 Base URL。遇到 404 先查模型目录,再查路径,不要靠重试解决。
四、429:限流、配额与重试风暴
429 表示请求超过速率、并发或配额限制。各托管商口径不同,可能按每分钟请求数、每分钟 Token 数、每日配额或账户等级计算,以平台文档为准。常见场景:
- 多个服务共用一把 Key,互相挤占额度。
- 批量任务整点同时启动,形成流量脉冲。
- 重试没有退避,越失败越发,形成重试风暴。
- 长上下文或长输出占用较多 Token,挤压并发空间。
- 免费或试用额度用完后,平台仍以 429 或类似错误返回。
处理顺序:先降并发,再加指数退避和随机抖动,最后才考虑拆 Key 或升级配额。拆 Key 只能缓解共享冲突,不能解决总量超限。监控要单独统计 429 比例,按平台、模型和项目拆分,否则很难判断是哪个调用方吃掉了额度。
五、超时:连接、首 Token、读取与流式
超时不等于服务不可用,先定位卡在哪一段:
- 连接超时:DNS、出口或代理不可达,请求还没到平台。
- 首 Token 很慢:输入太长、平台排队、模型负载高。
- 读取超时:输出太长、推理时间长、连接被中间设备断开。
- 流式中断:网络抖动或代理断流,只收到半截内容。
- 全站同时超时:本地出口或上游故障,先看平台状态页。
连接超时和读取超时要分开设置。全设成一个很大的值,故障时会拖住线程池;设得太小,又会误杀正常长任务。流式接口要记录已接收内容和中断位置,支持重连与去重,不要把半截内容入库。
六、400:上下文超限与工具调用格式
400 覆盖范围很广,先看错误信息里的关键词。提到 context length、maximum tokens 或 input too long,通常是上下文超限:输入加输出预留超过模型上限。处理方式是统计 Token、截断历史、压缩检索内容,或换上下文更长的模型。不要只调大 max_tokens,那会挤压输入空间。
提到 tool、function、arguments 或 JSON,通常是工具调用格式不合法:无法解析的 JSON、缺少必填字段、参数类型不对,或工具名不存在。处理原则:
- 用 JSON Schema 校验参数,不要直接字符串拼接。
- 解析失败时把错误信息和期望格式回传给模型,让它修正一次。
- 限制修正次数,避免无限循环。
- 记录原始返回,判断是模型问题还是提示词问题。
- 高风险工具做二次校验,不要因为模型说“已执行”就相信。
七、一份可复用的错误处理代码
示例使用 OpenAI 兼容接口,Base URL 和模型 ID 从环境变量读取;SDK 自动重试已关闭,避免与自定义退避叠加。
import os
import random
import time
import logging
from openai import (
OpenAI, AuthenticationError, NotFoundError, RateLimitError,
BadRequestError, APITimeoutError, APIStatusError,
)
logging.basicConfig(level=logging.INFO)
client = OpenAI(
api_key=os.environ["LLAMA_HOST_API_KEY"],
base_url=os.environ["LLAMA_HOST_BASE_URL"], # 各托管商的兼容地址
max_retries=0,
timeout=90,
)
def ask(prompt: str, retries: int = 4) -> str:
for attempt in range(retries):
try:
resp = client.chat.completions.create(
model=os.environ["LLAMA_MODEL_ID"],
messages=[{"role": "user", "content": prompt}],
max_tokens=1024,
)
return resp.choices[0].message.content
except AuthenticationError:
raise # Key 与平台不匹配,重试没有意义
except NotFoundError as exc:
logging.error("检查 Base URL 与模型 ID: %s", exc.request_id)
raise
except BadRequestError as exc:
logging.error("参数、上下文或工具调用格式有问题: %s", exc.request_id)
raise
except (RateLimitError, APITimeoutError) as exc:
wait = min(2 ** attempt, 20) + random.random()
logging.warning("第 %s 次失败,%.1f 秒后重试: %s",
attempt + 1, wait, exc.request_id)
time.sleep(wait)
except APIStatusError as exc:
if exc.status_code >= 500:
wait = min(2 ** attempt, 20) + random.random()
logging.warning("上游 %s,%.1f 秒后重试", exc.status_code, wait)
time.sleep(wait)
continue
raise
raise RuntimeError("重试次数已用完,请检查限流与超时配置")
重试只适合瞬时错误。401、404 和大多数 400 重试不会变好,只会放大日志和账单。有副作用的业务,先用幂等键或状态检查确认是否执行过。
八、日志、监控与排查顺序
按下面顺序排查,避免一上来就换模型:
- 记录状态码、错误类型、请求 ID、平台、Base URL、模型 ID 和时间。
- 请求打到旧的第一方 Llama API 地址时,先完成迁移。
- 401 查 Key、请求头、环境变量和平台配对。
- 404 查 Base URL、
/v1路径和当前模型目录。 - 429 查并发、共享 Key、重试策略和高峰时段。
- 超时查 DNS、代理、输入长度、首 Token 时间和读取超时。
- 400 查上下文长度、参数支持和工具 Schema。
- 5xx 先退避重试,持续出现再带请求 ID 联系平台。
监控至少按小时统计 401、404、429、超时和 5xx,并按平台与模型拆分。错误率突增时,先看是否集中在某个项目、Key 或模型,再决定降并发、切通道还是回滚。
常见问题
Llama API 返回 401 是不是 Key 过期了?
不一定。最常见的是 Key 与平台不匹配,例如把旧 Meta 平台的 Key 用到第三方托管商,或反过来。先确认请求头、环境变量和 Key 所属平台,再用最小请求复测。
为什么换了托管商就返回 404?
模型 ID 变了。不同平台的命名、前缀、版本后缀和可用区域不同,旧模型名在新平台通常不存在。建立映射表,并以新平台的模型目录为准。
遇到 429 要不要马上重试?
不要立刻密集重试。先降并发,再用指数退避加随机抖动,并设置上限。持续 429 说明总量或配额不够,需要拆 Key、错峰或调整配额。
超时能不能无限重试?
不能。重试要有上限、退避和告警。超时还可能意味着请求已经在上游执行,有副作用的业务要先确认状态,再决定是否重发。
工具调用参数 JSON 解析失败怎么办?
先用 JSON Schema 校验并保留原始返回;再把错误信息和期望格式回传给模型修正一次,并限制次数。高风险工具要二次校验,不能因为模型声称成功就采信。
下一步
先在中商起航 AI 网关创建测试 Key,把 401、404、429、超时和工具调用失败各演练一次,再接入生产监控。模型可用性与价格以模型价格为准。
相关阅读:
