延續前一篇《Spring AI 核心組件與設計理念》,
今天我們不再依賴雲端 API,而是在 本機端運行 AI 模型!
Ollama 是一款可以在本地運行各種開源 LLM(如 Llama 3、Mistral、Phi 等)的工具,
支援 macOS、Linux、Windows(需 WSL2),可離線執行、免上雲端、資料不外流。
它最大的特點是:
ollama pull llama3)http://localhost:11434)前往官網下載安裝(https://ollama.ai/download)
或使用命令列安裝(macOS / Linux):
curl -fsSL https://ollama.com/install.sh | sh
Ollama 安裝後會自動啟動本地伺服器,預設埠號為 11434。
你可以透過下列指令確認是否正常運作:
ollama list
ollama run llama3
第一次執行時會自動下載模型(需一些時間)。
執行成功後會進入互動模式,你可以輸入訊息測試模型是否能回覆。
接下來,我們要修改專案,讓 Spring AI 使用 Ollama 作為後端 Provider。
在 pom.xml 加入 Ollama 依賴模組:
<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
application.ymlspring:
  ai:
    ollama:
      base-url: http://10.0.0.207:11434
這樣就設定好 Spring AI 的 Ollama 客戶端了!
package com.example.it_spring_chat;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.ai.ollama.api.OllamaApi;
import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class ChatController {
    
    @PostMapping("/chat")
    public String chat(@RequestParam String message) {
                var ollamaApi = OllamaApi.builder().baseUrl("baseUR").build();
        var chatModel  = OllamaChatModel.builder()
                .ollamaApi(ollamaApi)
                .defaultOptions(
                        OllamaOptions.builder()
                                .model("gemma3:12b")
                                .temperature(0.9)
                                .build())
                .build();
        ChatResponse response = chatModel.call(
                new Prompt(message));
        return response.getResult().getOutput().getText();
    }
}
執行應用後,你可以呼叫:
http://10.0.0.207:8080/api/chat?message=介紹一下你自己
💬 回覆就會由你本機的模型生成!
如果想要用串流輸出則可以使用.stream()
// Or with streaming responses
Flux<ChatResponse> response = chatModel.stream(
    new Prompt("Generate the names of 5 famous pirates."));
| 問題 | 原因 | 解法 | 
|---|---|---|
Connection refused | 
Ollama 沒啟動 | 執行 ollama serve 啟動伺服器 | 
| 回覆速度慢 | 模型初次載入或 VRAM 不足 | 先行預載模型,或使用輕量模型(如 phi3) | 
| CPU 占用高 | 預設使用 GPU/CPU 混合模式 | 可設定環境變數 OLLAMA_NUM_THREADS 調整 | 
下一篇我們將進一步讓你的應用具備「知識檢索能力」,
使用 Spring AI + Redis VectorStore 建立一個本地知識查詢 AI