AI API 报错 model_not_found 排查指南:Endpoint、模型名、鉴权与模型下线验证

线上大模型接口突然失败,常见现象是:

  • 昨天还能正常调用,今天开始报错;
  • 代码没有改;
  • API Key 没换;
  • 账单和额度看起来正常;
  • base_url 没动;
  • 但把 model 换成另一个模型后,请求又恢复正常。

这种情况不一定是业务代码问题。对于云端大模型 API、OpenAI 兼容接口、Anthropic / Claude 接口、Gemini、智谱、阿里云百炼,以及各种中转 API 来说,AI API 调用失败有时是因为当前使用的模型已经下线、弃用、改名,或者账号不再具备访问权限。

本文按排查现场的方式整理一套流程,重点解决一个问题:

如何判断一次 API 报错是不是由模型下线、模型不可用或模型权限变化导致的?


一、先看这几个关键配置项

排查 AI API 调用失败时,不建议一上来就改代码。先确认当前请求链路里的几个核心变量。

常见配置一般包括:

复制代码
export API_KEY="你的 API Key"
export BASE_URL="https://api.example.com/v1"
export MODEL="your-model-id"

实际项目里可能写在:

  • .env
  • 配置中心
  • Kubernetes Secret / ConfigMap
  • CI/CD 环境变量
  • 后台管理系统
  • 代码常量
  • 中转平台的模型映射配置

一次请求能否成功,通常至少依赖下面几项:

配置项 作用 常见问题
API_KEY 鉴权 Key 错误、过期、权限不足、额度异常
BASE_URL API Endpoint 域名写错、路径错误、中转地址不可用
MODEL 模型 ID 拼写错误、模型下线、模型改名、账号不可访问
请求参数 调用能力 tools、stream、JSON schema、多模态参数不兼容
账号 / 项目 / 区域 权限范围 当前项目、组织、region 没有模型权限

如果只有某一个模型失败,而其他模型能成功,优先排查 MODEL

如果所有模型都失败,再重点排查 API_KEY、额度、网络和 BASE_URL


二、哪些报错可能和模型不可用有关?

不同平台返回的错误结构不完全一致,但如果响应体里出现下面这些关键词,就应该优先确认模型是否仍然可用:

复制代码
model_not_found
model does not exist
invalid model
model is not available
model has been deprecated
model not supported
no available channel
404
400 invalid_request_error

注意,不要只看 HTTP 状态码。

很多平台会用 400404 表示模型不存在,也有些平台会把真正的错误原因放在业务字段里,例如:

复制代码
{
  "error": {
    "code": "model_not_found",
    "message": "The model does not exist or you do not have access to it."
  }
}

排查时更应该关注:

  • HTTP status code
  • error.code
  • error.message
  • request_id
  • 请求时间
  • 当前使用的 model
  • 当前 base_url
  • 当前账号 / 项目 / 分组

同样是 400,可能是参数错误,也可能是模型 ID 无效。

同样是 404,可能是接口路径错误,也可能是模型已经不在当前账号的可访问列表中。


三、快速判断:是模型名写错,还是模型下线?

可以先用下面这张表快速定位。

问题类型 常见表现 判断方式 处理方式
模型名写错 第一次调用就失败 对照官方模型 ID,检查大小写、连字符、日期后缀 改成正确模型名
模型下线 以前能用,现在不能用 查控制台模型列表、公告、changelog 迁移到推荐替代模型
模型弃用 仍可调用,但出现 deprecated 提示 查看弃用公告和迁移时间 在窗口期内完成替换
权限不足 别人能用,当前账号不能用 查账号、组织、项目、套餐权限 开通权限或切换项目
区域不可用 某些 region 成功,某些 region 失败 切换 region / project 对照测试 更换可用区域
参数不兼容 invalid parameterunsupported parameter 用最小请求去掉复杂参数 按新模型能力调整参数
中转渠道不可用 官方可用,中转失败 查中转后台渠道、分组、模型映射 换渠道、换分组或直连官方
服务过载 常见 500503overloaded 查看状态页,重试后可能恢复 重试、限流或 fallback

核心判断逻辑:

复制代码
所有模型都失败:优先查 Key、额度、网络、base_url。
只有一个模型失败:优先查模型名、权限、下线公告、模型映射。
昨天能用今天不能用:重点怀疑模型下线、改名、权限变化或渠道变化。

四、模型下线、Deprecated、改名有什么区别?

在正式排查前,先区分几个容易混淆的概念。

1. 模型下线

模型下线指平台不再接受某个模型 ID 的 API 请求。

