MiniMax

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

Spring AI 支持 MiniMax 的多种 AI 语言模型。你可以通过 MiniMax 语言模型构建多语言对话助手。

先决条件

你需要创建 MiniMax API Key 才能访问 MiniMax 语言模型。

MiniMax 注册页面 创建账户,并在 API Key 页面 生成访问令牌。

Spring AI 项目定义了名为 spring.ai.minimax.api-key 的配置属性,需将其设置为从 API Key 页面获取的密钥值。

你可以在 application.properties 文件中设置该配置属性:

spring.ai.minimax.api-key=<your-minimax-api-key>

为增强处理敏感信息(如 API Key)时的安全性,可使用 Spring 表达式语言(SpEL)引用环境变量:

# In application.yml
spring:
  ai:
    minimax:
      api-key: ${MINIMAX_API_KEY}
# In your environment or .env file
export MINIMAX_API_KEY=<your-minimax-api-key>

你还可以在应用程序代码中以编程方式配置该参数:

// Retrieve API key from a secure source or environment variable
String apiKey = System.getenv("MINIMAX_API_KEY");

添加仓库和 BOM

Spring AI 组件已发布在 Maven 中央仓库和 Spring Snapshot 仓库。请参阅 Artifact 仓库 章节将这些仓库添加到你的构建系统。

为简化依赖管理,Spring AI 提供 BOM 以确保整个项目使用统一版本的 Spring AI。请参阅 依赖管理 章节将 Spring AI BOM 添加到你的构建系统。

自动配置

Spring AI 自动配置和 Starter 模块的构件名称已发生重大变更。更多信息请参阅 升级说明

Spring AI 为 MiniMax 聊天客户端提供 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 sec.

spring.ai.retry.backoff.multiplier

退避间隔乘数。

5

spring.ai.retry.backoff.max-interval

最大退避时长。

3 min.

spring.ai.retry.on-client-errors

若为 false,则抛出 NonTransientAiException,且不对 4xx 客户端错误代码尝试重试。

false

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

不应触发重试的 HTTP 状态码列表(例如用于抛出 NonTransientAiException)。

empty

spring.ai.retry.on-http-codes

应触发重试的 HTTP 状态码列表(例如用于抛出 TransientAiException)。

empty

连接属性

前缀 spring.ai.minimax 用于配置连接 MiniMax 服务的属性参数。

属性 说明 默认值

spring.ai.minimax.base-url

要连接到的 URL

api.minimax.chat

spring.ai.minimax.api-key

API Key

-

配置属性

聊天自动配置的启用/禁用现在通过顶级属性 spring.ai.model.chat 配置:

  • 启用:pring.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-chatabab5.5-chatabab5.5s-chatabab6.5-chatabab6.5g-chatabab6.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

为每条输入消息生成的聊天补全选项数量(默认值 1,最大值 5)。请注意:费用将基于所有选项生成的 Token 总数计算。特别说明:当 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_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 提供模型配置参数,包括使用的模型名称、温度值(temperature)、频率惩罚系数(frequency penalty)等。

在启动时,默认选项可通过 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 项目,并在 pom(或gradle)依赖项中添加 spring-ai-starter-model-minimax

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 服务。

将以下依赖添加到项目的 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 支持 Fluent 式选项构建。

底层 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 搜索功能,请参阅 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 示例