StackTraces
Spring AI已验证

Spring AI 接 Ollama 报 model not found

@debug_master32 天前更新阅读 6 min00

model not found, try pulling it first 的意思很直接:Spring AI 已经把请求发给 Ollama 了,但 Ollama 本机没有这个模型。别先改 Bean、别先改 prompt,先跑一遍 ollama list。

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

  • 业务场景:用 Spring AI 对接本地 Ollama,想切到 llama3.1、deepseek-r1 或 embedding 模型,结果一调用就失败。
  • 常见环境:macOS / Linux 本地开发机,Ollama 已安装并启动,但没有提前把对应模型拉到本地。

StackTrace(堆栈日志)

报错原文来自 Ollama 服务端:

Error: model "llama3.1" not found, try pulling it first

自然,Spring AI 不会原样把这段话透传出来,而是包成框架异常往外抛。完整堆栈是:

org.springframework.ai.SpringAIFrameworkException: model "llama3.1" not found, try pulling it first
    at org.springframework.ai.ollama.api.OllamaApi.chat(OllamaApi.java:103)
    at org.springframework.ai.ollama.OllamaChatModel.call(OllamaChatModel.java:158)
    at com.example.service.OllamaService.ask(OllamaService.java:24)
    at com.example.controller.OllamaController.chat(OllamaController.java:42)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
Caused by: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:70)
    at org.springframework.web.client.RestClient$DefaultRestClientBuilder$DefaultRequestUriSpec.lambda$retrieve$0(RestClient.java:388)

最上面是 Spring AI 的框架异常,Caused by 才是 Ollama 服务端返回的原始 400。只要看到 model "..." not found 这句话,问题就出在本地模型仓库,别往 Bean 或 prompt 上绕。

Reproduce(复现代码)

配置一个本地还没下载过的模型:

spring:
  ai:
    ollama:
      chat:
        options:
          model: llama3.1

或者 embedding 配成:

spring:
  ai:
    ollama:
      embedding:
        options:
          model: nomic-embed-text

如果当前机器上没 pull 过这个模型,第一次调用就会失败。

Root Cause(根因分析)

Ollama 和云模型不一样。它不是你写了模型名就能远程自动推断,而是要求本机已经存在该模型文件,或者应用显式打开自动拉取能力。

这类错误最常见有三个根因:

1. 模型从没 pull 过

这是最常见情况。Spring AI 请求到 Ollama 时,Ollama 会去本地模型仓库找对应模型;找不到就直接报 model not found。

2. 模型名写对了主名,写错了 tag

很多人只记得 llama3.1、deepseek-r1 这类主名,但实际要用的 tag 可能是 8b、70b、latest 或别的量化版本。如果你配置和本地实际存在的 tag 对不上,也会报“找不到模型”。

3. 以为 Spring AI 默认会自动 pull

Spring AI 文档里单独提供了 Auto-pulling Models 章节,说明自动拉取是显式能力,不是默认心智。你如果没配置自动拉取,框架不会替你默默下载几十 GB 的模型。

The Fix(解决方案)

先用 ollama list 看本地到底有什么

第一步永远是:

ollama list

如果输出里根本没有你配置的模型名,那问题就已经坐实了。

手动 pull 最稳

比如你要用 llama3.1:

ollama pull llama3.1

要用 embedding:

ollama pull nomic-embed-text

拉完后再跑一次:

ollama list

确认模型真的落在本地,再回到 Spring AI。

模型名和 tag 要和本地一致

如果你本地实际拉的是:

llama3.1:8b

那 Spring AI 里最好也明确写成:

spring:
  ai:
    ollama:
      chat:
        options:
          model: llama3.1:8b

不要赌 latest 或默认 tag。

需要时再打开 auto-pulling

Spring AI 官方文档已经给了 Auto-pulling Models 章节。这个能力适合本地开发、临时环境或演示环境;如果你在生产环境打开它,要提前评估网络、磁盘和启动时间,因为模型下载不是轻操作。

小结

  • model not found, try pulling it first 本质是 Ollama 本地没有这个模型。
  • 先查 ollama list,再决定是手动 pull 还是打开自动拉取。
  • 模型主名对了,不代表 tag 也对;最好把完整模型名写进配置。
  • 这类问题通常不是 Spring AI Bean 配错,而是本地模型仓库状态不对。

References(参考来源)

最后更新于 2026-09-09

这篇帮到你了吗?

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

贡献一条解法