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(參考來源)
- Ollama Chat — Spring AI 官方文檔spring-docs
- Ollama Downloadollama-docs
- Ollama Model Libraryollama-docs
