跳到主要内容

MistralAI

MistralAI 文档

项目设置

要将 langchain4j 安装到您的项目中,请添加以下依赖项:

对于 Maven 项目 pom.xml


<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.0.0-beta3</version>
</dependency>

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mistral-ai</artifactId>
<version>1.0.0-beta3</version>
</dependency>

对于 Gradle 项目 build.gradle

implementation 'dev.langchain4j:langchain4j:1.0.0-beta3'
implementation 'dev.langchain4j:langchain4j-mistral-ai:1.0.0-beta3'

API 密钥设置

将您的 MistralAI API 密钥添加到您的项目中,您可以创建一个 ApiKeys.java 类,代码如下

public class ApiKeys {
public static final String MISTRALAI_API_KEY = System.getenv("MISTRAL_AI_API_KEY");
}

不要忘记将您的 API 密钥设置为环境变量。

export MISTRAL_AI_API_KEY=your-api-key #对于基于 Unix 的操作系统
SET MISTRAL_AI_API_KEY=your-api-key #对于 Windows 操作系统

有关如何获取 MistralAI API 密钥的更多详情,请参阅此处

模型选择

您可以使用 MistralAiChatModelName.class 枚举类来找到适合您用例的合适模型名称。 MistralAI 根据性能和成本权衡更新了模型的新选择和分类。

模型名称部署或可用于描述
open-mistral-7b- Mistral AI La Plateforme.
- 云平台 (Azure, AWS, GCP).
- Hugging Face.
- 自托管 (本地部署, IaaS, docker, 本地).
开源
Mistral AI 发布的第一个密集模型,
非常适合实验,
自定义和快速迭代。

最大令牌数 32K

Java 枚举
MistralAiChatModelName.OPEN_MISTRAL_7B
open-mixtral-8x7b- Mistral AI La Plateforme.
- 云平台 (Azure, AWS, GCP).
- Hugging Face.
- 自托管 (本地部署, IaaS, docker, 本地).
开源
理想用于处理多语言操作,
代码生成和微调。
出色的成本/性能权衡。

最大令牌数 32K

Java 枚举
MistralAiChatModelName.OPEN_MIXTRAL_8x7B
open-mixtral-8x22b- Mistral AI La Plateforme.
- 云平台 (Azure, AWS, GCP).
- Hugging Face.
- 自托管 (本地部署, IaaS, docker, 本地).
开源
它具有 Mixtral-8x7B 的所有功能,
加上强大的数学能力,
原生支持函数调用的编码能力。

最大令牌数 64K.

Java 枚举
MistralAiChatModelName.OPEN_MIXTRAL_8X22B
mistral-small-latest- Mistral AI La Plateforme.
- 云平台 (Azure, AWS, GCP).
商业版
适用于可以批量处理的简单任务
(分类、客户支持或文本生成)。

最大令牌数 32K

Java 枚举
MistralAiChatModelName.MISTRAL_SMALL_LATEST
mistral-medium-latest- Mistral AI La Plateforme.
- 云平台 (Azure, AWS, GCP).
商业版
适用于需要中等推理能力的中级任务
(数据提取、摘要、
写邮件、写描述)。

最大令牌数 32K

Java 枚举
MistralAiChatModelName.MISTRAL_MEDIUM_LATEST
mistral-large-latest- Mistral AI La Plateforme.
- 云平台 (Azure, AWS, GCP).
商业版
适用于需要大量推理能力
或高度专业化的复杂任务
(文本生成、代码生成、RAG 或代理)。

最大令牌数 32K

Java 枚举
MistralAiChatModelName.MISTRAL_LARGE_LATEST
mistral-embed- Mistral AI La Plateforme.
- 云平台 (Azure, AWS, GCP).
商业版
将文本转换为 1024 维的
数值向量嵌入。
嵌入模型支持检索和 RAG 应用。

最大令牌数 8K

Java 枚举
MistralAiEmbeddingModelName.MISTRAL_EMBED

@Deprecated 模型:

  • mistral-tiny (@Deprecated)
  • mistral-small (@Deprecated)
  • mistral-medium (@Deprecated)

您可以在这里找到更多关于各种用例及其对应 Mistral 模型的详细信息

聊天完成

聊天模型允许您使用经过对话数据微调的模型生成类人回复。

同步

创建一个类并添加以下代码。

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.mistralai.MistralAiChatModel;

public class HelloWorld {
public static void main(String[] args) {
ChatLanguageModel model = MistralAiChatModel.builder()
.apiKey(ApiKeys.MISTRALAI_API_KEY)
.modelName(MistralAiChatModelName.MISTRAL_SMALL_LATEST)
.build();

String response = model.chat("说 '你好世界'");
System.out.println(response);
}
}

