MiniMax Chat

Spring AI 支援 MiniMax 提供的各種 AI 語言模型。您可以與 MiniMax 語言模型互動,並基於 MiniMax 模型構建多語言對話助手。

前提條件

您需要在 MiniMax 建立 API 才能訪問 MiniMax 語言模型。

MiniMax 註冊頁面 建立賬戶,並在 API Keys page 生成 token。Spring AI 專案定義了一個名為 spring.ai.minimax.api-key 的配置屬性,您應將其設定為從 API Keys page 獲取的 API Key 的值。匯出環境變數是設定該配置屬性的一種方式。

export SPRING_AI_MINIMAX_API_KEY=<INSERT KEY HERE>

新增倉庫和 BOM

Spring AI 的構件(artifact)釋出在 Maven Central 和 Spring Snapshot 倉庫中。請參考倉庫部分,將這些倉庫新增到您的構建系統。

為了幫助進行依賴管理,Spring AI 提供了一個 BOM (bill of materials),以確保在整個專案中使用一致版本的 Spring AI。請參考依賴管理部分,將 Spring AI BOM 新增到您的構建系統。

自動配置

Spring AI 自動配置、starter 模組的構件名稱發生了重大變化。請參考升級注意事項獲取更多資訊。

Spring AI 為 MiniMax Chat Client 提供了 Spring Boot 自動配置。要啟用它,請將以下依賴新增到專案的 Maven pom.xml 檔案中

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-minimax</artifactId>
</dependency>

或新增到您的 Gradle build.gradle 構建檔案中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-minimax'
}
請參考依賴管理部分,將 Spring AI BOM 新增到您的構建檔案中。

對話屬性

重試屬性

字首 spring.ai.retry 用作屬性字首,允許您配置 MiniMax 對話模型的重試機制。

屬性 描述 預設值

spring.ai.retry.max-attempts

最大重試次數。

10

spring.ai.retry.backoff.initial-interval

指數回退策略的初始睡眠時長。

2 秒。

spring.ai.retry.backoff.multiplier

回退間隔乘數。

5

spring.ai.retry.backoff.max-interval

最大回退時長。

3 分鐘。

spring.ai.retry.on-client-errors

如果為 false,則丟擲 NonTransientAiException,且不嘗試重試 4xx 客戶端錯誤碼。

false

spring.ai.retry.exclude-on-http-codes

不應觸發重試的 HTTP 狀態碼列表(例如,丟擲 NonTransientAiException)。

spring.ai.retry.on-http-codes

應觸發重試的 HTTP 狀態碼列表(例如,丟擲 TransientAiException)。

連線屬性

字首 spring.ai.minimax 用作屬性字首,允許您連線到 MiniMax。

屬性 描述 預設值

spring.ai.minimax.base-url

要連線的 URL

api.minimax.chat

spring.ai.minimax.api-key

API 金鑰

-

配置屬性

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

要啟用,spring.ai.model.chat=minimax (預設啟用)

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

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

字首 spring.ai.minimax.chat 是屬性字首,允許您配置 MiniMax 的對話模型實現。

屬性 描述 預設值

spring.ai.minimax.chat.enabled (已移除且不再有效)

啟用 MiniMax 對話模型。

true

spring.ai.model.chat

啟用 MiniMax 對話模型。

minimax

spring.ai.minimax.chat.base-url

可選地覆蓋 spring.ai.minimax.base-url 以提供對話特定的 URL

api.minimax.chat

spring.ai.minimax.chat.api-key

可選地覆蓋 spring.ai.minimax.api-key 以提供對話特定的 api-key

-

spring.ai.minimax.chat.options.model

這是要使用的 MiniMax 對話模型

abab6.5g-chat (其中的 abab5.5-chat, abab5.5s-chat, abab6.5-chat, abab6.5g-chat, abab6.5t-chatabab6.5s-chat 指向最新的模型版本)

spring.ai.minimax.chat.options.maxTokens

在對話補全中生成的最大 token 數量。輸入 token 和生成 token 的總長度受模型的上下文長度限制。

-

spring.ai.minimax.chat.options.temperature

用於控制生成補全的表觀創造力的取樣溫度。值越高,輸出越隨機;值越低,結果越集中和確定。不建議在同一補全請求中同時修改 temperature 和 top_p,因為這兩個設定的互動作用難以預測。

0.7

spring.ai.minimax.chat.options.topP

取樣溫度的替代方法,稱為核取樣(nucleus sampling),模型會考慮具有 top_p 機率質量的 token 的結果。例如,0.1 表示僅考慮機率質量排名前 10% 的 token。我們通常建議修改其中一個或 temperature,但不要同時修改兩者。

1.0

spring.ai.minimax.chat.options.n

為每個輸入訊息生成多少個對話補全選項。請注意,您將根據所有選項生成的 token 總數付費。預設值為 1,不能大於 5。特別是當 temperature 非常小接近 0 時,我們只能返回 1 個結果。如果此時 n 已經設定且>1,服務將返回非法輸入引數錯誤(invalid_request_error)

1

spring.ai.minimax.chat.options.presencePenalty

介於 -2.0 和 2.0 之間的數字。正值會根據新 token 是否已在文字中出現而對其進行懲罰,從而增加模型談論新主題的可能性。

0.0f

spring.ai.minimax.chat.options.frequencyPenalty

