Mistral AI 聊天

Spring AI 支持来自 Mistral AI 的各种 AI 语言模型。你可以与Mistral AI语言模型互动,基于Mistral模型创建多语言对话助手。spring-doc.cadn.net.cn

Mistral AI 还提供兼容 OpenAI API 的终端。 查看OpenAI API兼容性部分,了解如何使用Spring AI OpenAI集成与Mistral端点通信。

前提条件

你需要用 Mistral AI 创建一个 API 来访问 Mistral AI 语言模型。spring-doc.cadn.net.cn

Mistral AI注册页面创建账户,并在API密钥页面生成Tokens。spring-doc.cadn.net.cn

Spring AI 项目定义了一个配置属性,名为spring.ai.mistralai.api-key你应该设置为API 密钥摘自 console.mistral.ai。spring-doc.cadn.net.cn

你可以在你的application.properties文件:spring-doc.cadn.net.cn

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

为了在处理敏感信息如 API 密钥时增强安全性,您可以使用 Spring 表达式语言(SpEL)引用自定义环境变量:spring-doc.cadn.net.cn

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

你也可以在应用代码中编程设置此配置:spring-doc.cadn.net.cn

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

添加仓库和物料清单

Spring AI 产物发布于 Maven Central 和 Spring Snapshot 仓库中。 请参阅神器仓库部分,将这些仓库添加到你的构建系统中。spring-doc.cadn.net.cn

为帮助依赖管理,Spring AI 提供了物料清单(BOM),确保整个项目中使用一致版本的 Spring AI。请参考依赖管理部分,将春季AI物料清单添加到你的构建系统中。spring-doc.cadn.net.cn

自动配置

春季AI自动配置、起始模块的工件名称发生了重大变化。 更多信息请参阅升级说明spring-doc.cadn.net.cn

Spring AI 为 Mistral AI 聊天客户端提供 Spring Boot 自动配置。 要启用它,请在项目的Maven中添加以下依赖pom.xml文件:spring-doc.cadn.net.cn

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

或者去你的Gradlebuild.gradle构建文件。spring-doc.cadn.net.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-mistral-ai'
}
请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。

聊天属性

重试属性

前缀spring.ai.retry作为属性前缀,允许你配置Mistral AI聊天模型的重试机制。spring-doc.cadn.net.cn

属性 描述 默认值

spring.ai.retry.max尝试spring-doc.cadn.net.cn

重试次数上限。spring-doc.cadn.net.cn

10spring-doc.cadn.net.cn

spring.ai.retry.backoff.initial-intervalspring-doc.cadn.net.cn

指数式退避政策的初始睡眠时长。spring-doc.cadn.net.cn

两秒钟。spring-doc.cadn.net.cn

spring.ai.retry.backoff.multiplierspring-doc.cadn.net.cn

后退间隔倍数。spring-doc.cadn.net.cn

5spring-doc.cadn.net.cn

spring.ai.retry.backoff.max区间spring-doc.cadn.net.cn

最大退回时间。spring-doc.cadn.net.cn

3分钟。spring-doc.cadn.net.cn

spring.ai.retry.on-client-errorsspring-doc.cadn.net.cn

如果为假,抛出非瞬态AiException,且不要尝试重试4xx客户端错误代码spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

spring.ai.retry.exclude-on-http-codesspring-doc.cadn.net.cn

不应该触发重试的HTTP状态码列表(例如抛出非瞬态Ai异常)。spring-doc.cadn.net.cn

emptyspring-doc.cadn.net.cn

spring.ai.retry.on-http-codesspring-doc.cadn.net.cn

应触发重试的HTTP状态码列表(例如抛出TransientAiException)。spring-doc.cadn.net.cn

emptyspring-doc.cadn.net.cn

连接性质

前缀春.ai.mistralai作为属性前缀,允许你连接到OpenAI。spring-doc.cadn.net.cn

属性 描述 默认值

Spring.ai.mistralai.base-urlspring-doc.cadn.net.cn

连接的URL(链接)spring-doc.cadn.net.cn

api.mistral.aispring-doc.cadn.net.cn

spring.ai.mistralai.api-keyspring-doc.cadn.net.cn

API 密钥spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

配置属性

