Mistral AI Chat

Spring AI 支持 Mistral AI 的各种 AI 语言模型。您可以与 Mistral AI 语言模型进行交互,并基于 Mistral 模型创建多语言对话助手。

先决条件

您需要使用 MistralAI 创建 API 来访问 Mistral AI 语言模型。

MistralAI 注册页面 创建帐户并在 API Keys 页面 生成令牌。
Spring AI 项目定义了一个名为的配置属性,您应该将其设置为从 console.mistral.ai 获取的spring.ai.mistralai.api-key值。

API Key 导出环境变量是设置该配置属性的一种方法:

export SPRING_AI_MISTRALAI_API_KEY=<INSERT KEY HERE>

添加存储库和 BOM

Spring AI 工件发布在 Spring MilestoneSnapshot 存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。

为了帮助进行依赖管理,Spring AI 提供了 BOM(物料清单),以确保在整个项目中使用一致的 Spring AI 版本。请参阅依赖管理部分将 Spring AI BOM 添加到您的构建系统。

自动配置

Spring AI 为 MistralAI 对话客户端提供 Spring Boot 自动配置。要启用它,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mistral-ai-spring-boot-starter</artifactId>
</dependency>

或者,在你的 Gradle 构建文件 build.gradle 中添加:

dependencies {
    implementation 'org.springframework.ai:spring-ai-mistral-ai-spring-boot-starter'
}

Chat 属性

重试属性

spring.ai.retry 前缀的属性,可让您配置 Mistral AI 对话客户端的重试机制。

属性 描述 默认值
spring.ai.retry.max-attempts 最大重试次数。 10
spring.ai.retry.backoff.initial-interval Backoff 策略的初始睡眠持续时间。 2 秒.
spring.ai.retry.backoff.multiplier Backoff 间隔乘数。 5
spring.ai.retry.backoff.max-interval 最大 Backoff 持续时间。 3 分钟.
spring.ai.retry.on-client-errors 如果为 false,则抛出 NonTransientAiException,并且不尝试重试4xx客户端错误代码 false
spring.ai.retry.exclude-on-http-codes 不触发重试的 HTTP 状态代码列表(例如: 抛出 NonTransientAiException)。 empty

连接属性

spring.ai.mistralai 前缀的属性,可让您配置 Mistral AI 对话客户端的连接。

属性 描述 默认值
spring.ai.mistralai.base-url 要连接的 URL https://api.mistral.ai
spring.ai.mistralai.api-key API 密钥 -

配置属性

spring.ai.mistralai.chat 前缀的属性,可让您配置 MistralAI 的 ChatClient 实现。

属性 描述 默认值
spring.ai.mistralai.chat.enabled 启用 MistralAI 对话客户端。 true
spring.ai.mistralai.chat.base-url 覆盖 spring.ai.mistralai.base-url 以提供对话特定的 url -
spring.ai.mistralai.chat.api-key 覆盖 spring.ai.mistralai.api-key 以提供对话特定的 api-key -
spring.ai.mistralai.chat.options.model 这是要使用的 MistralAI 对话模型 open-mistral-7b, open-mixtral-8x7b, mistral-small-latest, mistral-medium-latest, mistral-large-latest
spring.ai.mistralai.chat.options.temperature 使用的采样温度控制生成的完成的明显创造力。较高的值将使输出更加随机,而较低的值将使结果更加集中和确定。不建议针对相同的完成请求修改温度和 top_p,因为这两个设置的相互作用很难预测。 0.8
spring.ai.mistralai.chat.options.maxTokens 聊天完成时生成的最大令牌数。输入标记和生成标记的总长度受到模型上下文长度的限制。 -
spring.ai.mistralai.chat.options.safePrompt 指示是否在所有对话之前插入安全提示。 false
spring.ai.mistralai.chat.options.randomSeed 此功能处于测试阶段。如果指定,我们的系统将尽最大努力进行确定性采样,以便使用相同种子和参数的重复请求应返回相同的结果。 -
spring.ai.mistralai.chat.options.stop API 将停止生成更多令牌的最多 4 个序列。 -
spring.ai.mistralai.chat.options.topP 温度采样的替代方法称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。因此 0.1 意味着仅考虑包含前 10% 概率质量的标记。我们通常建议更改此值或温度,但不能同时更改两者。 -
spring.ai.mistralai.chat.options.responseFormat 指定模型必须输出的格式的对象。设置为 { "type": "json_object" } 启用 JSON 模式,这保证模型生成的消息是有效的 JSON。 -
spring.ai.mistralai.chat.options.tools 模型可能调用的工具列表。目前,仅支持函数作为工具。使用它来提供模型可以为其生成 JSON 输入的函数列表。 -
spring.ai.mistralai.chat.options.toolChoice 控制模型调用哪个函数(如果有)。 none 表示模型不会调用函数而是生成消息。 auto 意味着模型可以在生成消息或调用函数之间进行选择。通过 {"type: "function", "function": {"name": "my_function"}} 指定特定函数会强制模型调用该函数。当不存在函数时,none 是默认值。如果存在,则 auto 是默认值功能都存在。 -
spring.ai.mistralai.chat.options.functions 由名称标识的函数列表,用于在单个提示请求中启用函数调用。具有这些名称的函数必须存在于 functionCallbacks 注册表中。 -
spring.ai.mistralai.chat.options.functionCallbacks 注册到ChatClient 的 MistralAI 工具函数回调 -

说明:

  • 你可以覆盖 ChatClientEmbeddingClient 的 通用参数 spring.ai.mistralai.base-urlspring.ai.mistralai.api-key
  • 如果设置了 spring.ai.mistralai.chat.base-urlspring.ai.mistralai.chat.api-key 属性,则优先于公共属性。
  • 如果您想对不同的模型和不同的模型端点使用不同的 MistralAI 帐户,这非常有用。

*提示: *所有 spring.ai.mistralai.chat.options 前缀的属性, 可以在运行期间通过添加特定请求参数到 Prompt 调用 实现覆盖.

对话选项

MistralAiChatOptions.java 提供模型配置,例如:要使用的模型、temperature、频率惩罚等。

启动时,可以使用 MistralAiChatClient(api, options) 构造函数或 spring.ai.mistralai.chat.options.* 属性配置默认选项。

在运行时,您可以通过向调用添加新的、特定于请求的选项来覆盖默认选项Prompt。例如,要覆盖特定请求的默认型号和温度:

ChatResponse response = chatClient.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        MistralAiChatOptions.builder()
            .withModel(MistralAiApi.ChatModel.LARGE.getValue())
            .withTemperature(0.5f)
        .build()
    ));

