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

這篇幫到你了嗎?

剛解決了一個棘手的報錯?花兩分鐘記錄下來,幫助下一個遇到同樣問題的開發者。

貢獻一條解法