Ollama 聊天

藉助 Ollama,您可以在本地執行各種大型語言模型(LLM)並從中生成文字。Spring AI 透過 OllamaChatModel API 支援 Ollama 聊天完成功能。

Ollama 也提供一個與 OpenAI API 相容的端點。 OpenAI API 相容性 部分解釋瞭如何使用 Spring AI OpenAI 連線到 Ollama 伺服器。

先決條件

您首先需要訪問一個 Ollama 例項。有幾種選擇,包括以下內容:

您可以從 Ollama 模型庫 中拉取您希望在應用程式中使用的模型。

ollama pull <model-name>

您還可以拉取數千個免費的 GGUF Hugging Face 模型

ollama pull hf.co/<username>/<model-repository>

或者,您可以啟用自動下載所需模型的選項:自動拉取模型

自動配置

Spring AI 自動配置、啟動模組的工件名稱發生了重大變化。請參閱 升級說明 以獲取更多資訊。

Spring AI 為 Ollama 聊天整合提供了 Spring Boot 自動配置。要啟用它,請將以下依賴項新增到您的專案的 Maven pom.xml 或 Gradle build.gradle 構建檔案中。

  • Maven

  • Gradle

<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-ollama'
}
請參閱 依賴項管理 部分,將 Spring AI BOM 新增到您的構建檔案中。

基本屬性

字首 spring.ai.ollama 是配置與 Ollama 連線的屬性字首。

財產

描述

預設值

spring.ai.ollama.base-url

Ollama API 伺服器執行的基本 URL。

https://:11434

以下是用於初始化 Ollama 整合和自動拉取模型的屬性。

財產

描述

預設值

spring.ai.ollama.init.pull-model-strategy

是否在啟動時拉取模型以及如何拉取。

從不

spring.ai.ollama.init.timeout

等待模型被拉取的時間。

5m

spring.ai.ollama.init.max-retries

模型拉取操作的最大重試次數。

0

spring.ai.ollama.init.chat.include

在初始化任務中包含此型別的模型。

true

spring.ai.ollama.init.chat.additional-models

除了透過預設屬性配置的模型外,還需要初始化的其他模型。

[]

聊天屬性

聊天自動配置的啟用和停用現在透過以spring.ai.model.chat為字首的頂級屬性進行配置。

要啟用,請設定 spring.ai.model.chat=ollama(預設已啟用)

要停用,請設定 spring.ai.model.chat=none(或任何與 ollama 不匹配的值)

此更改是為了允許配置多個模型。

字首 spring.ai.ollama.chat.options 是配置 Ollama 聊天模型的屬性字首。它包括 Ollama 請求(高階)引數,例如 modelkeep-aliveformat,以及 Ollama 模型 options 屬性。

以下是 Ollama 聊天模型的高階請求引數

財產

描述

預設值

spring.ai.ollama.chat.enabled (已刪除且不再有效)

啟用 Ollama 聊天模型。

true

spring.ai.model.chat

啟用 Ollama 聊天模型。

ollama

spring.ai.ollama.chat.options.model

要使用的支援的模型名稱。

mistral

spring.ai.ollama.chat.options.format

返回響應的格式。目前,唯一接受的值是 json

-

spring.ai.ollama.chat.options.keep_alive

控制模型在請求後在記憶體中載入的時間

5m

其餘的 options 屬性基於 Ollama 有效引數和值 以及 Ollama 型別。預設值基於 Ollama 型別預設值

財產

描述

預設值

spring.ai.ollama.chat.options.numa

是否使用 NUMA。

spring.ai.ollama.chat.options.num-ctx

設定用於生成下一個標記的上下文視窗大小。

2048

spring.ai.ollama.chat.options.num-batch

提示處理最大批次大小。

512

spring.ai.ollama.chat.options.num-gpu

傳送到 GPU 的層數。在 macOS 上,預設為 1 以啟用 metal 支援,0 為停用。這裡的 1 表示 NumGPU 應動態設定

-1

spring.ai.ollama.chat.options.main-gpu

