跳到主要内容

a6-plugin-ai-content-moderation

概览

Apache APISIX提供两个内容安全审核插件,用于过滤有害内容,覆盖 LLM 请求和响应:

插件服务提供方请求响应流式传输
ai-aws-content-moderationAWS Comprehend
ai-aliyun-content-moderationAliyun Moderation Plus

两者都必须与 ai-proxyai-proxy-multi 一起使用。

适用场景

  • 在内容到达 LLM 前拦截有毒、仇恨或色情内容
  • 在有害 LLM 响应到达客户端前进行过滤(仅阿里云)
  • 通过可配置阈值执行内容策略
  • 直接在服务或路由上应用一致的审核策略

插件执行顺序

ai-prompt-template           (priority 1071)
ai-prompt-decorator (priority 1070)
ai-aws-content-moderation (priority 1050) ← runs BEFORE ai-proxy
ai-proxy (priority 1040)
ai-aliyun-content-moderation (priority 1029) ← runs AFTER ai-proxy

AWS插件在到达LLM之前阻止请求。阿里云插件 在ai-proxy设置上下文后运行,可以检查请求和响应。


插件 1:ai-aws-content-moderation

使用 AWS Comprehend detectToxicContent API 对请求内容进行评分。

配置参考

字段类型必填默认描述
comprehend.access_key_id字符串AWS 访问密钥ID
comprehend.secret_access_key字符串AWS 秘密访问密钥
comprehend.region字符串AWS区域(如us-east-1)
comprehend.endpoint字符串自动自定义Comprehend 端点
comprehend.ssl_verify布尔true验证 SSL 证书
moderation_categories对象每类阈值(0-1)
moderation_threshold数字0.5总毒性阈值(0-1)

审核类别

类别描述
PROFANITY亵渎上帝的语言
HATE_SPEECH仇恨内容
INSULT侮辱性语言
HARASSMENT_OR_ABUSE骚扰或辱骂内容
SEXUAL色情内容
VIOLENCE_OR_THREAT暴力或威胁性内容