现在,启用和禁用聊天自动配置通过带有前缀的顶层属性进行配置spring.ai.model.chat.spring-doc.cadn.net.cn

启用时,spring.ai.model.chat=mistral(默认启用)spring-doc.cadn.net.cn

要禁用,可以选择 spring.ai.model.chat=none(或任何与 mistral 不匹配的值)spring-doc.cadn.net.cn

此改动旨在允许配置多个模型。spring-doc.cadn.net.cn

前缀春.ai.mistralai.chat是允许你配置Mistral AI聊天模型实现的属性前缀。spring-doc.cadn.net.cn

属性 描述 默认值

spring.ai.mistralai.chat.enabled(已移除且不再有效)spring-doc.cadn.net.cn

启用Mistral AI聊天模型。spring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

spring.ai.model.chatspring-doc.cadn.net.cn

启用Mistral AI聊天模型。spring-doc.cadn.net.cn

密斯特拉尔spring-doc.cadn.net.cn

spring.ai.mistralai.chat.base-urlspring-doc.cadn.net.cn

可选覆盖Spring.ai.mistralai.base-url属性以提供聊天专用的URL。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.api-keyspring-doc.cadn.net.cn

可选覆盖spring.ai.mistralai.api-key提供针对聊天的 API 密钥。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.modelspring-doc.cadn.net.cn

这就是Mistral AI聊天模型的使用方式spring-doc.cadn.net.cn

开放-米斯特拉尔-7B,Open-Mixtral-8x7B,Open-Mixtral-8X22B,米斯特拉尔-小-最新,mistral-large-latestspring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.temperature.spring-doc.cadn.net.cn

采样温度决定了生成完备的显得创造力。值越高,输出越随机,值越低,结果越聚焦且确定性强。不建议进行修改温度top_p对于相同的完备请求,这两个设置的相互作用很难预测。spring-doc.cadn.net.cn

0.8spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.maxTokensspring-doc.cadn.net.cn

聊天补全时最多可生成的Tokens数。输入标记和生成标记的总长度受模型上下文长度限制。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.safe提示spring-doc.cadn.net.cn

提示是否在所有对话前注入安全提示。spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.randomSeedspring-doc.cadn.net.cn

此功能目前处于测试阶段。如果有明确规定,我们的系统会尽最大努力以确定性方式采样,使得用相同的种子和参数重复请求应返回相同的结果。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.stopspring-doc.cadn.net.cn

如果检测到该Tokens,就停止生成。或者在提供数组时检测到这些标记中的一个。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.topPspring-doc.cadn.net.cn

一种与温度抽样不同的替代方案,称为核抽样,模型考虑以top_p概率质量计算的符号结果。因此,0.1 意味着只考虑构成概率质量最高 10% 的Tokens。我们通常建议更改这些或温度但不能两者兼有。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.response格式spring-doc.cadn.net.cn

一个对象,指定模型必须输出的格式。设定为{ “类型”:“json_object” }启用 JSON 模式,保证模型生成的消息是有效的 JSON。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.toolsspring-doc.cadn.net.cn

模型可能调用的工具列表。目前,仅支持函数作为工具。利用该列表提供模型可能生成 JSON 输入的函数列表。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.toolChoicespring-doc.cadn.net.cn

控制模型调用的函数(如果有的话)。没有意味着模型不会调用函数,而是生成消息。自动意味着模型可以在生成消息或调用函数之间选择。通过指定特定函数{“类型:”函数“, ”函数“: {”name“: ”my_function“}}强制模型调用该函数。没有当没有函数存在时,是默认的。自动如果函数存在,则是默认的。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.tool-namesspring-doc.cadn.net.cn

列出了工具,按名称标识,用于在一次提示请求中实现函数调用。带有这些名称的工具必须存在于 ToolCallback 注册表中。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.tool-callbacksspring-doc.cadn.net.cn

工具回调以注册到聊天模型。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.mistralai.chat.options.internal-tool-execution-enabledspring-doc.cadn.net.cn

如果为 false,Spring AI 不会在内部处理工具调用,而是代理到客户端。然后由客户端负责处理工具调用,将其派遣到相应函数,并返回结果。如果为真(默认为真),Spring AI 会在内部处理函数调用。仅适用于支持函数调用的聊天模型spring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