當使用多個 GPU 時,此選項控制哪個 GPU 用於小張量,因為將計算拆分到所有 GPU 的開銷不值得。該 GPU 將使用稍微更多的 VRAM 來儲存臨時結果的暫存緩衝區。

0

spring.ai.ollama.chat.options.low-vram

-

spring.ai.ollama.chat.options.f16-kv

-

true

spring.ai.ollama.chat.options.logits-all

返回所有標記的 logits,而不僅僅是最後一個。要使補全返回 logprobs,此項必須為 true。

-

spring.ai.ollama.chat.options.vocab-only

僅載入詞彙,不載入權重。

-

spring.ai.ollama.chat.options.use-mmap

預設情況下,模型被對映到記憶體中,這允許系統根據需要載入模型的必要部分。然而,如果模型大於您的總 RAM 量或您的系統可用記憶體不足,使用 mmap 可能會增加頁面換出的風險,從而對效能產生負面影響。停用 mmap 會導致載入時間變慢,但如果您不使用 mlock,可能會減少頁面換出。請注意,如果模型大於總 RAM 量,關閉 mmap 將阻止模型完全載入。

null

spring.ai.ollama.chat.options.use-mlock

將模型鎖定在記憶體中,防止在記憶體對映時被交換出去。這可以提高效能,但透過需要更多 RAM 來執行並可能減慢模型載入到 RAM 中的時間,從而犧牲了記憶體對映的一些優勢。

spring.ai.ollama.chat.options.num-thread

設定計算過程中使用的執行緒數。預設情況下,Ollama 將檢測以實現最佳效能。建議將此值設定為系統物理 CPU 核心數(而不是邏輯核心數)。0 = 讓執行時決定

0

spring.ai.ollama.chat.options.num-keep

-

4

spring.ai.ollama.chat.options.seed

設定用於生成隨機數的種子。將其設定為特定數字將使模型為相同的提示生成相同的文字。

-1

spring.ai.ollama.chat.options.num-predict

生成文字時預測的最大標記數。(-1 = 無限生成,-2 = 填充上下文)

-1

spring.ai.ollama.chat.options.top-k

降低生成無意義內容的機率。較高的值(例如 100)將提供更多樣化的答案,而較低的值(例如 10)將更保守。

40

spring.ai.ollama.chat.options.top-p

與 top-k 協同工作。較高的值(例如 0.95)將導致更多樣化的文字,而較低的值(例如 0.5)將生成更集中和保守的文字。

0.9

spring.ai.ollama.chat.options.min-p

top_p 的替代方案,旨在確保質量和多樣性的平衡。引數 p 表示被考慮的標記的最小機率,相對於最有可能的標記的機率。例如,當 p=0.05 且最有可能的標記的機率為 0.9 時,值小於 0.045 的 logits 將被過濾掉。

0.0

spring.ai.ollama.chat.options.tfs-z

無尾取樣用於減少不太可能出現的標記對輸出的影響。較高的值(例如 2.0)將更大程度地減少影響,而值為 1.0 則停用此設定。

1.0

spring.ai.ollama.chat.options.typical-p

-

1.0

spring.ai.ollama.chat.options.repeat-last-n

設定模型向前檢視的距離以防止重複。(預設值:64,0 = 停用,-1 = num_ctx)

64

spring.ai.ollama.chat.options.temperature

模型的溫度。提高溫度將使模型回答更具創意。

0.8

spring.ai.ollama.chat.options.repeat-penalty

設定懲罰重複的強度。較高的值(例如 1.5)將更強烈地懲罰重複,而較低的值(例如 0.9)將更寬鬆。

1.1

spring.ai.ollama.chat.options.presence-penalty

-

0.0

spring.ai.ollama.chat.options.frequency-penalty

-

0.0

spring.ai.ollama.chat.options.mirostat

啟用 Mirostat 取樣以控制困惑度。(預設值:0,0 = 停用,1 = Mirostat,2 = Mirostat 2.0)

0

spring.ai.ollama.chat.options.mirostat-tau