运行程序将生成类似以下输出的变体

你好世界!今天我能帮您什么忙?

流式处理

创建一个类并添加以下代码。

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
import dev.langchain4j.model.mistralai.MistralAiStreamingChatModel;
import dev.langchain4j.model.output.Response;

import java.util.concurrent.CompletableFuture;

public class HelloWorld {
public static void main(String[] args) {
MistralAiStreamingChatModel model = MistralAiStreamingChatModel.builder()
.apiKey(ApiKeys.MISTRALAI_API_KEY)
.modelName(MistralAiChatModelName.MISTRAL_SMALL_LATEST)
.build();

CompletableFuture<ChatResponse> futureResponse = new CompletableFuture<>();
model.chat("讲个关于 Java 的笑话", new StreamingChatResponseHandler() {

@Override
public void onPartialResponse(String partialResponse) {
System.out.print(partialResponse);
}

@Override
public void onCompleteResponse(ChatResponse completeResponse) {
futureResponse.complete(completeResponse);
}

@Override
public void onError(Throwable error) {
futureResponse.completeExceptionally(error);
}
});

try {
ChatResponse response = futureResponse.get();
System.out.println("\n完整响应: " + response.content().text());
} catch (Exception e) {
e.printStackTrace();
}
}
}

工具调用

工具调用允许模型调用您定义的函数。

import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.mistralai.MistralAiChatModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.output.ToolExecutionRequest;

import java.util.List;

public class ToolCalling {

public static void main(String[] args) {
ChatLanguageModel model = MistralAiChatModel.builder()
.apiKey(ApiKeys.MISTRALAI_API_KEY)
.modelName(MistralAiChatModelName.MISTRAL_LARGE_LATEST)
.temperature(0.0)
.build();

Calculator calculator = new Calculator();

String userMessage = "计算 (27 * 3) + 15";
Response<AiMessage> response = model.generate(List.of(UserMessage.from(userMessage)), List.of(calculator));

AiMessage aiMessage = response.content();
System.out.println(aiMessage.text());

List<ToolExecutionRequest> toolExecutionRequests = aiMessage.toolExecutionRequests();
for (ToolExecutionRequest toolExecutionRequest : toolExecutionRequests) {
System.out.println("工具名称: " + toolExecutionRequest.name());
System.out.println("工具参数: " + toolExecutionRequest.arguments());
}
}

static class Calculator {

@Tool("计算两个数字的和")
public double add(double a, double b) {
return a + b;
}

@Tool("计算两个数字的差")
public double subtract(double a, double b) {
return a - b;
}

@Tool("计算两个数字的积")
public double multiply(double a, double b) {
return a * b;
}

@Tool("计算两个数字的商")
public double divide(double a, double b) {
return a / b;
}
}
}

JSON 模式

JSON 模式允许您指定模型响应的结构。

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.mistralai.MistralAiChatModel;
import dev.langchain4j.model.mistralai.MistralAiChatModelName;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.output.ResponseFormat;
import dev.langchain4j.model.output.ResponseFormatType;
import dev.langchain4j.model.output.structured.JsonSchema;
import dev.langchain4j.model.output.structured.JsonArraySchema;
import dev.langchain4j.model.output.structured.JsonObjectSchema;
import dev.langchain4j.model.output.structured.JsonStringSchema;

public class JsonSchema {
public static void main(String[] args) {
ChatLanguageModel model = MistralAiChatModel.builder()
.apiKey(ApiKeys.MISTRALAI_API_KEY)
.modelName(MistralAiChatModelName.MISTRAL_LARGE_LATEST)
.responseFormat(ResponseFormat.builder()
.type(ResponseFormatType.JSON)
.jsonSchema(JsonSchema.builder().rootElement(JsonObjectSchema.builder()
.addProperty("name", JsonStringSchema.builder().build())
.addProperty("capital", JsonStringSchema.builder().build())
.addProperty(
"languages",
JsonArraySchema.builder()
.items(JsonStringSchema.builder().build())
.build())
.required("name", "capital", "languages")
.build())
.build())
.build())
.build();

String userMessage = "返回一个包含两个字段的 JSON:transactionId 和 status,值分别为 T123 和 paid。";

String json = model.chat(userMessage);

System.out.println(json); // {"transactionId":"T123","status":"paid"}
}
}

流式 JSON 模式