提示: 除了特定于模型的 MistralAiChatOptions 之外,您还可以使用通过 ChatOptionsBuilder#builder() 创建的可移植 ChatOptions 实例。

Sample Controller (自动配置)

创建 一个新的 Spring Boot 项目并将其添加 spring-ai-mistralai-spring-boot-starter 到您的 pom(或 gradle)依赖项中。

src/main/resources目录下添加一个application.properties文件,以启用和配置 MistralAI 对话客户端:

spring.ai.mistralai.api-key=YOUR_API_KEY
spring.ai.mistralai.chat.options.model=mistral-medium
spring.ai.mistralai.chat.options.temperature=0.7

提示: 替换api-key为您的 MistralAI 凭据。

这将创建一个可以注入到您的类中的 MistralAiChatClient 实现。下面是一个@Controller使用聊天客户端生成文本的简单类的示例。

@RestController
public class ChatController {

    private final MistralAiChatClient chatClient;

    @Autowired
    public ChatController(MistralAiChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatClient.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 chatClient.stream(prompt);
    }
}

手动配置

MistralAiChatClient 实现 ChatClientStreamingChatClient, 并使用 轻量级 Api 连接到 MistralAI 服务。

添加 spring-ai-mistralai 依赖到你的项目 Maven pom.xml 文件:

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

或者,在你的 Gradle 构建文件 build.gradle 中添加:

dependencies {
    implementation 'org.springframework.ai:spring-ai-mistralai'
}

接下来, 创建一个 MistralAiChatClient 并将其用于文本生成:

var mistralAiApi = new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));

var chatClient = new MistralAiChatClient(mistralAiApi, MistralAiChatOptions.builder()
                .withModel(MistralAiApi.ChatModel.LARGE.getValue())
                .withTemperature(0.4f)
                .withMaxToken(200)
                .build());

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

// Or with streaming responses
Flux<ChatResponse> response = chatClient.stream(
    new Prompt("Generate the names of 5 famous pirates."));
  • MistralAiChatOptions 提供对话请求的配置信息.
  • MistralAiChatOptions.Builder 流式的选项生成器.

轻量级 MistralAiApi 客户端

MistralAiApi 为 MistralAI Chat API 提供了轻量级 Java 客户端。

以下是如何以编程方式使用 api 的简单片段:

MistralAiApi mistralAiApi =
    new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));

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

// Sync request
ResponseEntity<ChatCompletion> response = mistralAiApi.chatCompletionEntity(
    new ChatCompletionRequest(List.of(chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8f, false));

// Streaming request
Flux<ChatCompletionChunk> streamResponse = mistralAiApi.chatCompletionStream(
        new ChatCompletionRequest(List.of(chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8f, true));

请关注MistralAiApi.java的 JavaDoc 以获取更多信息。

MistralAiApi 示例

作者:Jeebiz  创建时间:2024-04-05 23:43
最后编辑:Jeebiz  更新时间:2024-07-06 19:00