控制輸出的連貫性和多樣性之間的平衡。較低的值將導致更集中和連貫的文字。

5.0

spring.ai.ollama.chat.options.mirostat-eta

影響演算法對生成文字反饋的響應速度。較低的學習率會導致調整較慢,而較高的學習率將使演算法更具響應性。

0.1

spring.ai.ollama.chat.options.penalize-newline

-

true

spring.ai.ollama.chat.options.stop

設定要使用的停止序列。當遇到此模式時,LLM 將停止生成文字並返回。可以透過在模型檔案中指定多個單獨的停止引數來設定多個停止模式。

-

spring.ai.ollama.chat.options.tool-names

工具列表,透過其名稱標識,用於在單個提示請求中啟用函式呼叫。具有這些名稱的工具必須存在於 ToolCallback 登錄檔中。

-

spring.ai.ollama.chat.options.tool-callbacks

要註冊到 ChatModel 的工具回撥。

-

spring.ai.ollama.chat.options.internal-tool-execution-enabled

如果為 false,Spring AI 將不會在內部處理工具呼叫,而是將其代理到客戶端。然後,客戶端負責處理工具呼叫,將其分派到適當的函式,並返回結果。如果為 true(預設),Spring AI 將在內部處理函式呼叫。僅適用於支援函式呼叫的聊天模型

true

所有以 spring.ai.ollama.chat.options 為字首的屬性都可以在執行時透過向 Prompt 呼叫新增特定於請求的 執行時選項 來覆蓋。

執行時選項

OllamaChatOptions.java 類提供了模型配置,例如要使用的模型、溫度、思考模式等。

OllamaOptions 類已被棄用。聊天模型請使用 OllamaChatOptions,嵌入模型請使用 OllamaEmbeddingOptions。新類提供型別安全、模型特定的配置選項。

在啟動時,可以使用 OllamaChatModel(api, options) 建構函式或 spring.ai.ollama.chat.options.* 屬性配置預設選項。

在執行時,您可以透過向 Prompt 呼叫新增新的、請求特定的選項來覆蓋預設選項。例如,要為特定請求覆蓋預設模型和溫度

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        OllamaChatOptions.builder()
            .model(OllamaModel.LLAMA3_1)
            .temperature(0.4)
            .build()
    ));
除了模型特定的 OllamaChatOptions,您還可以使用可移植的 ChatOptions 例項,透過 ChatOptions#builder() 建立。

自動拉取模型

Spring AI Ollama 可以在您的 Ollama 例項中沒有模型時自動拉取模型。此功能對於開發和測試以及將應用程式部署到新環境特別有用。

您還可以按名稱拉取數千個免費的 GGUF Hugging Face 模型

拉取模型有三種策略:

  • always(定義在 PullModelStrategy.ALWAYS 中):始終拉取模型,即使它已經可用。這有助於確保您使用的是最新版本的模型。

  • when_missing(定義在 PullModelStrategy.WHEN_MISSING 中):僅當模型尚不可用時才拉取。這可能導致使用舊版本的模型。

  • never(定義在 PullModelStrategy.NEVER 中):從不自動拉取模型。

由於下載模型可能存在延遲,因此不建議在生產環境中使用自動拉取。相反,請考慮提前評估並預下載必要的模型。

所有透過配置屬性和預設選項定義的模型都可以在啟動時自動拉取。您可以使用配置屬性來配置拉取策略、超時和最大重試次數

spring:
  ai:
    ollama:
      init:
        pull-model-strategy: always
        timeout: 60s
        max-retries: 1
應用程式將不會完成其初始化,直到 Ollama 中所有指定的模型都可用。根據模型大小和網際網路連線速度,這可能會顯著減慢應用程式的啟動時間。

您可以在啟動時初始化其他模型,這對於在執行時動態使用的模型很有用。

spring:
  ai:
    ollama:
      init:
        pull-model-strategy: always
        chat:
          additional-models:
            - llama3.2
            - qwen2.5

如果您只想將拉取策略應用於特定型別的模型,可以將聊天模型從初始化任務中排除