即使请求格式完全正确,也可能返回:

  • 模型不存在;
  • 模型不可用;
  • 模型不支持;
  • 当前账号无权访问;
  • 找不到可用渠道。

如果业务代码中硬编码了旧模型名,模型下线后线上接口就会直接失败。


2. Deprecated 模型

Deprecated 不等于马上不能用。

它通常表示:

这个模型目前还能调用,但平台已经提醒未来会停止支持。

这是一段迁移窗口期。比较稳妥的做法是:

  1. 查官方推荐替代模型;
  2. 做最小请求验证;
  3. 做业务兼容性测试;
  4. 灰度切换;
  5. 再全量替换。

不要等到模型真正不可用后再紧急处理。


3. 模型改名或版本替换

有些平台会发布新版本模型,逐渐降低旧模型推荐度,甚至限制旧版本访问。

新旧模型之间不只是名字变化,还可能涉及:

  • 上下文长度变化;
  • 输入输出价格变化;
  • tools / function calling 能力变化;
  • JSON 输出能力变化;
  • 多模态能力变化;
  • 响应延迟变化;
  • 安全策略变化;
  • 参数兼容性变化。

所以生产环境里"换模型"不应该只改一个字符串。


4. Preview / Beta / Experimental 模型

模型名中带有以下字段时,需要更加谨慎:

复制代码
preview
beta
exp
日期后缀

这类模型可能是预览版、测试版、实验版,或者某个特定快照版本,通常变化更频繁。

可能出现:

  • 模型版本替换;
  • 访问权限变化;
  • 参数变化;
  • 模型名失效;
  • 只对部分账号开放。

生产环境如果依赖这类模型,建议提前配置 fallback,不要让核心业务只绑定一个不稳定的固定模型 ID。


五、最小化请求验证模型是否可用

下面使用 OpenAI 兼容接口举例。实际域名、路径和模型名以你使用的平台最新文档为准。

1. 测试当前模型

复制代码
curl "$BASE_URL/chat/completions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "your-model-id",
    "messages": [
      {
        "role": "user",
        "content": "ping"
      }
    ]
  }'

如果没有使用环境变量,也可以直接写完整地址:

复制代码
curl https://api.example.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "your-model-id",
    "messages": [
      {
        "role": "user",
        "content": "ping"
      }
    ]
  }'

这个请求只保留了最基础的字段:

  • model
  • messages

目的就是排除复杂参数影响,先确认模型本身能否被调用。


2. 换一个确认可用的稳定模型

model 换成平台文档中当前明确可用的稳定模型:

复制代码
curl https://api.example.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "known-available-model",
    "messages": [
      {
        "role": "user",
        "content": "ping"
      }
    ]
  }'

根据结果判断:

测试结果 可能原因
原模型失败,替代模型成功 原模型下线、改名、权限变化或中转映射异常
两个模型都返回 401 API Key、鉴权头、组织权限有问题
两个模型都返回 429 限流、额度、账单或并发限制
原模型提示 invalid model 模型 ID 无效、已下线或当前账号不可访问
最小请求成功,业务请求失败 参数、上下文、tools、stream、JSON 输出等不兼容

3. 查询当前账号可访问的模型列表

如果平台支持 /models 接口,可以进一步确认当前账号能访问哪些模型:

复制代码
curl https://api.example.com/v1/models \
  -H "Authorization: Bearer $API_KEY"

如果返回列表中没有你正在调用的模型 ID,重点排查:

  • 模型是否已经下线;
  • 当前账号是否失去权限;
  • 当前 project / region 是否不可用;
  • 中转平台是否不再映射该模型;
  • 模型是否已改名或替换版本。

六、7 步定位 AI API 调用失败原因

下面是一套适合生产故障现场使用的排查流程。


第 1 步:保存完整错误信息

不要只记录一句"API 调用失败"。

建议日志至少包含:

复制代码
provider
base_url
model
status_code
error.code
error.message
request_id
latency
fallback_model
retry_count
request_time
project / org / group

尤其是下面几个字段非常关键:

  • model
  • error.code
  • error.message
  • request_id
  • base_url

模型下线、权限变化、中转渠道异常,很多时候都要靠这些字段判断。


第 2 步:判断失败是否只集中在某个模型

先翻日志里的 model 字段。

如果只有某个模型失败,其他模型成功,大概率说明:

  • API Key 没问题;
  • 网络链路基本正常;
  • base_url 基本正确;
  • 鉴权链路基本可用。

