跳转到主要内容

功能概述

文本审核(Moderation)API 基于先进的 AI 模型,能够自动检测和识别文本内容中的潜在风险,帮助你构建安全、合规的应用程序。
支持 OpenAI Moderation 模型及其他主流内容审核模型,准确率高,响应速度快。

主要能力

违规内容检测

识别暴力、色情、仇恨等违规内容

有害信息过滤

检测自残、骚扰、欺诈等有害信息

多语言支持

支持中文、英文等多语言内容审核

细粒度分类

提供详细的违规类别和置信度评分

快速开始

基础调用示例

使用 Moderation API 检测文本内容是否违规:
from openai import OpenAI

client = OpenAI(
    api_key="your-api-key",
    base_url="https://api.apiyi.com/v1"
)

response = client.moderations.create(
    model="omni-moderation-latest",
    input="这是一段需要检测的文本内容"
)

result = response.results[0]
if result.flagged:
    print("⚠️ 检测到违规内容")
    print(f"违规类别:{result.categories}")
else:
    print("✅ 内容安全")

批量检测示例

一次性检测多段文本:
texts = [
    "这是第一段文本",
    "这是第二段文本",
    "这是第三段文本"
]

response = client.moderations.create(
    model="omni-moderation-latest",
    input=texts
)

for i, result in enumerate(response.results):
    print(f"文本 {i+1}{'违规' if result.flagged else '安全'}")

审核类别

OpenAI Moderation 支持的类别

类别说明示例
hate仇恨言论基于种族、性别、宗教等的歧视性内容
hate/threatening威胁性仇恨言论包含暴力威胁的仇恨内容
harassment骚扰侮辱、嘲讽、人身攻击
harassment/threatening威胁性骚扰包含威胁的骚扰内容
self-harm自残鼓励、美化自残行为
self-harm/intent自残意图表达自残意图的内容
self-harm/instructions自残指导提供自残方法的内容
sexual性相关内容成人内容、色情描述
sexual/minors未成年性内容涉及未成年人的性相关内容
violence暴力暴力行为、血腥场面
violence/graphic血腥暴力详细的暴力、血腥描述
不同模型支持的审核类别可能有所不同,请根据实际需求选择合适的模型。

返回结果详解

响应结构

{
  "id": "modr-xxxxx",
  "model": "omni-moderation-latest",
  "results": [
    {
      "flagged": true,
      "categories": {
        "hate": false,
        "hate/threatening": false,
        "harassment": false,
        "harassment/threatening": false,
        "self-harm": false,
        "self-harm/intent": false,
        "self-harm/instructions": false,
        "sexual": false,
        "sexual/minors": false,
        "violence": true,
        "violence/graphic": false
      },
      "category_scores": {
        "hate": 0.0001,
        "hate/threatening": 0.0001,
        "harassment": 0.0002,
        "harassment/threatening": 0.0001,
        "self-harm": 0.0001,
        "self-harm/intent": 0.0001,
        "self-harm/instructions": 0.0001,
        "sexual": 0.0001,
        "sexual/minors": 0.0001,
        "violence": 0.9876,
        "violence/graphic": 0.1234
      }
    }
  ]
}

字段说明

flagged

布尔值,是否检测到违规内容

categories

各类别的二元判断结果

category_scores

各类别的置信度评分(0-1)

集成示例

聊天内容审核

在聊天应用中集成内容审核:
from openai import OpenAI

client = OpenAI(
    api_key="your-api-key",
    base_url="https://api.apiyi.com/v1"
)

def moderate_message(user_message):
    """审核用户消息"""
    # 1. 先审核内容
    moderation = client.moderations.create(
        model="omni-moderation-latest",
        input=user_message
    )

    result = moderation.results[0]

    # 2. 如果违规,拒绝处理
    if result.flagged:
        violated_categories = [
            category for category, flagged in result.categories.items()
            if flagged
        ]
        return {
            "success": False,
            "error": f"检测到违规内容:{', '.join(violated_categories)}",
            "message": "您的消息包含不适当内容,请修改后重试"
        }

    # 3. 内容安全,继续处理
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": user_message}]
    )

    return {
        "success": True,
        "reply": response.choices[0].message.content
    }

# 使用示例
user_input = "帮我写一篇关于人工智能的文章"
result = moderate_message(user_input)

if result["success"]:
    print(result["reply"])
else:
    print(result["message"])

UGC(用户生成内容)过滤

在论坛、评论区等场景过滤用户内容:
def review_ugc(content):
    """审核用户生成内容"""
    moderation = client.moderations.create(
        model="omni-moderation-latest",
        input=content
    )

    result = moderation.results[0]

    if not result.flagged:
        return {"status": "approved", "action": "发布"}

    # 分析违规严重程度
    max_score = max(result.category_scores.values())

    if max_score > 0.9:
        return {"status": "rejected", "action": "拒绝发布"}
    elif max_score > 0.7:
        return {"status": "pending", "action": "人工复审"}
    else:
        return {"status": "approved_with_warning", "action": "发布并标记"}

# 使用示例
ugc_content = "这是一条用户评论..."
review_result = review_ugc(ugc_content)
print(f"审核结果:{review_result['action']}")

AI 生成内容审核

对 AI 生成的内容进行二次审核:
def generate_safe_content(prompt):
    """生成内容并审核"""
    # 1. 先审核用户输入
    input_moderation = client.moderations.create(
        model="omni-moderation-latest",
        input=prompt
    )

    if input_moderation.results[0].flagged:
        return "您的请求包含不适当内容,无法处理"

    # 2. 生成内容
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}]
    )

    generated_content = response.choices[0].message.content

    # 3. 审核生成的内容
    output_moderation = client.moderations.create(
        model="omni-moderation-latest",
        input=generated_content
    )

    if output_moderation.results[0].flagged:
        return "生成的内容不符合安全规范,已被过滤"

    return generated_content