spring:
  ai:
    ollama:
      init:
        pull-model-strategy: always
        chat:
          include: false

此配置將對所有模型(聊天模型除外)應用拉取策略。

函式呼叫

您可以使用 OllamaChatModel 註冊自定義 Java 函式,並讓 Ollama 模型智慧地選擇輸出一個包含呼叫一個或多個註冊函式引數的 JSON 物件。這是一種將 LLM 功能與外部工具和 API 連線的強大技術。閱讀更多關於 工具呼叫 的資訊。

您需要 Ollama 0.2.8 或更高版本才能使用功能呼叫功能,以及 Ollama 0.4.6 或更高版本才能在流模式下使用它們。

思考模式(推理)

Ollama 支援思考模式,用於可以發出其內部推理過程,然後提供最終答案的推理模型。此功能適用於 Qwen3、DeepSeek-v3.1、DeepSeek R1 和 GPT-OSS 等模型。

思考模式可幫助您理解模型的推理過程,並可提高複雜問題的響應質量。
預設行為(Ollama 0.12+):具有思考能力的模型(例如 qwen3:*-thinkingdeepseek-r1deepseek-v3.1)在未明確設定思考選項時,預設自動啟用思考。標準模型(例如 qwen2.5:*llama3.2)預設不啟用思考。要明確控制此行為,請使用 .enableThinking().disableThinking()

啟用思考模式

大多數模型(Qwen3、DeepSeek-v3.1、DeepSeek R1)支援簡單的布林值啟用/停用

ChatResponse response = chatModel.call(
    new Prompt(
        "How many letter 'r' are in the word 'strawberry'?",
        OllamaChatOptions.builder()
            .model("qwen3")
            .enableThinking()
            .build()
    ));

// Access the thinking process
String thinking = response.getResult().getMetadata().get("thinking");
String answer = response.getResult().getOutput().getContent();

您也可以明確停用思考

ChatResponse response = chatModel.call(
    new Prompt(
        "What is 2+2?",
        OllamaChatOptions.builder()
            .model("deepseek-r1")
            .disableThinking()
            .build()
    ));

思考級別(僅限 GPT-OSS)

GPT-OSS 模型需要明確的思考級別,而不是布林值。

// Low thinking level
ChatResponse response = chatModel.call(
    new Prompt(
        "Generate a short headline",
        OllamaChatOptions.builder()
            .model("gpt-oss")
            .thinkLow()
            .build()
    ));

// Medium thinking level
ChatResponse response = chatModel.call(
    new Prompt(
        "Analyze this dataset",
        OllamaChatOptions.builder()
            .model("gpt-oss")
            .thinkMedium()
            .build()
    ));

// High thinking level
ChatResponse response = chatModel.call(
    new Prompt(
        "Solve this complex problem",
        OllamaChatOptions.builder()
            .model("gpt-oss")
            .thinkHigh()
            .build()
    ));

訪問思考內容

思考內容可在響應元資料中獲取

ChatResponse response = chatModel.call(
    new Prompt(
        "Calculate 17 × 23",
        OllamaChatOptions.builder()
            .model("deepseek-r1")
            .enableThinking()
            .build()
    ));

// Get the reasoning process
String thinking = response.getResult().getMetadata().get("thinking");
System.out.println("Reasoning: " + thinking);
// Output: "17 × 20 = 340, 17 × 3 = 51, 340 + 51 = 391"

// Get the final answer
String answer = response.getResult().getOutput().getContent();
System.out.println("Answer: " + answer);
// Output: "The answer is 391"

流式傳輸與思考

思考模式也適用於流式響應

Flux<ChatResponse> stream = chatModel.stream(
    new Prompt(
        "Explain quantum entanglement",
        OllamaChatOptions.builder()
            .model("qwen3")
            .enableThinking()
            .build()
    ));