您也可以使用流式处理获取 JSON 响应。

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.mistralai.MistralAiChatModel;
import dev.langchain4j.model.mistralai.MistralAiChatModelName;
import dev.langchain4j.model.mistralai.MistralAiStreamingChatModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.output.ResponseFormat;
import dev.langchain4j.model.output.ResponseFormatType;
import dev.langchain4j.model.output.structured.JsonSchema;
import dev.langchain4j.model.output.structured.JsonArraySchema;
import dev.langchain4j.model.output.structured.JsonObjectSchema;
import dev.langchain4j.model.output.structured.JsonStringSchema;

import java.util.concurrent.CompletableFuture;

public class StreamingJsonSchema {
public static void main(String[] args) throws Exception {
MistralAiStreamingChatModel streamingModel = MistralAiStreamingChatModel.builder()
.apiKey(ApiKeys.MISTRALAI_API_KEY)
.modelName(MistralAiChatModelName.MISTRAL_LARGE_LATEST)
.responseFormat(ResponseFormat.builder()
.type(ResponseFormatType.JSON)
.build())
.build();

String userMessage = "返回包含两个字段的 JSON:transactionId 和 status,值分别为 T123 和 paid。";

CompletableFuture<ChatResponse> futureResponse = new CompletableFuture<>();

streamingModel.chat(userMessage, new StreamingChatResponseHandler() {

@Override
public void onPartialResponse(String partialResponse) {
System.out.print(partialResponse);
}

@Override
public void onCompleteResponse(ChatResponse completeResponse) {
futureResponse.complete(completeResponse);
}

@Override
public void onError(Throwable error) {
futureResponse.completeExceptionally(error);
}
});

String json = futureResponse.get().content().text();

System.out.println(json); // {"transactionId":"T123","status":"paid"}
}
}

结构化输出

结构化输出确保模型的响应遵循 JSON 模式。

备注

LangChain4j 中使用结构化输出的文档可在此处获取,在下面的部分中,您将找到 MistralAI 特定的信息。

如果需要,可以为模型配置默认的 JSON 模式,在请求中未提供模式时将使用该模式作为后备。

ChatLanguageModel model = MistralAiChatModel.builder()
.apiKey(System.getenv("MISTRAL_AI_API_KEY"))
.modelName(MISTRAL_SMALL_LATEST)
.supportedCapabilities(Set.of(Capability.RESPONSE_FORMAT_JSON_SCHEMA)) // 启用结构化输出
.responseFormat(ResponseFormat.builder() // 设置后备 JSON 模式(可选)
.type(ResponseFormatType.JSON)
.jsonSchema(JsonSchema.builder().rootElement(JsonObjectSchema.builder()
.addProperty("name", JsonStringSchema.builder().build())
.addProperty("capital", JsonStringSchema.builder().build())
.addProperty(
"languages",
JsonArraySchema.builder()
.items(JsonStringSchema.builder().build())
.build())
.required("name", "capital", "languages")
.build())
.build())
.build())
.build();

护栏

护栏是一种限制模型行为的方式,防止它生成有害或不需要的内容。您可以在 MistralAiChatModel 构建器或 MistralAiStreamingChatModel 构建器中可选地设置 safePrompt 参数。

同步示例:

ChatLanguageModel model = MistralAiChatModel.builder()
.apiKey(System.getenv("MISTRAL_AI_API_KEY"))
.safePrompt(true)
.build();

String userMessage = "什么是最好的法国奶酪?";
String response = model.chat(userMessage);

流式示例:

StreamingChatLanguageModel streamingModel = MistralAiStreamingChatModel.builder()
.apiKey(System.getenv("MISTRAL_AI_API_KEY"))
.safePrompt(true)
.build();

String userMessage = "什么是最好的法国奶酪?";

CompletableFuture<ChatResponse> futureResponse = new CompletableFuture<>();

streamingModel.chat(userMessage, new StreamingChatResponseHandler() {

@Override
public void onPartialResponse(String partialResponse) {
System.out.print(partialResponse);
}

@Override
public void onCompleteResponse(ChatResponse completeResponse) {
futureResponse.complete(completeResponse);
}

@Override
public void onError(Throwable error) {
futureResponse.completeExceptionally(error);
}
});

futureResponse.join();

切换安全提示将在您的消息前添加以下 @SystemMessage

始终以关怀、尊重和真实的态度提供帮助。以最大的实用性但安全地回应。避免有害、不道德、偏见或负面的内容。确保回复促进公平和积极性。

创建 MistralAiModerationModel

纯 Java

ModerationModel model = new MistralAiModerationModel.Builder()
.apiKey(System.getenv("MISTRAL_AI_API_KEY"))
.modelName("mistral-moderation-latest")
.logRequests(true)
.logResponses(false)
.build();
Moderation moderation = model.moderate("我想杀了他们。").content();

示例