这时优先检查:

  • 模型 ID 是否写死在代码里;
  • 是否仍在调用旧版本模型;
  • 是否使用了 preview / beta / exp 模型;
  • 控制台模型列表里是否还能看到该模型;
  • 中转平台是否仍然映射该模型。

第 3 步:使用同一个 Key 调用稳定模型

使用同一个 API_KEY,调用一个平台当前文档中明确可用的模型。

判断方式:

复制代码
其他模型成功,原模型失败:
  重点查原模型是否仍然可用。

所有模型都失败:
  重点查 API Key、余额、限流、网络、base_url。

只有复杂请求失败:
  重点查参数兼容性。

这一步可以快速区分是"账号链路问题"还是"单个模型问题"。


第 4 步:去掉复杂参数,用最小请求复现

如果业务请求里包含下面内容,建议先全部去掉:

  • tools
  • function calling
  • stream
  • JSON schema
  • 图片输入
  • 音频输入
  • 超长上下文
  • 自定义安全参数
  • 特殊响应格式

只保留:

复制代码
{
  "model": "your-model-id",
  "messages": [
    {
      "role": "user",
      "content": "ping"
    }
  ]
}

如果最小请求失败,模型本身不可用的可能性更高。

如果最小请求成功,而业务请求失败,则更可能是参数或能力不兼容。


第 5 步:检查控制台模型列表

优先去平台控制台查看当前账号可用模型列表。

重点确认:

  • 原模型 ID 是否还存在;
  • 当前账号是否有权限;
  • 当前项目是否支持该模型;
  • 当前区域是否支持该模型;
  • 是否出现弃用或迁移提示。

如果平台提供 API,也可以用 /models 接口做程序化确认。


第 6 步:查看公告、changelog 和状态页

模型下线、模型弃用、模型改名、权限调整,通常会出现在:

  • 官方公告;
  • changelog;
  • 控制台通知;
  • 邮件通知;
  • 文档更新记录。

服务过载、区域故障之类的问题,则更可能出现在状态页。

注意区分:

报错类型 更可能的方向
500503overloaded 服务异常、区域故障、过载
model_not_found 模型不存在、下线或无权限
invalid model 模型 ID 无效、拼写错误、不可访问
not available 模型不可用、权限或区域限制
no available channel 中转平台渠道或分组不可用

500503 不要直接认定为模型下线,应结合状态页和重试结果判断。


第 7 步:替换模型后做业务兼容性验证

确认原模型不可用后,不建议直接改模型名上线。

至少检查:

  • 响应格式是否一致;
  • 是否支持流式输出;
  • 是否支持 tools / function calling;
  • 是否支持 JSON 输出;
  • 是否支持 JSON schema;
  • 上下文长度是否满足业务;
  • 多模态能力是否一致;
  • 延迟是否可接受;
  • 成本是否符合预期;
  • 核心提示词是否需要调整;
  • 业务回归测试是否通过。

可以用下面的迁移检查表:

检查项 原模型 新模型 是否兼容
上下文长度
输入价格
输出价格
流式输出
JSON 输出
Tools / Function calling
视觉能力
平均延迟
安全策略
输出风格

线上业务建议先小流量灰度,确认日志正常、效果稳定、成本可控后,再逐步全量切换。


七、如果确认模型下线,迁移顺序建议

确认模型下线后,处理重点有两个:

  1. 先恢复服务;
  2. 避免替换模型后引入新的隐性故障。

推荐顺序如下:

1. 查官方推荐替代模型

不要盲目找一个名字相似的模型直接替换。

先查看:

  • 官方文档;
  • 模型列表;
  • 迁移公告;
  • changelog;
  • 控制台推荐。

2. 用最小请求确认新模型可调用

先用最小请求验证:

复制代码
curl https://api.example.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "new-model-id",
    "messages": [
      {
        "role": "user",
        "content": "ping"
      }
    ]
  }'

确认新模型至少能完成基础调用。


3. 验证上下文、价格和能力差异

重点确认:

  • 上下文长度是否够用;
  • 输入价格是否变化;
  • 输出价格是否变化;
  • 是否支持 stream;
  • 是否支持 tools / function calling;
  • 是否支持 JSON 输出;
  • 是否支持结构化输出或 schema;
  • 是否支持图片、音频等多模态能力。

具体价格、额度和能力范围要以平台最新说明为准。


4. 做灰度和回归测试

建议按下面流程上线:

复制代码
本地最小请求验证
  -> 测试环境业务请求验证
  -> 核心用例回归
  -> 小流量灰度
  -> 观察错误率、延迟、成本、输出质量
  -> 逐步全量切换