介於 -2.0 和 2.0 之間的數字。正值會根據新 token 到目前為止在文字中的現有頻率對其進行懲罰,從而降低模型重複相同行的可能性。

0.0f

spring.ai.minimax.chat.options.stop

模型將停止生成由 stop 指定的字元,目前僅支援 ["stop_word1"] 格式的單個停止詞。

-

您可以為 ChatModel 實現覆蓋通用的 spring.ai.minimax.base-urlspring.ai.minimax.api-key。如果設定了 spring.ai.minimax.chat.base-urlspring.ai.minimax.chat.api-key 屬性,則它們優先於通用屬性。如果您希望為不同的模型和不同的模型端點使用不同的 MiniMax 賬戶,這將非常有用。
所有以 spring.ai.minimax.chat.options 為字首的屬性都可以在執行時透過向 Prompt 呼叫新增請求特定的 執行時選項 進行覆蓋。

執行時選項

MiniMaxChatOptions.java 提供了模型配置,例如要使用的模型、溫度、頻率懲罰等。

在啟動時,可以透過 MiniMaxChatModel(api, options) 建構函式或 spring.ai.minimax.chat.options.* 屬性配置預設選項。

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

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

示例 Controller

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

src/main/resources 目錄下新增一個 application.properties 檔案,以啟用和配置 MiniMax 對話模型

spring.ai.minimax.api-key=YOUR_API_KEY
spring.ai.minimax.chat.options.model=abab6.5g-chat
spring.ai.minimax.chat.options.temperature=0.7
api-key 替換為您的 MiniMax 憑據。

這將建立一個 MiniMaxChatModel 實現,您可以將其注入到您的類中。這是一個簡單的 @Controller 類使用對話模型生成文字的示例。

@RestController
public class ChatController {

    private final MiniMaxChatModel chatModel;

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

    @GetMapping("/ai/generate")
    public Map 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) {
        var prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }
}

手動配置

MiniMaxChatModel 實現了 ChatModelStreamingChatModel 介面,並使用低層 MiniMaxApi 客戶端連線到 MiniMax 服務。

spring-ai-minimax 依賴新增到專案的 Maven pom.xml 檔案中

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-minimax</artifactId>
</dependency>

或新增到您的 Gradle build.gradle 構建檔案中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-minimax'
}
請參考依賴管理部分,將 Spring AI BOM 新增到您的構建檔案中。

接下來,建立一個 MiniMaxChatModel 並使用它生成文字

var miniMaxApi = new MiniMaxApi(System.getenv("MINIMAX_API_KEY"));

var chatModel = new MiniMaxChatModel(this.miniMaxApi, MiniMaxChatOptions.builder()
                .model(MiniMaxApi.ChatModel.ABAB_6_5_S_Chat.getValue())
                .temperature(0.4)
                .maxTokens(200)
                .build());

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

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

MiniMaxChatOptions 提供了對話請求的配置資訊。MiniMaxChatOptions.Builder 是一個流式選項構建器。

低層 MiniMaxApi 客戶端

MiniMaxApi 提供了一個輕量級的 MiniMax API Java 客戶端。

以下是如何以程式設計方式使用該 API 的簡單程式碼片段

MiniMaxApi miniMaxApi =
    new MiniMaxApi(System.getenv("MINIMAX_API_KEY"));

ChatCompletionMessage chatCompletionMessage =
    new ChatCompletionMessage("Hello world", Role.USER);

// Sync request
ResponseEntity<ChatCompletion> response = this.miniMaxApi.chatCompletionEntity(
    new ChatCompletionRequest(List.of(this.chatCompletionMessage), MiniMaxApi.ChatModel.ABAB_6_5_S_Chat.getValue(), 0.7f, false));

// Streaming request
Flux<ChatCompletionChunk> streamResponse = this.miniMaxApi.chatCompletionStream(
        new ChatCompletionRequest(List.of(this.chatCompletionMessage), MiniMaxApi.ChatModel.ABAB_6_5_S_Chat.getValue(), 0.7f, true));

有關更多資訊,請參閱 MiniMaxApi.java 的 JavaDoc。

MiniMax 模型支援 Web 搜尋功能。Web 搜尋功能允許您搜尋 Web 資訊並在對話響應中返回結果。

有關 Web 搜尋的更多資訊,請參閱 MiniMax ChatCompletion

以下是如何使用 Web 搜尋的簡單程式碼片段

UserMessage userMessage = new UserMessage(
        "How many gold medals has the United States won in total at the 2024 Olympics?");

List<Message> messages = new ArrayList<>(List.of(this.userMessage));

List<MiniMaxApi.FunctionTool> functionTool = List.of(MiniMaxApi.FunctionTool.webSearchFunctionTool());

MiniMaxChatOptions options = MiniMaxChatOptions.builder()
    .model(MiniMaxApi.ChatModel.ABAB_6_5_S_Chat.value)
    .tools(this.functionTool)
    .build();


// Sync request
ChatResponse response = chatModel.call(new Prompt(this.messages, this.options));

// Streaming request
Flux<ChatResponse> streamResponse = chatModel.stream(new Prompt(this.messages, this.options));

MiniMaxApi 示例

  • MiniMaxApiIT.java 測試提供了一些關於如何使用該輕量級庫的通用示例。

  • MiniMaxApiToolFunctionCallIT.java 測試展示瞭如何使用低層 API 呼叫工具函式。>