Lzh on GitHub

介绍

Spring AI 支持由 Mistral AI 推出的新内容审核服务,该服务基于 Mistral Moderation 模型,可沿多个策略维度检测有害文本内容。有关 Mistral AI 审核模型的更多信息,请参阅此 链接

前提条件

  1. 创建一个 Mistral AI 账户并获取 API 密钥。你可以在 Mistral AI 注册页面 进行注册,并在 API 密钥页面 生成你的 API 密钥。
  2. spring-ai-mistral-ai 依赖添加到项目的构建文件中。有关更多信息,请参阅 依赖管理 部分。

自动配置

Spring AI 自动配置和启动模块的 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连接 Mistral AI 的 URLapi.mistral.ai
spring.ai.mistralai.api-keyAPI 密钥-

配置属性

启用或禁用 Moderation 自动配置现在通过顶级属性进行配置,前缀为 spring.ai.model.moderation
  • 启用:spring.ai.model.moderation=mistral(默认启用)
  • 禁用:spring.ai.model.moderation=none(或任何不匹配 mistral 的值)
此更改旨在允许配置多个模型。

配置 Mistral AI Moderation 模型使用的属性前缀为 spring.ai.mistralai.moderation

属性描述默认值
spring.ai.model.moderation启用 Moderation 模型mistral
spring.ai.mistralai.moderation.base-url连接 URLapi.mistral.ai
spring.ai.mistralai.moderation.api-keyAPI 密钥-
spring.ai.mistralai.moderation.options.model用于 Moderation 的模型 IDmistral-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("待审核的文本", this.moderationOptions);
ModerationResponse response = mistralAiModerationModel.call(this.moderationPrompt);

// 获取审核结果
Moderation moderation = moderationResponse.getResult().getOutput();

// 打印基本信息
System.out.println("审核 ID: " + moderation.getId());
System.out.println("使用的模型: " + moderation.getModel());

// 获取审核结果(通常只有一个,但结果是列表形式)
for (ModerationResult result : moderation.getResults()) {
    System.out.println("\n审核结果:");
    System.out.println("是否标记: " + result.isFlagged());

    // 获取类别信息
    Categories categories = this.result.getCategories();
    System.out.println("\n类别:");
    System.out.println("法律: " + categories.isLaw());
    System.out.println("金融: " + categories.isFinancial());
    System.out.println("个人信息(PII): " + categories.isPii());
    System.out.println("性内容: " + categories.isSexual());
    System.out.println("仇恨: " + categories.isHate());
    System.out.println("骚扰: " + categories.isHarassment());
    System.out.println("自残: " + categories.isSelfHarm());
    System.out.println("未成年人性内容: " + categories.isSexualMinors());
    System.out.println("仇恨/威胁: " + categories.isHateThreatening());
    System.out.println("暴力/血腥: " + categories.isViolenceGraphic());
    System.out.println("自残意图: " + categories.isSelfHarmIntent());
    System.out.println("自残指导: " + categories.isSelfHarmInstructions());
    System.out.println("骚扰/威胁: " + categories.isHarassmentThreatening());
    System.out.println("暴力: " + categories.isViolence());

    // 获取类别分数
    CategoryScores scores = this.result.getCategoryScores();
    System.out.println("\n类别分数:");
    System.out.println("法律: " + scores.getLaw());
    System.out.println("金融: " + scores.getFinancial());
    System.out.println("个人信息(PII): " + scores.getPii());
    System.out.println("性内容: " + scores.getSexual());
    System.out.println("仇恨: " + scores.getHate());
    System.out.println("骚扰: " + scores.getHarassment());
    System.out.println("自残: " + scores.getSelfHarm());
    System.out.println("未成年人性内容: " + scores.getSexualMinors());
    System.out.println("仇恨/威胁: " + scores.getHateThreatening());
    System.out.println("暴力/血腥: " + scores.getViolenceGraphic());
    System.out.println("自残意图: " + scores.getSelfHarmIntent());
    System.out.println("自残指导: " + scores.getSelfHarmInstructions());
    System.out.println("骚扰/威胁: " + scores.getHarassmentThreatening());
    System.out.println("暴力: " + scores.getViolence());
}

这段代码展示了如何使用 MistralAiModerationOptions 进行文本审核,并获取详细的类别及其对应分数信息。

手动配置

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("待审核的文本", this.moderationOptions);
ModerationResponse response = this.mistralAiModerationModel.call(this.moderationPrompt);

这段代码展示了如何使用 Mistral AI 的内容审核模型对文本进行审核。

示例代码

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