# 使用示例
result = generate_safe_content("写一个儿童故事")
print(result)

高级用法

自定义审核阈值

根据业务需求调整审核严格程度:
def custom_moderation(text, threshold=0.5):
    """自定义审核阈值"""
    moderation = client.moderations.create(
        model="omni-moderation-latest",
        input=text
    )

    result = moderation.results[0]

    # 使用自定义阈值判断
    flagged_categories = []
    for category, score in result.category_scores.items():
        if score > threshold:
            flagged_categories.append({
                "category": category,
                "score": score,
                "severity": "high" if score > 0.8 else "medium"
            })

    return {
        "flagged": len(flagged_categories) > 0,
        "violations": flagged_categories
    }

# 使用示例
result = custom_moderation("这是测试文本", threshold=0.3)
if result["flagged"]:
    for violation in result["violations"]:
        print(f"{violation['category']}: {violation['score']:.2f} ({violation['severity']})")

审核日志记录

记录审核历史,用于分析和改进:
import json
from datetime import datetime

def moderate_with_logging(text, user_id=None):
    """带日志记录的审核"""
    moderation = client.moderations.create(
        model="omni-moderation-latest",
        input=text
    )

    result = moderation.results[0]

    # 记录审核日志
    log_entry = {
        "timestamp": datetime.now().isoformat(),
        "user_id": user_id,
        "text_length": len(text),
        "flagged": result.flagged,
        "categories": {k: v for k, v in result.categories.items() if v},
        "max_score": max(result.category_scores.values())
    }

    # 保存到日志文件
    with open("moderation_logs.jsonl", "a") as f:
        f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")

    return result.flagged

# 使用示例
is_flagged = moderate_with_logging("测试文本", user_id="user_123")

多模型联合审核

结合多个审核模型提高准确性:
def multi_model_moderation(text):
    """使用多个模型进行审核"""
    models = ["omni-moderation-latest", "text-moderation-stable"]
    results = []

    for model in models:
        try:
            moderation = client.moderations.create(
                model=model,
                input=text
            )
            results.append(moderation.results[0])
        except Exception as e:
            print(f"模型 {model} 调用失败:{e}")

    # 如果任一模型判定为违规,则认为违规
    flagged = any(r.flagged for r in results)

    return {
        "flagged": flagged,
        "model_count": len(results),
        "results": results
    }

最佳实践

1. 双向审核

输入审核

审核用户输入,防止恶意请求

输出审核

审核 AI 生成内容,确保输出安全
def safe_chat(user_message):
    """双向审核的聊天"""
    # 输入审核
    if moderate_text(user_message):
        return "您的消息包含不适当内容"

    # 生成回复
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": user_message}]
    )

    reply = response.choices[0].message.content

    # 输出审核
    if moderate_text(reply):
        return "AI 生成的内容未通过安全审核"

    return reply

2. 异步审核

对于非实时场景,使用异步审核提升性能:
import asyncio
from openai import AsyncOpenAI

async_client = AsyncOpenAI(
    api_key="your-api-key",
    base_url="https://api.apiyi.com/v1"
)

async def async_moderate(texts):
    """异步批量审核"""
    tasks = [
        async_client.moderations.create(
            model="omni-moderation-latest",
            input=text
        )
        for text in texts
    ]

    results = await asyncio.gather(*tasks)
    return [r.results[0].flagged for r in results]

# 使用示例
texts = ["文本1", "文本2", "文本3"]
flagged_list = asyncio.run(async_moderate(texts))

3. 缓存审核结果

对于相同内容,缓存审核结果减少 API 调用:
import hashlib
from functools import lru_cache

@lru_cache(maxsize=1000)
def cached_moderate(text_hash):
    """缓存审核结果"""
    # 实际的审核逻辑
    pass

def moderate_with_cache(text):
    """带缓存的审核"""
    text_hash = hashlib.md5(text.encode()).hexdigest()
    return cached_moderate(text_hash)

4. 分级处理

根据违规程度采取不同措施:
def handle_moderation_result(text, result):
    """分级处理审核结果"""
    if not result.flagged:
        return {"action": "allow", "message": "内容安全"}

    max_score = max(result.category_scores.values())

    if max_score > 0.95:
        return {"action": "block", "message": "严重违规,直接拒绝"}
    elif max_score > 0.8:
        return {"action": "review", "message": "疑似违规,人工复审"}
    elif max_score > 0.5:
        return {"action": "warn", "message": "轻微违规,提示用户"}
    else:
        return {"action": "allow", "message": "可能误判,放行"}

常见问题

审核是否支持中文?

支持。OpenAI Moderation 和其他主流审核模型都支持中文内容审核,准确率与英文相当。

审核延迟是多少?

通常在 100-500ms 之间,具体取决于:
  • 文本长度
  • 模型选择
  • 网络状况

如何处理误判?

建议采取分级策略:
  1. 高置信度违规:直接拒绝
  2. 中等置信度:人工复审
  3. 低置信度:放行或提示

审核是否收费?

OpenAI Moderation API 目前免费,其他模型可能收费,详见 定价说明

可以审核图片和视频吗?

当前 Moderation API 主要针对文本内容。图片和视频审核需要使用专门的多模态审核模型。

相关文档