StackTraces
Spring AI已验证

Spring AI 报 404 model_not_found:配置 key 写错

@debug_master32 天前更新阅读 6 min00

报 404 model_not_found、The model gpt-4o does not exist or you do not have access to it,先别急着怀疑模型挂了。九成是两件事:模型名写进了一个不生效的配置 key,被静默忽略、回退到默认 gpt-4o;或者你的 key 根本没权限访问这个模型。

Issue & Env(案发现场与环境)

  • 业务场景:Spring AI 接 OpenAI,调 ChatClient 生成文本,调用时抛 404。
  • 环境:Spring AI 1.x(内置默认模型是 gpt-4o),Spring Boot 3.x,JDK 17+,OpenAI 官方 API。

StackTrace(堆栈日志)

报错原文是 OpenAI 返回的 404 JSON 响应:

{
    "error": {
        "message": "The model `gpt-4o` does not exist or you do not have access to it.",
        "type": "invalid_request_error",
        "param": null,
        "code": "model_not_found"
    }
}

Spring AI 拿到这个 404 后,会把它包成不可重试异常重新抛出。完整堆栈如下:

org.springframework.ai.retry.NonTransientAiException: 404 - {
    "error": {
        "message": "The model `gpt-4o` does not exist or you do not have access to it.",
        "type": "invalid_request_error",
        "param": null,
        "code": "model_not_found"
    }
}
    at org.springframework.ai.retry.RetryUtils.defaultTransientCallback(RetryUtils.java:67)
    at org.springframework.ai.openai.OpenAiChatModel.call(OpenAiChatModel.java:664)
    at org.springframework.ai.chat.client.DefaultChatClient$DefaultChatClientRequestSpec.call(DefaultChatClient.java:377)
    at com.example.service.ChatService.ask(ChatService.java:31)
    at com.example.controller.ChatController.chat(ChatController.java:45)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)

Reproduce(复现代码)

最常见的踩法:你想用 gpt-3.5-turbo,却把模型名写进了一个不生效的 key:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      model: gpt-3.5-turbo   # 这个 key 不生效

然后照常调用:

String answer = chatClient.prompt()
    .user("hello")
    .call()
    .content();

报错里出现的却是 gpt-4o,而不是你配的 gpt-3.5-turbo。

Root Cause(根因分析)

坑 1:模型配置 key 写错,被静默忽略

Spring AI 里模型名的正确路径是 spring.ai.openai.chat.options.model,不是顶层的 spring.ai.openai.model。后者框架根本不读,等于白写。配置设了没生效,就回退到内置默认模型,而 Spring AI 1.x 的默认值是 gpt-4o,于是请求打到了 gpt-4o 上。

如果你的账户还没开通 gpt-4o,或者 key 没有这个模型的权限,就直接 404。报错里冒出个你从没配过的模型名,基本都是这条线:配置没进对 key,回退默认值。这也和 issue #3857 一致——model_not_found 被归类为不可重试错误(NonTransientAiException),框架知道这不是临时故障,重试没用。

坑 2:账户确实没有该模型的访问权限

文案是「does not exist or you do not have access to it」,两个状态被故意合并成一句。OpenAI 借此掩盖「模型不存在」和「你没权限」,防止别人拿报错去探测模型目录。所以即便模型名写对了,账户 tier 不够、或项目里没给这个 key 开该模型权限,同样是这句 404。

The Fix(解决方案)

先把模型名配进正确的 key:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o-mini

chat.options.model 才是有效路径。再排查权限:

  1. 用同一个 key 调 /v1/models,看它能列到哪些模型:

    curl https://api.openai.com/v1/models \
      -H "Authorization: Bearer $OPENAI_API_KEY"
  2. 想用 gpt-4o 但列表里没有,多半是 billing tier 不够。去 OpenAI 后台提升 tier,或在项目里给这个 key 加模型权限。

  3. 开发期用 gpt-4o-mini,它便宜且默认有权限,别一上来就 gpt-4o。

References(参考来源)

最后更新于 2026-09-09

这篇帮到你了吗?

刚解决了一个棘手的报错?花两分钟记录下来,帮助下一个遇到同样问题的开发者。

贡献一条解法