OpenAI API 404 模型不存在怎么解决?
简答:如果 OpenAI API 返回 404,先不要盲目更换模型:错误 message 提到 model 或资源标识时,使用同一个 API Key 调用 /v1/models;如果 message 指向 URL 或路径,则检查 Base URL、/v1 和 endpoint 拼接。拿到可见模型的 id 后,再用 MODEL_ID 发起最小请求,通常能快速判断是模型、路径还是权限配置问题。
定义:OpenAI API 的 404 模型错误,是请求中的模型标识或其他资源无法被当前请求解析;它不等于所有 HTTP 404 都是模型名称错误。
30 秒速查:先对上你的 404 类型
本站为第三方指南,非 OpenAI 官方,以其官网为准。看到 404 时,先完整保存 HTTP 状态码和 JSON 响应,再看 message 是否明确提到 model、资源 ID、URL 或路径。下面的 JSON 仅用于展示判断方法,字段和原文可能随接口或客户端不同而变化。
| 响应中出现的线索 | 先检查什么 | 可执行动作 |
|---|---|---|
message 提到 model、模型 ID 或资源不可用 | model 字符串、当前 Key 可见模型、项目范围 | 用同一个 Key 调用 /v1/models,复制返回对象的 id |
message 指向 URL、路径或 endpoint | Base URL、是否重复或缺少 /v1、接口路径 | 记录最终请求 URL,对照 API Reference 检查 endpoint |
| 实际返回 401、403、400 或 429 | 认证、权限、请求格式或限流 | 按实际状态码处理,不继续把问题当作 404 模型错误 |
官方错误文档将 NotFoundError 解释为请求资源不存在,将 PermissionDeniedError 解释为没有访问请求资源的权限;因此,404 本身不能证明一定是模型拼写错误。查看 OpenAI 错误代码说明。
模型线索示例:
{"error":{"message":"The requested model or resource is not available to this request","type":"...","param":null,"code":"..."}}
路径线索示例:
{"error":{"message":"Invalid URL or endpoint path","type":"...","param":null,"code":"..."}}
上面两段是占位示意,不是官方承诺的固定响应文本。判断重点是错误 message 实际指向模型资源,还是指向 URL、路径或 endpoint。
先跑这一条:用同一个 Key 列出可访问模型
OpenAI 的 List models 接口是 GET /v1/models,返回模型对象中的 id 是可以用于 API endpoint 的模型标识。先列模型,再把返回的 id 复制到生成请求中,比凭记忆填写模型名称更可靠。查看官方 List models 参考。
curl -sS https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"
- 命令需要在已经设置
OPENAI_API_KEY的同一终端中运行。 - 列模型请求和后续生成请求必须使用同一个 API Key、Base URL、组织和项目范围。
- 从返回 JSON 的
data数组中复制完整的id,不要复制模型标题、说明文字、前后空格或换行。 - 如果这一步返回 401 或 403,先处理密钥、组织、项目或权限问题;此时继续修改
model通常没有帮助。
模型对象的公开字段包括 id、created、object、owned_by,当前参考还列出了可选的 shutdown_date 字段。因此,旧代码中的模型名不能自动视为当前仍可用,应以当前接口返回和模型目录为准。核对模型列表字段。
用 MODEL_ID 发起最小请求,不要直接猜模型名
从 /v1/models 得到实际模型 ID 后,把它保存为 MODEL_ID,再测试一个最小 Responses 请求。下面的单行命令不含密钥,也不假设某个具体模型一定存在:
curl -sS -i https://api.openai.com/v1/responses -H "Content-Type: application/json" -H "Authorization: Bearer $OPENAI_API_KEY" -d '{"model":"MODEL_ID","input":"Reply with OK"}'
请将 MODEL_ID 替换为同一个 Key 从模型列表中看到的实际 id。Responses API 使用 /v1/responses,请求体包含 model 和 input;官方迁移说明也明确区分了 /v1/chat/completions 与 /v1/responses。查看 Responses 创建接口 查看接口迁移说明。
如果你使用 Python SDK,可以先用同一个环境变量运行这个最小示例。示例中的模型仍然是占位符,必须替换为你的模型列表中实际存在的 ID:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(model="MODEL_ID", input="Reply with OK")
print(response.output_text)
官方 Python 参考使用 client.responses.create 发送请求,并通过 response.output_text 读取文本结果。查看官方 Python API 参考。
按顺序排查模型、Base URL、Key 和项目
- 确认实际发送的 model。在调试日志中只记录请求体里的
model字符串,不要记录 API Key。检查大小写、前后空格、换行、旧版本后缀,以及是否把网页展示名误填进了模型字段。模型列表接口的id才是后续 endpoint 使用的模型标识。核对模型 ID 定义。 - 确认两次请求使用同一个身份范围。列模型和生成请求不能一个使用新 Key、另一个使用旧 Key,也不能一个请求发往官方 API、另一个发往兼容网关。官方 API 支持通过
OpenAI-Organization和OpenAI-Project请求头指定组织和项目。查看认证、组织和项目请求头。 - 检查 Base URL 是否只拼接一次版本路径。官方 REST API 当前使用
v1,例如 Responses 请求的完整路径是https://api.openai.com/v1/responses。如果 SDK 的base_url已经包含/v1,就不要再让客户端重复追加;如果 Base URL 已经是完整 endpoint,也不要再次拼接/responses。查看官方 API Reference 总览。 - 确认接口类型一致。Chat Completions 使用
/v1/chat/completions和messages;Responses 使用/v1/responses和input。不要只替换模型名,却保留另一种接口的 URL 或请求体。查看 Chat Completions 与 Responses 的区别。 - 最后处理模型停用或不可见。如果过去能调用、现在模型列表不再返回对应 ID,先以当前模型列表和目录信息为准,再检查项目设置或联系项目管理员。List models 参考列出了模型可用性相关的基础信息和可选的
shutdown_date字段。查看模型可用性字段。
官方 OpenAI、Azure 和兼容接口不要混填
| 接入方式 | model 通常应填写 | 404 时先核对 |
|---|---|---|
| 官方 OpenAI API | 同一个 Key 调用 /v1/models 返回的模型 id | 官方 Base URL、模型列表、组织和项目 |
| Azure OpenAI | 部署名称,而不是直接假定使用官方模型名 | Azure endpoint、deployment name、API 版本和认证方式 |
| 第三方 OpenAI 兼容接口 | 该服务文档或模型列表定义的模型名 | 该服务的 Base URL、模型目录、认证头和路径 |
| 本地网关或路由器 | 路由配置中映射的模型名 | 路由规则、上游模型名和网关最终请求日志 |
Azure 官方说明明确指出,OpenAI API 使用模型名,而 Azure OpenAI API 调用需要部署名,即使请求字段仍然叫 model。因此,不要把官方 OpenAI 的模型 ID 直接复制到 Azure 部署配置中。查看 Microsoft 的 endpoint 切换说明。
“OpenAI 兼容”只表示接口形状可能相似,不代表模型目录、权限体系、Base URL 和错误结构完全一致。使用其他服务时,应以该服务自己的模型列表和接口文档为准。
排查结束前的最终清单
- 模型:请求体中的
model是否与当前 Key 的模型列表返回的id完全一致? - Base URL:是否发往预期服务,是否重复或缺少
/v1? - 路径:Responses 是否使用
/responses,Chat Completions 是否使用/chat/completions? - Key:列模型和生成请求是否使用同一个密钥与环境变量?
- 项目:是否指定了正确的组织和项目,是否存在项目级访问限制?
- 请求体:接口路径与
model、input或messages是否匹配? - 状态码:如果实际返回 401、403、400 或 429,应转到认证、权限、请求格式或限流排查,而不是继续按 404 处理。查看官方错误分类。
- 支持信息:持续报错时保存模型、错误文本、请求数据、请求时间和时区,并删除 API Key 等敏感内容。查看官方持续错误排查建议。
常见问题
为什么 /v1/models 能看到模型,生成请求仍然返回 404?
先比较两次请求的 API Key、Base URL、组织、项目和实际 model 值。最常见的定位方向是:列模型请求发往一个服务,而生成请求发往另一个网关;或者代码里发送的模型字符串并不是列表返回的完整 id。模型列表接口返回的 id 才是后续请求应核对的值。查看 List models 参考。
网上看到的模型名可以直接填进 model 吗?
不建议。示例模型名不等于你的 API Key 当前可访问,也不等于所有接口都支持。使用占位符 MODEL_ID,先从当前请求范围的模型列表复制实际 id,再发起最小请求。
404 模型错误和 403 权限错误怎么区分?
404 侧重检查请求资源或标识是否存在,403 则应重点检查是否有权访问该资源。官方错误文档将 NotFoundError 与 PermissionDeniedError 分开说明,所以看到 403 时不要只更换模型名,应核对 API Key、组织、项目和资源权限。查看官方错误类型。
SDK 配置 base_url 后变成普通 404,怎么办?
记录最终请求 URL,检查 Base URL 是否已经包含 /v1,客户端是否会自动追加版本路径,以及是否把完整 endpoint 再次拼接了一遍。如果错误 message 指向 URL、路径或 endpoint,而不是 model,应先修正地址和接口路径。API Reference 总览提供了 endpoint、认证和调试请求说明。查看 API Reference 总览。
常见问题
OpenAI API 404 模型不存在的第一步是什么?
使用同一个 API Key 调用 /v1/models,确认目标模型的实际 id 是否出现在返回列表中;不要先凭记忆更换模型名。
模型 ID 在列表中,为什么请求仍然 404?
比较列模型与生成请求的 API Key、Base URL、组织、项目和实际 model 值,并检查是否重复或缺少 /v1,以及是否混用了 Responses 和 Chat Completions 路径。
Azure OpenAI 可以直接使用官方模型 ID 吗?
不能直接假定。Azure 官方说明 API 调用需要使用部署名称,即使请求字段仍然叫 model;应以 Azure endpoint 和 deployment 配置为准。
普通路径 404 怎么判断?
如果错误 message 指向 URL、路径或 endpoint,而不是 model 或模型资源,先记录最终请求 URL,再检查 Base URL、/v1 和具体 endpoint。
相关阅读
参考资料
- Error codes | OpenAI API
- List models | OpenAI API Reference
- API Overview | OpenAI API Reference
- Create a model response | OpenAI API Reference
- OpenAI Python API library | OpenAI API Reference
- Migrate to the Responses API | OpenAI API
- How to switch between OpenAI and Azure OpenAI endpoints | Microsoft Learn
