6.5 OpenAI Moderation

46 阅读4分钟

OpenAI 内容审核 (Moderation)

介绍

Spring AI 支持 OpenAI 的内容审核模型,该模型允许您检测文本中的潜在有害或敏感内容。 请参阅此指南以获取有关 OpenAI 内容审核模型的更多信息。

前提条件

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

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

自动配置

注意:Spring AI 自动配置和启动器模块的工件名称发生了重大变化。请参阅升级说明了解更多信息。

Spring AI 为 OpenAI 内容审核模型提供 Spring Boot 自动配置。要启用它,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

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

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

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-openai'
}

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

审核属性

连接属性

前缀 spring.ai.openai 用作让您连接到 OpenAI 的属性前缀。

属性描述默认值
spring.ai.openai.base-url要连接的 URLapi.openai.com
spring.ai.openai.api-keyAPI 密钥-
spring.ai.openai.organization-id可选地,您可以指定用于 API 请求的组织-
spring.ai.openai.project-id可选地,您可以指定用于 API 请求的项目-

提示:对于属于多个组织的用户(或通过其传统用户 API 密钥访问其项目的用户),您可以选择指定用于 API 请求的组织和项目。来自这些 API 请求的使用将计为指定组织和项目的使用量。

配置属性

注意:内容审核自动配置的启用和禁用现在通过前缀为 spring.ai.model.moderation 的顶级属性进行配置。

要启用:spring.ai.model.moderation=openai(默认启用)

要禁用:spring.ai.model.moderation=none(或任何与 openai 不匹配的值)

此更改旨在允许多个模型的配置。

前缀 spring.ai.openai.moderation 用作配置 OpenAI 内容审核模型的属性前缀。

属性描述默认值
spring.ai.model.moderation启用内容审核模型openai
spring.ai.openai.moderation.base-url要连接的 URLapi.openai.com
spring.ai.openai.moderation.api-keyAPI 密钥-
spring.ai.openai.moderation.organization-id可选地,您可以指定用于 API 请求的组织-
spring.ai.openai.moderation.project-id可选地,您可以指定用于 API 请求的项目-
spring.ai.openai.moderation.options.model用于内容审核的模型 IDtext-moderation-latest

注意:您可以覆盖通用的 spring.ai.openai.base-urlspring.ai.openai.api-keyspring.ai.openai.organization-idspring.ai.openai.project-id 属性。如果设置了 spring.ai.openai.moderation.base-urlspring.ai.openai.moderation.api-keyspring.ai.openai.moderation.organization-idspring.ai.openai.moderation.project-id 属性,它们将优先于通用属性。如果您想为不同的模型和不同的模型端点使用不同的 OpenAI 账户,这很有用。

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

运行时选项

OpenAiModerationOptions 类提供在进行内容审核请求时要使用的选项。在启动时,使用由 spring.ai.openai.moderation 指定的选项,但您可以在运行时覆盖这些选项。

例如:

OpenAiModerationOptions moderationOptions = OpenAiModerationOptions.builder()
    .model("text-moderation-latest")
    .build();

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

// 访问审核结果
Moderation moderation = moderationResponse.getResult().getOutput();

// 打印一般信息
System.out.println("Moderation ID: " + moderation.getId());
System.out.println("Model used: " + moderation.getModel());

// 访问审核结果(通常只有一个,但它是一个列表)
for (ModerationResult result : moderation.getResults()) {
    System.out.println("\nModeration Result:");
    System.out.println("Flagged: " + result.isFlagged());

    // 访问类别
    Categories categories = this.result.getCategories();
    System.out.println("\nCategories:");
    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());

    // 访问类别分数
    CategoryScores scores = this.result.getCategoryScores();
    System.out.println("\nCategory Scores:");
    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-openai 依赖项添加到项目的 Maven pom.xml 文件中:

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

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

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

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

接下来,创建一个 OpenAiModerationModel

OpenAiModerationApi openAiModerationApi = new OpenAiModerationApi(System.getenv("OPENAI_API_KEY"));

OpenAiModerationModel openAiModerationModel = new OpenAiModerationModel(this.openAiModerationApi);

OpenAiModerationOptions moderationOptions = OpenAiModerationOptions.builder()
    .model("text-moderation-latest")
    .build();

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

示例代码

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


内容审核类别详解

OpenAI 内容审核模型可以检测以下类别的有害内容:

主要类别

  • 性内容 (Sexual):检测与性相关的露骨内容
  • 仇恨内容 (Hate):检测表达仇恨、歧视或攻击性言论的内容
  • 骚扰 (Harassment):检测针对个人的骚扰或威胁性内容
  • 自残 (Self-Harm):检测与自残相关的内容
  • 暴力 (Violence):检测涉及暴力的内容

细分类别

  • 性内容/未成年人 (Sexual/Minors):涉及未成年人的性内容
  • 仇恨/威胁性 (Hate/Threatening):包含威胁的仇恨内容
  • 暴力/血腥 (Violence/Graphic):血腥或图形化的暴力内容
  • 自残/意图 (Self-Harm/Intent):表达自残意图的内容
  • 自残/指导 (Self-Harm/Instructions):提供自残方法指导的内容
  • 骚扰/威胁性 (Harassment/Threatening):威胁性的骚扰内容

每个类别都会提供布尔值(是否标记)和分数值(0-1之间的置信度分数),帮助开发者做出精确的内容决策。