stream.subscribe(response -> {
    String thinking = response.getResult().getMetadata().get("thinking");
    String content = response.getResult().getOutput().getContent();

    if (thinking != null && !thinking.isEmpty()) {
        System.out.println("[Thinking] " + thinking);
    }
    if (content != null && !content.isEmpty()) {
        System.out.println("[Response] " + content);
    }
});
當停用思考或未設定時,thinking 元資料欄位將為 null 或為空。

多模態

多模態是指模型同時理解和處理來自各種來源(包括文字、影像、音訊和其他資料格式)資訊的能力。

Ollama 中支援多模態的模型包括 LLaVABakLLaVA(參見完整列表)。有關更多詳細資訊,請參閱 LLaVA:大型語言和視覺助手

Ollama 訊息 API 提供了一個“images”引數,用於將 base64 編碼的影像列表與訊息一起包含。

Spring AI 的 Message 介面透過引入 Media 型別來促進多模態 AI 模型。此型別包含訊息中媒體附件的資料和詳細資訊,使用 Spring 的 org.springframework.util.MimeType 和用於原始媒體資料的 org.springframework.core.io.Resource

以下是一個摘自 OllamaChatModelMultimodalIT.java 的簡單程式碼示例,說明了使用者文字與影像的融合。

var imageResource = new ClassPathResource("/multimodal.test.png");

var userMessage = new UserMessage("Explain what do you see on this picture?",
        new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource));

ChatResponse response = chatModel.call(new Prompt(this.userMessage,
        OllamaChatOptions.builder().model(OllamaModel.LLAVA)).build());

該示例顯示了一個模型將 multimodal.test.png 影像作為輸入

Multimodal Test Image

以及文字訊息“解釋你在這張圖片上看到了什麼?”,並生成如下響應

The image shows a small metal basket filled with ripe bananas and red apples. The basket is placed on a surface,
which appears to be a table or countertop, as there's a hint of what seems like a kitchen cabinet or drawer in
the background. There's also a gold-colored ring visible behind the basket, which could indicate that this
photo was taken in an area with metallic decorations or fixtures. The overall setting suggests a home environment
where fruits are being displayed, possibly for convenience or aesthetic purposes.

結構化輸出

Ollama 提供了自定義的 結構化輸出 API,可確保您的模型生成嚴格符合您提供的 JSON Schema 的響應。除了現有的 Spring AI 模型無關的 結構化輸出轉換器 之外,這些 API 提供了增強的控制和精度。

配置

Spring AI 允許您使用 OllamaChatOptions 構建器以程式設計方式配置響應格式。

使用聊天選項構建器

您可以使用 OllamaChatOptions 構建器以程式設計方式設定響應格式,如下所示:

String jsonSchema = """
        {
            "type": "object",
            "properties": {
                "steps": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "explanation": { "type": "string" },
                            "output": { "type": "string" }
                        },
                        "required": ["explanation", "output"],
                        "additionalProperties": false
                    }
                },
                "final_answer": { "type": "string" }
            },
            "required": ["steps", "final_answer"],
            "additionalProperties": false
        }
        """;

Prompt prompt = new Prompt("how can I solve 8x + 7 = -23",
        OllamaChatOptions.builder()
            .model(OllamaModel.LLAMA3_2.getName())
            .format(new ObjectMapper().readValue(jsonSchema, Map.class))
            .build());

ChatResponse response = this.ollamaChatModel.call(this.prompt);

與 BeanOutputConverter 實用程式整合

您可以利用現有的 BeanOutputConverter 實用程式從您的領域物件自動生成 JSON Schema,然後將結構化響應轉換為領域特定的例項。

record MathReasoning(
    @JsonProperty(required = true, value = "steps") Steps steps,
    @JsonProperty(required = true, value = "final_answer") String finalAnswer) {

    record Steps(
        @JsonProperty(required = true, value = "items") Items[] items) {

        record Items(
            @JsonProperty(required = true, value = "explanation") String explanation,
            @JsonProperty(required = true, value = "output") String output) {
        }
    }
}

var outputConverter = new BeanOutputConverter<>(MathReasoning.class);