不要只看接口是否返回 200,还要看业务结果是否符合预期。


八、中转 API 需要额外排查什么?

如果使用的是 OpenAI 兼容中转 API、聚合平台,或者第三方 Claude API 兼容接入服务,需要多排查一层。

因为:

官方模型还存在,不代表中转平台当前一定可用。

中转 API 可能出现:

  • 上游渠道临时不可用;
  • 当前分组没有可用渠道;
  • 模型别名映射失败;
  • 当前套餐不支持这个模型;
  • 计费模式不匹配;
  • 上游返回错误被中转平台重新包装;
  • 官方模型调整后,中转平台尚未同步。

建议按顺序检查:

  1. 查看中转后台模型列表;
  2. 确认当前账号、分组、套餐是否有该模型权限;
  3. 检查模型别名是否映射到正确上游模型;
  4. 换一个平台明确支持的模型测试;
  5. 条件允许时,直连官方 API 做对照;
  6. 联系中转平台确认上游渠道状态。

对于中转链路,日志尤其重要。建议至少记录:

复制代码
provider
base_url
model
upstream_model
channel
group
status_code
error.code
error.message
request_id
retry_count
fallback_model

没有这些字段时,排查通常只能靠猜。


九、如何避免模型下线再次引发线上事故?

模型下线导致 API 调用失败,表面上是模型问题,实际上往往暴露了稳定性设计不足。

生产环境建议至少做好以下几点。


1. 不要在代码里硬编码具体模型名

尤其不要把下面这类模型名直接写死在业务代码中:

复制代码
preview
beta
exp
带日期后缀的模型 ID

更推荐放在:

  • 环境变量;
  • 配置中心;
  • 后台管理系统;
  • 数据库配置表;
  • 灰度配置系统。

这样模型变化时,只需要改配置,不需要重新发版。


2. 建立模型别名

业务代码中尽量使用语义化别名,例如:

复制代码
chat_default
fast_model
reasoning_model
vision_model
embedding_model

再在后台配置映射关系:

复制代码
chat_default    -> 具体聊天模型 ID
fast_model      -> 具体低延迟模型 ID
reasoning_model -> 具体推理模型 ID
vision_model    -> 具体视觉模型 ID
embedding_model -> 具体向量模型 ID

以后模型替换,只改映射,不改业务逻辑。


3. 配置 fallback

主模型失败时,可以切换备用模型。

但 fallback 不能只是简单重试另一个模型,还要确认:

  • 备用模型是否支持相同参数;
  • 是否支持 tools;
  • 是否支持结构化输出;
  • 是否支持同样上下文长度;
  • 输出质量是否能满足业务要求;
  • 成本和延迟是否可接受。

否则接口虽然成功返回,但业务结果可能已经发生变化。


4. 做模型健康检查

可以定时用最小请求检测核心模型:

复制代码
curl https://api.example.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "core-model-id",
    "messages": [
      {
        "role": "user",
        "content": "ping"
      }
    ]
  }'

当出现下面错误时触发告警:

复制代码
model_not_found
invalid model
not available
no available channel

这种监控实现简单,但能在用户大量报错前提前发现问题。


5. 标准化日志字段

推荐每次请求至少记录:

复制代码
provider
base_url
model
status_code
error.code
error.message
request_id
latency
fallback_model
retry_count

如果使用中转平台,还可以增加:

复制代码
channel
group
upstream_model

排查 AI API 调用失败时,这些字段比单纯记录"调用失败"有用得多。


6. 订阅公告和更新日志

模型弃用、接口调整、价格变化、权限变化,通常会通过以下渠道提前发布:

  • 公告;
  • 邮件;
  • 控制台通知;
  • changelog;
  • 文档更新记录。

生产环境依赖的模型,建议定期检查生命周期状态,不要等线上报错后才发现模型已经进入退役周期。


十、排查口诀

最后总结成几句话:

复制代码
所有模型都失败,先查 Key、额度、网络和 base_url。
只有一个模型失败,先查模型名、权限和下线公告。
昨天能用今天不能用,重点怀疑模型下线、改名或渠道变化。
500、503 不要直接认定模型下线,先看状态页和重试结果。
生产环境不要硬编码 preview 模型,模型别名、健康检查和 fallback 要提前准备。

下次遇到 model_not_foundinvalid model 或类似 API 报错时,不要只盯着业务代码。很多时候,真正的问题是:你调用的那个模型,已经不在原来的位置了。

如果需要了解 ClaudeAPI 这类第三方 Claude API 兼容接入服务,可看下图,具体支持模型和价格以官网最新说明为准。