Spring AI 全面支持 Mistral AI 旗下各类大语言模型,可用于构建多语种对话助手。Mistral AI 同时提供 OpenAI API 兼容接口,你也可以通过 Spring AI OpenAI 集成模块调用 Mistral 服务。
前提条件
在 Mistral AI 官网注册账号并创建 API Key
将密钥配置到 Spring AI 配置项:
spring.ai.mistralai.api-key
基础配置(application.properties)
spring.ai.mistralai.api-key=<your-mistralai-api-key>
安全配置(环境变量)
# application.yml
spring:
ai:
mistralai:
api-key: ${MISTRALAI_API_KEY}
# 环境变量
export MISTRALAI_API_KEY=<your-mistralai-api-key>自动配置依赖
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-mistral-ai</artifactId> </dependency>
核心配置属性
1. 重试配置
| 属性 | 说明 | 默认值 |
|---|---|---|
| spring.ai.retry.max-attempts | 最大重试次数 | 10 |
| spring.ai.retry.backoff.initial-interval | 初始退避时间 | 2s |
2. 连接配置
| 属性 | 说明 | 默认值 |
|---|---|---|
| spring.ai.mistralai.base-url | 服务地址 | api.mistral.ai |
| spring.ai.mistralai.api-key | API 密钥 | - |
3. 模型配置
| 属性 | 说明 | 可选值 |
|---|---|---|
| spring.ai.model.chat | 启用模型 | mistral(默认) |
| spring.ai.mistralai.chat.options.model | 模型名称 | mistral-large-latest、mistral-small-latest 等 |
| spring.ai.mistralai.chat.options.temperature | 随机性 | 0~1,默认 0.8 |
| spring.ai.mistralai.chat.options.maxTokens | 最大生成长度 | - |
运行时动态参数
可在请求时覆盖默认配置:
ChatResponse response = chatModel.call(
new Prompt("生成5位著名海盗的名字",
MistralAiChatOptions.builder()
.model(MistralAiApi.ChatModel.LARGE.getValue())
.temperature(0.5)
.build()
));函数调用(Tool Calling)
支持注册自定义 Java 函数,模型可智能选择并调用,实现大模型与外部系统联动。
结构化输出(JSON Schema)
Mistral 原生支持 JSON 模式与严格 Schema 校验,确保输出格式符合预期:
// 结构化输出
record MovieRecommendation(String title, String director, int year) {}
var options = MistralAiChatOptions.builder()
.responseFormat(ResponseFormat.jsonSchema(MovieRecommendation.class))
.build();多模态(视觉理解)
支持 pixtral-large-latest 视觉模型,可传入图片进行理解分析:
var image = new ClassPathResource("/test.png");
var message = new UserMessage("描述这张图片",
new Media(MimeTypeUtils.IMAGE_PNG, image));
ChatResponse response = chatModel.call(new Prompt(message,
ChatOptions.builder().model("pixtral-large-latest").build()));OpenAI API 兼容模式
可直接使用 OpenAI 客户端接入 Mistral:
spring.ai.openai.chat.base-url=https://api.mistral.ai
spring.ai.openai.chat.options.model=mistral-small-latest
spring.ai.openai.chat.api-key=${MISTRALAI_API_KEY}OCR 文字识别
Spring AI 集成 Mistral OCR API,可从文档/图片中提取文本:
MistralOcrApi ocrApi = new MistralOcrApi(apiKey);
var request = new MistralOcrApi.OCRRequest(
"mistral-ocr-latest", "doc-1",
new MistralOcrApi.OCRRequest.DocumentURLChunk("https://example.com/doc.pdf"));
var response = ocrApi.ocr(request);示例控制器
@RestController
public class ChatController {
private final MistralAiChatModel chatModel;
@Autowired
public ChatController(MistralAiChatModel chatModel) {
this.chatModel = chatModel;
}
// 同步调用
@GetMapping("/ai/generate")
public Mapgenerate(@RequestParam(defaultValue = "讲个笑话") String message) {
return Map.of("generation", chatModel.call(message));
}
// 流式调用
@GetMapping("/ai/generateStream")
public FluxgenerateStream(@RequestParam(defaultValue = "讲个笑话") String message) {
return chatModel.stream(new Prompt(new UserMessage(message)));
}
}手动配置(不使用自动配置)
// 初始化客户端
var mistralAiApi = new MistralAiApi(System.getenv("MISTRALAI_API_KEY"));
// 构建模型
var chatModel = new MistralAiChatModel(mistralAiApi,
MistralAiChatOptions.builder()
.model("mistral-large-latest")
.temperature(0.4)
.build());
// 调用
ChatResponse response = chatModel.call(new Prompt("你好"));