跳到主要内容

审核

Deepseek 3.2 中英对照 Mistral AI Moderation

介绍

Spring AI 现已支持由Mistral AI推出的全新内容审核服务,该服务基于Mistral Moderation模型驱动。它能够按照多项策略维度检测有害文本内容。有关Mistral AI审核模型的更多信息,请参阅此链接

前提条件

  1. 创建 Mistral AI 账户并获取 API 密钥。您可以在 Mistral AI 注册页面 注册,并在 API 密钥页面 生成 API 密钥。

  2. spring-ai-mistral-ai 依赖项添加到项目的构建文件中。更多信息,请参阅 依赖管理 部分。

自动配置

备注

Spring AI 的自动配置和 starter 模块的 artifact 名称发生了重大变化。更多信息请参阅 升级说明

Spring AI 为 Mistral AI 的审核模型提供了 Spring Boot 自动配置。要启用此功能,请将以下依赖项添加到您项目的 Maven pom.xml 文件中:

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

或添加到您的 Gradle build.gradle 构建文件中:

dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-mistral-ai'
}
提示

请参考依赖管理章节,将 Spring AI BOM 添加到您的构建文件中。

调节属性

连接属性

前缀 spring.ai.mistralai 用作属性前缀,允许您连接到 Mistral AI。

属性描述默认值
spring.ai.mistralai.base-url连接到的 URLapi.mistral.ai
spring.ai.mistralai.api-keyAPI 密钥-

配置属性

备注

现在通过以 spring.ai.model.moderation 为前缀的顶级属性来配置审核自动功能的启用和禁用。

启用方式:spring.ai.model.moderation=mistral(默认已启用)

禁用方式:spring.ai.model.moderation=none(或任何不匹配 mistral 的值)

此项变更是为了支持配置多个模型。

前缀 spring.ai.mistralai.moderation 被用作配置 Mistral AI 内容审核模型的属性前缀。

属性描述默认值
spring.ai.model.moderation启用审核模型mistral
spring.ai.mistralai.moderation.base-url连接的 URLapi.mistral.ai
spring.ai.mistralai.moderation.api-keyAPI 密钥-
spring.ai.mistralai.moderation.options.model用于审核的模型 ID。mistral-moderation-latest

:::注意
您可以覆盖通用的 spring.ai.mistralai.base-urlspring.ai.mistralai.api-key 属性。spring.ai.mistralai.moderation.base-urlspring.ai.mistralai.moderation.api-key 属性如果已设置,将优先于通用属性。如果您希望针对不同模型和不同的模型端点使用不同的 Mistral AI 账户,这会非常有用。
:::

:::提示
所有以 spring.ai.mistralai.moderation.options 为前缀的属性均可在运行时被覆盖。
:::

运行时选项

MistralAiModerationOptions 类提供了在执行内容审核请求时可使用的配置选项。启动时,系统会采用 spring.ai.mistralai.moderation 指定的配置,但您可以在运行时覆盖这些设置。

例如:

MistralAiModerationOptions moderationOptions = MistralAiModerationOptions.builder()
.model("mistral-moderation-latest")
.build();

ModerationPrompt moderationPrompt = new ModerationPrompt("Text to be moderated", this.moderationOptions);
ModerationResponse response = mistralAiModerationModel.call(this.moderationPrompt);

// Access the moderation results
Moderation moderation = moderationResponse.getResult().getOutput();

// Print general information
System.out.println("Moderation ID: " + moderation.getId());
System.out.println("Model used: " + moderation.getModel());

// Access the moderation results (there's usually only one, but it's a list)
for (ModerationResult result : moderation.getResults()) {
System.out.println("\nModeration Result:");
System.out.println("Flagged: " + result.isFlagged());

// Access categories
Categories categories = this.result.getCategories();
System.out.println("\nCategories:");
System.out.println("Law: " + categories.isLaw());
System.out.println("Financial: " + categories.isFinancial());
System.out.println("PII: " + categories.isPii());
System.out.println("Sexual: " + categories.isSexual());
System.out.println("Hate: " + categories.isHate());
System.out.println("Harassment: " + categories.isHarassment());
System.out.println("Self-Harm: " + categories.isSelfHarm());
System.out.println("Sexual/Minors: " + categories.isSexualMinors());
System.out.println("Hate/Threatening: " + categories.isHateThreatening());
System.out.println("Violence/Graphic: " + categories.isViolenceGraphic());
System.out.println("Self-Harm/Intent: " + categories.isSelfHarmIntent());
System.out.println("Self-Harm/Instructions: " + categories.isSelfHarmInstructions());
System.out.println("Harassment/Threatening: " + categories.isHarassmentThreatening());
System.out.println("Violence: " + categories.isViolence());

// Access category scores
CategoryScores scores = this.result.getCategoryScores();
System.out.println("\nCategory Scores:");
System.out.println("Law: " + scores.getLaw());
System.out.println("Financial: " + scores.getFinancial());
System.out.println("PII: " + scores.getPii());
System.out.println("Sexual: " + scores.getSexual());
System.out.println("Hate: " + scores.getHate());
System.out.println("Harassment: " + scores.getHarassment());
System.out.println("Self-Harm: " + scores.getSelfHarm());
System.out.println("Sexual/Minors: " + scores.getSexualMinors());
System.out.println("Hate/Threatening: " + scores.getHateThreatening());
System.out.println("Violence/Graphic: " + scores.getViolenceGraphic());
System.out.println("Self-Harm/Intent: " + scores.getSelfHarmIntent());
System.out.println("Self-Harm/Instructions: " + scores.getSelfHarmInstructions());
System.out.println("Harassment/Threatening: " + scores.getHarassmentThreatening());
System.out.println("Violence: " + scores.getViolence());
}

手动配置

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

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

或将其添加到你的 Gradle build.gradle 构建文件中:

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

:::提示
请参考依赖管理章节,将 Spring AI BOM 添加到您的构建文件中。
:::

接下来,创建一个 MistralAiModerationModel:

MistralAiModerationApi mistralAiModerationApi = new MistralAiModerationApi(System.getenv("MISTRAL_AI_API_KEY"));

MistralAiModerationModel mistralAiModerationModel = new MistralAiModerationModel(this.mistralAiModerationApi);

MistralAiModerationOptions moderationOptions = MistralAiModerationOptions.builder()
.model("mistral-moderation-latest")
.build();

ModerationPrompt moderationPrompt = new ModerationPrompt("Text to be moderated", this.moderationOptions);
ModerationResponse response = this.mistralAiModerationModel.call(this.moderationPrompt);

示例代码

MistralAiModerationModelIT 测试提供了一些使用该库的通用示例。你可以参考此测试以获取更详细的使用示例。