你可以覆盖公共信息Spring.ai.mistralai.base-urlspring.ai.mistralai.api-key对于聊天模型嵌入模型实现。 这spring.ai.mistralai.chat.base-urlspring.ai.mistralai.chat.api-key如果属性被设置,则优先于共同属性。 如果你想为不同模型和不同模型端点使用不同的Mistral AI账户,这非常有用。
所有以spring.ai.mistralai.chat.optionss可以通过在运行时为 Run 添加请求特定的运行时选项来覆盖提示叫。

运行时选项

MistralAiChatOptions.java提供模型配置,如所用模型、温度、频率惩罚等。spring-doc.cadn.net.cn

启动时,默认选项可以配置为MistralAiChatModel(api, options)构造者或spring.ai.mistralai.chat.options.*性能。spring-doc.cadn.net.cn

运行时,您可以通过添加新的、针对特定请求的选项来覆盖默认选项提示叫。 例如,要覆盖特定请求的默认型号和温度:spring-doc.cadn.net.cn

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        MistralAiChatOptions.builder()
            .model(MistralAiApi.ChatModel.LARGE.getValue())
            .temperature(0.5)
        .build()
    ));
除了模型特定的 MistralAiChatOptions 外,你还可以使用用 ChatOptions#builder() 创建的便携式 ChatOptions 实例。

函数调用

你可以用MistralAiChatModel并让Mistral AI模型智能选择输出包含参数的JSON对象,以调用一个或多个注册函数。 这是一种强大的技术,将LLM功能与外部工具和API连接起来。 阅读更多关于工具调用的信息。spring-doc.cadn.net.cn

模 态

多模态指的是模型能够同时理解和处理来自多种来源的信息,包括文本、图像、音频及其他数据格式。 Mistral AI 支持文字和视觉模式。spring-doc.cadn.net.cn

视觉

提供视觉多模态支持的Mistral AI模型包括pixtral-large-latest. 更多信息请参阅《愿景指南》。spring-doc.cadn.net.cn

Mistral AI 用户消息 API 可以将 base64 编码的图片或图片链接列表与消息一同整合。 Spring AI 的 Message 界面通过引入媒体类型,促进了多模态 AI 模型的发展。 这种类型包含了关于消息中媒体附件的数据和详细信息,利用Spring的org.springframework.util.MimeType以及一个org.springframework.core.io.Resource对于原始媒体数据。spring-doc.cadn.net.cn

以下是摘自该代码的示例MistralAiChatModelIT.java,展示了用户文本与图像的融合。spring-doc.cadn.net.cn

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,
        ChatOptions.builder().model(MistralAiApi.ChatModel.PIXTRAL_LARGE.getValue()).build()));

或图片URL的等价:spring-doc.cadn.net.cn

var userMessage = new UserMessage("Explain what do you see on this picture?",
        new Media(MimeTypeUtils.IMAGE_PNG,
                URI.create("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png")));

ChatResponse response = chatModel.call(new Prompt(this.userMessage,
        ChatOptions.builder().model(MistralAiApi.ChatModel.PIXTRAL_LARGE.getValue()).build()));
你也可以同时传递多张图像。

示例展示了一个以multimodal.test.png图像:spring-doc.cadn.net.cn

多模态测试图像

并附上短信“请解释你在这张图片上看到了什么?”,并生成如下回复:spring-doc.cadn.net.cn

This is an image of a fruit bowl with a simple design. The bowl is made of metal with curved wire edges that
create an open structure, allowing the fruit to be visible from all angles. Inside the bowl, there are two
yellow bananas resting on top of what appears to be a red apple. The bananas are slightly overripe, as
indicated by the brown spots on their peels. The bowl has a metal ring at the top, likely to serve as a handle
for carrying. The bowl is placed on a flat surface with a neutral-colored background that provides a clear
view of the fruit inside.

OpenAI API 兼容性

Mistral 兼容 OpenAI API,你可以用 Spring AI OpenAI 客户端与 Mistrial 沟通。 为此,你需要配置 OpenAI 的 Mistral AI 平台的基础 URL:spring.ai.openai.chat.base-url=https://api.mistral.ai,并选择一个Mistral模型:spring.ai.openai.chat.options.model=mistral-small-latest并设置了Mistral AI API密钥:Spring.AI.openai.chat.api-key=<YOUR MISTRAL API KEY.spring-doc.cadn.net.cn

