内容审核

简介

Spring AI 支持由 Mistral AI 推出的新审核服务,该服务由 Mistral Moderation 模型提供支持。 它能够从多个政策维度检测有害文本内容。 访问此 链接 获取有关 Mistral AI 审核模型的更多信息。

前提条件

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

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

自动配置

Spring AI 自动配置和启动器模块的构件名称发生了重大变化。 请参考 升级说明 获取更多信息。

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

连接 URL

api.mistral.ai

spring.ai.mistralai.api-key

API 密钥

-

配置属性

审核自动配置的启用和禁用现在通过前缀为 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

连接 URL

api.mistral.ai

spring.ai.mistralai.moderation.api-key

API 密钥

-

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("需要审核的文本", 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("个人身份信息: " + 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("个人身份信息: " + 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());
}

手动配置

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

<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);

示例代码

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