Prompt prompt = new Prompt("how can I solve 8x + 7 = -23",
        OllamaChatOptions.builder()
            .model(OllamaModel.LLAMA3_2.getName())
            .format(outputConverter.getJsonSchemaMap())
            .build());

ChatResponse response = this.ollamaChatModel.call(this.prompt);
String content = this.response.getResult().getOutput().getText();

MathReasoning mathReasoning = this.outputConverter.convert(this.content);
請務必使用 @JsonProperty(required = true,...) 註解來生成一個準確標記欄位為 required 的模式。儘管這對於 JSON Schema 來說是可選的,但建議用於結構化響應以正常工作。

OpenAI API 相容性

Ollama 與 OpenAI API 相容,您可以使用 Spring AI OpenAI 客戶端與 Ollama 對話並使用工具。為此,您需要將 OpenAI 的基本 URL 配置為您的 Ollama 例項:spring.ai.openai.chat.base-url=https://:11434,並選擇一個提供的 Ollama 模型:spring.ai.openai.chat.options.model=mistral

當使用 OpenAI 客戶端與 Ollama 時,您可以使用 extraBody 選項 傳遞 Ollama 特定的引數(例如 top_krepeat_penaltynum_predict)。這允許您在使用 OpenAI 客戶端的同時,利用 Ollama 的全部功能。
Ollama OpenAI API compatibility

透過 OpenAI 相容性獲取推理內容

Ollama 的 OpenAI 相容端點支援用於具有思考能力模型(如 qwen3:*-thinkingdeepseek-r1deepseek-v3.1)的 reasoning_content 欄位。當使用 Spring AI OpenAI 客戶端與 Ollama 時,模型的推理過程會自動捕獲並透過響應元資料提供。

這是使用 Ollama 原生思考模式 API(如上文 思考模式(推理) 中所述)的替代方案。兩種方法都適用於 Ollama 的思考模型,但 OpenAI 相容端點使用 reasoning_content 欄位名而不是 thinking

以下是透過 OpenAI 客戶端訪問 Ollama 推理內容的示例

// Configure Spring AI OpenAI client to point to Ollama
@Configuration
class OllamaConfig {
    @Bean
    OpenAiChatModel ollamaChatModel() {
        var openAiApi = new OpenAiApi("https://:11434", "ollama");
        return new OpenAiChatModel(openAiApi,
            OpenAiChatOptions.builder()
                .model("deepseek-r1")  // or qwen3, deepseek-v3.1, etc.
                .build());
    }
}

// Use the model with thinking-capable models
ChatResponse response = chatModel.call(
    new Prompt("How many letter 'r' are in the word 'strawberry'?"));

// Access the reasoning process from metadata
String reasoning = response.getResult().getMetadata().get("reasoningContent");
if (reasoning != null && !reasoning.isEmpty()) {
    System.out.println("Model's reasoning process:");
    System.out.println(reasoning);
}

// Get the final answer
String answer = response.getResult().getOutput().getContent();
System.out.println("Answer: " + answer);
Ollama 中具有思考能力的模型(0.12+)在透過 OpenAI 相容端點訪問時會自動啟用思考模式。推理內容會自動捕獲,無需額外配置。

請檢視 OllamaWithOpenAiChatModelIT.java 測試,瞭解如何透過 Spring AI OpenAI 使用 Ollama 的示例。

HuggingFace 模型

Ollama 可以即時訪問所有 GGUF Hugging Face 聊天模型。您可以透過名稱拉取這些模型:ollama pull hf.co/<username>/<model-repository>,或配置自動拉取策略:自動拉取模型

spring.ai.ollama.chat.options.model=hf.co/bartowski/gemma-2-2b-it-GGUF
spring.ai.ollama.init.pull-model-strategy=always
  • spring.ai.ollama.chat.options.model:指定要使用的 Hugging Face GGUF 模型

  • spring.ai.ollama.init.pull-model-strategy=always:(可選)在啟動時啟用自動模型拉取。對於生產環境,您應該預先下載模型以避免延遲:ollama pull hf.co/bartowski/gemma-2-2b-it-GGUF