每个类别接受来自0的分数阈值(最严格,屏蔽几乎 1(最宽松)。如果设置了1, 每个类别都是单独检查的。否则, moderation_threshold 用作总体毒性检查。

分步操作: AWS 内容审核

a6 route create -f - <<'EOF'
{
"id": "moderated-chat",
"uri": "/v1/chat/completions",
"methods": ["POST"],
"plugins": {
"ai-aws-content-moderation": {
"comprehend": {
"access_key_id": "AKIAIOSFODNN7EXAMPLE",
"secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1"
},
"moderation_categories": {
"HATE_SPEECH": 0.3,
"VIOLENCE_OR_THREAT": 0.2,
"SEXUAL": 0.5
}
},
"ai-proxy": {
"provider": "openai",
"auth": {
"header": {
"Authorization": "Bearer sk-your-key"
}
},
"options": {
"model": "gpt-4"
}
}
}
}
EOF

有毒请求被HTTP 400拒绝:

request body exceeds HATE_SPEECH threshold

总体阈值(不按类别筛选)

{
"plugins": {
"ai-aws-content-moderation": {
"comprehend": {
"access_key_id": "AKIA...",
"secret_access_key": "secret...",
"region": "us-east-1"
},
"moderation_threshold": 0.7
}
}
}

插件 2:ai-aliyun-content-moderation

使用阿里云内容安全增强版,支持请求审核、 响应审核和实时流式审核。

配置参考

字段类型必填默认描述
endpoint字符串阿里云服务端点 URL
region_id字符串阿里云地区(如cn-shanghai)
access_key_id字符串Aliyun 访问密钥ID
access_key_secret字符串阿里云访问密钥
check_request布尔true启用请求审核
check_response布尔false启用响应审核
stream_check_mode字符串final_packetrealtimefinal_packet
stream_check_cache_size整数128每批最大字符( 实时)
stream_check_interval数字3批次检查之间的秒数(实时)
request_check_service字符串llm_query_moderationAliyun 请求检查服务
request_check_length_limit数字2000每个请求块的最大字符
response_check_service字符串llm_response_moderationAliyun响应检查服务
response_check_length_limit数字5000每个响应块的最大字符
risk_level_bar字符串high阈值值:nonelowmediumhighmax
deny_code数字200拒绝内容的 HTTP 状态代码
deny_message字符串自定义拒绝消息
timeout整数10000请求超时( 毫秒)
ssl_verify布尔true验证 SSL 证书

风险等级系统

当其风险水平达到或超过risk_level_bar时,内容被阻止:

none (0) < low (1) < medium (2) < high (3) < max (4)

设置risk_level_bar: "high"阻止分级为highmax的内容。 设置risk_level_bar: "low"会阻止所有额定值为low或以上的东西。

流式传输模式

模式表现
final_packet缓冲整个响应,最后检查
realtime在流式传输过程中批量检查内容,可以中断中间响应

分步操作:阿里云请求与响应审核

a6 route create -f - <<'EOF'
{
"id": "aliyun-moderated-chat",
"uri": "/v1/chat/completions",
"methods": ["POST"],
"plugins": {
"ai-proxy": {
"provider": "openai",
"auth": {
"header": {
"Authorization": "Bearer sk-your-key"
}
},
"options": {
"model": "gpt-4"
}
},
"ai-aliyun-content-moderation": {
"endpoint": "https://green.cn-shanghai.aliyuncs.com",
"region_id": "cn-shanghai",
"access_key_id": "your-aliyun-key-id",
"access_key_secret": "your-aliyun-key-secret",
"check_request": true,
"check_response": true,
"risk_level_bar": "high",
"deny_code": 400,
"deny_message": "Content policy violation"
}
}
}
EOF

实时流式审核

{
"plugins": {
"ai-aliyun-content-moderation": {
"endpoint": "https://green.cn-shanghai.aliyuncs.com",
"region_id": "cn-shanghai",
"access_key_id": "key-id",
"access_key_secret": "key-secret",
"check_request": true,
"check_response": true,
"stream_check_mode": "realtime",
"stream_check_cache_size": 256,
"stream_check_interval": 2,
"risk_level_bar": "medium"
}
}
}

一体化模式

模式A :仅请求过滤( AWS )

Client → [AWS Comprehend blocks toxic] → ai-proxy → LLM → Response → Client
plugins:
ai-aws-content-moderation:
comprehend:
access_key_id: "${AWS_ACCESS_KEY_ID}"
secret_access_key: "${AWS_SECRET_ACCESS_KEY}"
region: us-east-1
moderation_threshold: 0.5
ai-proxy:
provider: openai
auth:
header:
Authorization: "Bearer ${OPENAI_API_KEY}"

模式B :请求+响应过滤(阿里云)

Client → ai-proxy [sets context] → [Aliyun checks request] → LLM
→ [Aliyun checks response] → Client
plugins:
ai-proxy:
provider: openai
auth:
header:
Authorization: "Bearer ${OPENAI_API_KEY}"
ai-aliyun-content-moderation:
endpoint: "https://green.cn-shanghai.aliyuncs.com"
region_id: cn-shanghai
access_key_id: "${ALIYUN_KEY_ID}"
access_key_secret: "${ALIYUN_KEY_SECRET}"
check_request: true
check_response: true
risk_level_bar: high

Secret 管理

两个插件都支持使用 APISIX Secret 管理凭证:

plugins:
ai-aws-content-moderation:
comprehend:
access_key_id: "$secret://vault/aws_key_id"
secret_access_key: "$secret://vault/aws_secret_key"
region: us-east-1

配置同步示例

version: "1"
routes:
- id: moderated-chat
uri: /v1/chat/completions
methods:
- POST
plugins:
ai-aws-content-moderation:
comprehend:
access_key_id: AKIAIOSFODNN7EXAMPLE
secret_access_key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
region: us-east-1
moderation_categories:
HATE_SPEECH: 0.3
VIOLENCE_OR_THREAT: 0.2
moderation_threshold: 0.5
ai-proxy:
provider: openai
auth:
header:
Authorization: Bearer sk-your-key
options:
model: gpt-4

故障排查

症状原因解决方法
“no ai instance picked”使用阿里云内容安全插件时未配置 ai-proxy始终在同一路由上配置 ai-proxyai-proxy-multi
AWS 插件未拦截内容阈值设置过于宽松降低 moderation_threshold 或各类别的阈值
阿里云响应审核未生效check_response 默认为 false显式设置 check_response: true
“指定签名不匹配”阿里云访问凭证错误检查 access_key_idaccess_key_secret
延迟较高同时启用了两个内容审核插件每条路由只使用一个内容审核提供商
流式响应中途断开阿里云实时模式检测到违规内容这是预期行为;调整 risk_level_bar,或使用 final_packet 模式

本文根据 api7/a6 仓库中的 a6-plugin-ai-content-moderation/SKILL.md 生成。可在 AI Agent Skills 页面浏览全部 Skill。