可以查看MistralWithOpenAiChatModelIT.java测试,了解如何使用Mistral替代Spring AI OpenAI的示例。spring-doc.cadn.net.cn

采样控制器(自动配置)

创建一个新的 Spring Boot 项目并添加Spring-ai-starter-model-mistral-ai对你的POM(或Gradle)依赖。spring-doc.cadn.net.cn

添加一个application.properties归档于以下src/主/资源用于启用和配置Mistral AI聊天模型的目录:spring-doc.cadn.net.cn

spring.ai.mistralai.api-key=YOUR_API_KEY
spring.ai.mistralai.chat.options.model=mistral-small
spring.ai.mistralai.chat.options.temperature=0.7
替换API密钥用你的密斯特拉尔AI资质。

这将产生MistralAiChatModel你可以把这些实现注入到你的类中。 这里有一个简单的例子@RestController使用聊天模式生成文本的课程。spring-doc.cadn.net.cn

@RestController
public class ChatController {

    private final MistralAiChatModel chatModel;

    @Autowired
    public ChatController(MistralAiChatModel 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) {
        var prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }
}

手动配置

MistralAiChatModel 实现了聊天模型StreamingChatModel并使用低级 MistralAiApi 客户端连接 Mistral AI 服务。spring-doc.cadn.net.cn

添加春艾米斯特拉尔艾对你项目Maven的依赖pom.xml文件:spring-doc.cadn.net.cn

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

或者去你的Gradlebuild.gradle构建文件。spring-doc.cadn.net.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-mistral-ai'
}
请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。

接下来,创建一个MistralAiChatModel并用于文本生成:spring-doc.cadn.net.cn

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

var chatModel = new MistralAiChatModel(this.mistralAiApi, MistralAiChatOptions.builder()
                .model(MistralAiApi.ChatModel.LARGE.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> response = this.chatModel.stream(
    new Prompt("Generate the names of 5 famous pirates."));

MistralAiChatOptions提供聊天请求的配置信息。 这MistralAiChatOptions.Builder是流利期权构建者。spring-doc.cadn.net.cn

低级MistralAiApi客户端

MistralAiApi 提供了一个轻量级的 Mistral AI API Java 客户端。spring-doc.cadn.net.cn

这里有一个简单的片段,展示了如何以程序方式使用该 API:spring-doc.cadn.net.cn

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

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

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

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

更多信息请关注MistralAiApi.java的JavaDoc。spring-doc.cadn.net.cn

MistralAiApi 样本

Mistral AI OCR

Spring AI 支持通过 Mistral AI 进行光学字符识别(OCR)。这允许你从文档中提取文本和图像数据。spring-doc.cadn.net.cn

前提条件

你需要用 Mistral AI 创建一个 API 来访问 Mistral AI 语言模型。 在Mistral AI注册页面创建账户,并在API密钥页面生成Tokens。spring-doc.cadn.net.cn

添加依赖关系

要使用 Mistral AI OCR API,你需要添加春艾米斯特拉尔艾对项目的依赖。spring-doc.cadn.net.cn

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

或者去你的Gradlebuild.gradle构建文件。spring-doc.cadn.net.cn

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

低级MistralOcrApi客户端

MistralOcrApiMistral AI OCR API 提供了一个轻量级的 Java 客户端。spring-doc.cadn.net.cn

这里有一个简单的片段,展示了如何以程序方式使用该 API:spring-doc.cadn.net.cn

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

String documentUrl = "https://arxiv.org/pdf/2201.04234";
MistralOcrApi.OCRRequest request = new MistralOcrApi.OCRRequest(
        MistralOcrApi.OCRModel.MISTRAL_OCR_LATEST.getValue(), "test_id",
        new MistralOcrApi.OCRRequest.DocumentURLChunk(documentUrl), List.of(0, 1, 2), true, 5, 50);

ResponseEntity<MistralOcrApi.OCRResponse> response = mistralAiApi.ocr(request);

更多信息请关注MistralOcrApi.java的JavaDoc。spring-doc.cadn.net.cn

MistralOcrApi 样本