示例控制器

建立一個新的 Spring Boot 專案,並將 spring-ai-starter-model-ollama 新增到您的 pom(或 gradle)依賴項中。

src/main/resources 目錄下新增一個 application.yaml 檔案,以啟用和配置 Ollama 聊天模型

spring:
  ai:
    ollama:
      base-url: https://:11434
      chat:
        options:
          model: mistral
          temperature: 0.7
base-url 替換為您的 Ollama 伺服器 URL。

這將建立一個 OllamaChatModel 實現,您可以將其注入到您的類中。這是一個簡單的 @RestController 類的示例,它使用聊天模型進行文字生成。

@RestController
public class ChatController {

    private final OllamaChatModel chatModel;

    @Autowired
    public ChatController(OllamaChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
	public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }

}

手動配置

如果您不想使用 Spring Boot 自動配置,可以在應用程式中手動配置 OllamaChatModelOllamaChatModel 實現了 ChatModelStreamingChatModel,並使用 低階 OllamaApi 客戶端 連線到 Ollama 服務。

要使用它,請將 spring-ai-ollama 依賴項新增到您的專案的 Maven pom.xml 或 Gradle build.gradle 構建檔案中

  • Maven

  • Gradle

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama</artifactId>
</dependency>
dependencies {
    implementation 'org.springframework.ai:spring-ai-ollama'
}
請參閱 依賴項管理 部分,將 Spring AI BOM 新增到您的構建檔案中。
spring-ai-ollama 依賴項還提供了對 OllamaEmbeddingModel 的訪問。有關 OllamaEmbeddingModel 的更多資訊,請參閱 Ollama 嵌入模型 部分。

接下來,建立一個 OllamaChatModel 例項並使用它傳送文字生成請求。

var ollamaApi = OllamaApi.builder().build();

var chatModel = OllamaChatModel.builder()
                    .ollamaApi(ollamaApi)
                    .defaultOptions(
                        OllamaChatOptions.builder()
                            .model(OllamaModel.MISTRAL)
                            .temperature(0.9)
                            .build())
                    .build();

ChatResponse response = this.chatModel.call(
    new Prompt("Generate the names of 5 famous pirates."));

// Or with streaming responses
Flux<ChatResponse> response = this.chatModel.stream(
    new Prompt("Generate the names of 5 famous pirates."));

OllamaChatOptions 提供了所有聊天請求的配置資訊。

低階 OllamaApi 客戶端

OllamaApi 為 Ollama 聊天完成 API Ollama 聊天完成 API 提供了一個輕量級 Java 客戶端。

以下類圖說明了 OllamaApi 聊天介面和構建塊

OllamaApi Chat Completion API Diagram
OllamaApi 是一個低階 API,不建議直接使用。請改用 OllamaChatModel

這裡有一個簡單的程式碼片段,展示瞭如何以程式設計方式使用 API

OllamaApi ollamaApi = new OllamaApi("YOUR_HOST:YOUR_PORT");

// Sync request
var request = ChatRequest.builder("orca-mini")
    .stream(false) // not streaming
    .messages(List.of(
            Message.builder(Role.SYSTEM)
                .content("You are a geography teacher. You are talking to a student.")
                .build(),
            Message.builder(Role.USER)
                .content("What is the capital of Bulgaria and what is the size? "
                        + "What is the national anthem?")
                .build()))
    .options(OllamaChatOptions.builder().temperature(0.9).build())
    .build();

ChatResponse response = this.ollamaApi.chat(this.request);

// Streaming request
var request2 = ChatRequest.builder("orca-mini")
    .ttream(true) // streaming
    .messages(List.of(Message.builder(Role.USER)
        .content("What is the capital of Bulgaria and what is the size? " + "What is the national anthem?")
        .build()))
    .options(OllamaChatOptions.builder().temperature(0.9).build().toMap())
    .build();

Flux<ChatResponse> streamingResponse = this.ollamaApi.streamingChat(this.request2);
© . This site is unofficial and not affiliated with VMware.