内容审核

简介

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

[role="bare"][role="bare"][role="bare"]https://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

[role="bare"][role="bare"][role="bare"]https://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("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 测试提供了一些如何使用该库的通用示例。您可以参考此测试以获取更详细的使用示例。