审核(Moderation)

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

简介

Spring AI 支持由 Mistral AI 推出并基于 Mistral 审核模型的全新审核服务。该服务可检测文本内容是否违反多项策略维度。有关 Mistral AI 审核模型的详细信息,请参阅此 链接

先决条件

  1. 创建 Mistral AI 账户并获取 API 密钥。请访问 Mistral AI 注册页面 完成注册,并在 API Keys 页面 生成密钥。

  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

要连接到的 URL

api.mistral.ai

spring.ai.mistralai.api-key

API Key

-

配置属性

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

-

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 测试提供了该库的基础使用示例。具体用法可参考此测试类。