OpenAI API 400 invalid model 怎么解决?
简答:OpenAI API 返回 400 invalid model,最常见原因是 model 值不是当前接口可用的准确 ID,或请求发到了错误的 Base URL。先调用 <code>GET /v1/models</code> 查看当前 API Key 可见的模型,再把返回的 <code>id</code> 原样用于最小请求;如果仍失败,再检查项目权限、端点和请求体。本文为第三方 AI API 接入指南,不代表任何平台官方。
定义:400 invalid model 是模型请求参数未被当前 API 请求正确接受的提示,具体原因必须结合响应体中的 error.message、error.code 和 error.param 判断。
先做这三步:确认模型 ID,再发送最小请求
不要先更换 SDK、重复重试或盲目修改多个参数。按下面顺序排查,通常可以先判断问题是在模型名称、API 地址,还是项目权限。
- 列出当前 Key 可见的模型:向当前服务的模型列表接口发送请求。OpenAI 直连时,官方接口路径是
GET /v1/models,响应中的data[].id才是可以继续核对的模型标识。OpenAI List models API - 复制准确的 ID:不要把 ChatGPT 界面名称、第三方网关的模型别名、旧教程中的模型名或带有其他平台前缀的字符串直接放进
model。模型 ID 区分大小写和字符格式,示例值必须以当前列表结果为准。 - 只保留最小参数:先去掉工具、流式输出、结构化输出、温度和复杂消息,使用当前模型支持的最小文本请求。成功后再逐项加回业务参数。
| 检查项 | 应核对什么 | 发现异常时怎么做 |
|---|---|---|
| model | 是否来自当前 Key 可见的模型列表 | 复制返回的 id,不要凭记忆填写 |
| Base URL | 是否与 Key 所属平台匹配 | 直连接口不要把第三方模型名发到 OpenAI 端点 |
| 项目与权限 | Key 所属 Project 是否能访问该模型 | 换用同一项目可见的模型,或查看控制台权限 |
| 请求体 | 端点要求的字段是否正确 | 先恢复到最小请求,再逐项增加参数 |
| 响应体 | error.message、error.code、error.param | 按服务端实际提示归因,不只看 400 |
用 /v1/models 验证当前 API Key 能看到什么
模型目录会变化,旧文章中的模型名不能自动视为当前可用。官方模型列表接口会返回模型的 id、创建时间、所有者以及可能存在的 shutdown_date 等字段,因此适合用于排查硬编码模型名是否仍然有效。
OpenAI 直连的脱敏检查命令可以写成:curl https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"。不要把完整 Key 写进文章、截图、日志或命令历史;如果使用兼容接口,应把域名替换为该服务当前文档提供的 Base URL,并从同一服务获取模型列表。
如果列表请求本身返回 401,先处理 Key 或认证问题;如果返回 403,重点查看项目、组织、区域或访问权限;如果列表成功但目标模型不在 data 中,不要继续猜测模型名,应改用列表中实际可见的模型,或者核对当前 Key 所属项目。
需要注意:invalid model、invalid model ID、model_not_found 和 model_not_allowed 并不是所有平台都采用完全相同的错误分类。OpenAI 官方建议查看错误消息和具体参数;不同兼容网关可能把模型不存在、模型不可用和权限问题映射为不同的 HTTP 状态码。OpenAI API 错误码说明
常见模型名错误:为什么看起来正确仍会失败
- 把产品名称当成 API 模型 ID:聊天产品中的名称、套餐名称或界面标签,不一定等于 API 的
model字段。应以模型目录或当前接口文档中的 Model ID 为准。 - 混用不同平台的命名格式:某些路由服务会使用“提供商/模型”的命名方式,而直连接口可能要求不带该前缀的 ID。不要把一个平台的字符串直接复制到另一个平台。
- 沿用已弃用或已关闭的旧模型:官方模型页面会标注模型状态,模型列表还可能提供关闭日期。旧教程中的模型名需要重新核验,不能因为曾经成功调用过就认为现在仍可用。OpenAI 全部模型目录
- 拼写、大小写或隐藏字符错误:从环境变量、配置文件或表单读取模型名时,检查前后空格、换行符、引号和自动补全内容。日志只打印脱敏后的模型字符串,不要打印 Key。
- 把 Azure 或其他兼容接口的部署名当成直连模型 ID:不同服务可能把部署名称、模型 ID 和 API 版本分别处理。使用哪种接口,就以该接口的官方文档为准,不要混用路径和参数。
Responses API 和 Chat Completions 怎么分别修复
当前新项目可以优先核对 Responses API;Chat Completions 仍然支持,但两者的请求字段和响应读取方式不同。官方迁移文档说明,Responses 使用 /v1/responses、input 和 output_text,Chat Completions 使用 /v1/chat/completions、messages 和 choices[0].message.content。OpenAI Responses API 迁移说明
Responses API 的最小 curl 示例:curl https://api.openai.com/v1/responses -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d '{"model":"$MODEL_ID","input":"Say hello"}'。这里的 $MODEL_ID 是示例占位符,发送前必须替换为当前模型列表中实际返回的 ID;Shell 单引号下变量不会展开时,请改用安全的 JSON 生成方式或直接填入已核验的模型 ID。
Python SDK 示例:from openai import OpenAI; client = OpenAI(); response = client.responses.create(model="MODEL_ID_FROM_MODELS", input="Say hello"); print(response.output_text)。示例中的模型值不是固定推荐值,需先完成模型列表核验。官方 Python 文档还说明,非成功 HTTP 响应会抛出对应的状态异常,失败请求的请求 ID 应在捕获异常时记录。OpenAI Python API Reference
JavaScript SDK 示例:import OpenAI from "openai"; const client = new OpenAI(); const response = await client.responses.create({ model: "MODEL_ID_FROM_MODELS", input: "Say hello" }); console.log(response.output_text);。如果你的程序仍使用 Chat Completions,请确认代码读取的是 completion.choices[0].message.content,不要把 Responses 的读取方式直接套到旧接口上。
如果最小请求成功,再按顺序恢复系统指令、历史消息、工具、结构化输出和流式参数。某些参数支持情况会随模型而不同,调用失败时应查看对应接口的参数说明,而不是仅仅替换模型名称。OpenAI Chat Completions API Reference
按响应体区分 invalid model、404 和权限问题
| 现象 | 优先检查 | 处理方法 |
|---|---|---|
| 400,消息包含 invalid model 或无效参数 | model、端点、请求体字段和格式 | 用模型列表核对 ID,再发送最小请求 |
| 404,提示资源或模型不存在 | 最终 URL、路径、模型标识和服务类型 | 确认没有重复或遗漏 /v1,并核对该接口的模型格式 |
| 403,提示禁止或无权限 | Project、组织、区域和模型访问权限 | 查看控制台权限或改用当前项目可访问的模型 |
| 401,认证失败 | Key、Authorization 头和请求平台 | 确认 Key 与 Base URL 属于同一服务,不要把 Key 写入日志 |
| 429,限流或额度问题 | 请求频率、额度和响应头 | 按官方提示处理限流或额度,不要把它误判成模型名错误 |
上表是排查顺序,不是对所有兼容平台错误码的固定定义。最终归因应以响应状态、响应体、响应头和服务端日志为准。400 参数错误在请求没有修改前通常不应重复重试;先改正模型或请求字段,再重新发送。
仍然失败时,记录哪些信息才方便定位
- 记录核验日期:2026 年 11 月 1 日,以及使用的服务、区域和接口类型。
- 记录脱敏后的最终 URL、HTTP 方法、模型字符串、端点名称和 SDK 版本;不要记录完整 API Key。
- 保存响应状态码、
error.message、error.code、error.param、响应头中的请求 ID,以及发生时间和时区。 - 保留最小请求体,删除用户隐私、业务数据、Authorization 值和其他密钥。
- 将“官方规则”和“经验线索”分开:官方文档明确支持的字段可以直接核对;第三方兼容网关的模型映射、权限规则和错误码含义必须向该服务核实。
如果你使用的是路由或兼容服务,最有效的闭环是:先在该服务控制台复制 Base URL 和模型 ID,再用同一服务的模型列表或模型目录核验,最后发送一个不含业务数据的最小请求。不要把直连接口的模型名、路径和参数组合直接迁移过去。
常见问题
OpenAI API 400 invalid model 最常见的原因是什么?
最常见是 model 值拼写错误、使用了旧模型名、混入其他平台前缀,或把一个服务的模型名发送到了另一个服务的 Base URL。先用当前 Key 调用模型列表,再复制返回的 ID。
应该从哪里确认正确的 OpenAI API 模型名?
优先使用当前 Key 可访问的模型列表接口,读取响应中的 data[].id;同时参考官方模型目录确认模型状态。不要只根据聊天产品名称、旧教程或第三方平台下拉菜单填写。
invalid model 和 model_not_found 是同一个错误吗?
不能直接视为同一个错误。不同接口或兼容网关可能使用不同的错误码和 HTTP 状态,必须结合状态码、error.message、error.code、error.param 以及最终 URL 判断。
为什么 /v1/models 能成功,但调用模型仍返回 400?
可能是调用时使用了列表中不存在的另一个字符串、请求发往了不同 Base URL、模型与端点或参数不兼容,也可能是代码读取了错误的环境变量。请打印脱敏后的最终 URL 和 model,并重建最小请求。
遇到 400 invalid model 要不要自动重试?
如果请求参数没有改变,不建议盲目重试。400 通常需要先修正模型、端点或请求字段;只有确认参数已修复后,才重新发送请求。
第三方 OpenAI 兼容接口也能使用 /v1/models 吗?
是否支持、路径如何填写以及返回字段如何命名,要以该服务的文档为准。不要默认所有兼容接口都完全实现同一模型列表接口;先从对应服务控制台或文档复制 Base URL 和模型 ID。
相关阅读
- 继续看 OpenAI API 404 model not found 的区别与排查
- 如果同时出现 401,请按 Key 和认证头排查
- 不确定 Base URL、/v1 和接口路径怎么填?
- 再核对 OpenAI 兼容接口的 Key、模型名和调用流程
- 如果你是在 Dify 中调用,查看模型名与接口映射排查