a6-plugin-ai-content-moderation
概览
Apache APISIX提供两个内容安全审核 插件,用于过滤有害内容,覆盖 LLM 请求和响应:
| 插件 | 服务提供方 | 请求 | 响应 | 流式传输 |
|---|---|---|---|---|
ai-aws-content-moderation | AWS Comprehend | ✅ | ❌ | ❌ |
ai-aliyun-content-moderation | Aliyun Moderation Plus | ✅ | ✅ | ✅ |
两者都必须与 ai-proxy 或 ai-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_packet | realtime或final_packet |
stream_check_cache_size | 整数 | 否 | 128 | 每批最大字符( 实时) |
stream_check_interval | 数字 | 否 | 3 | 批次检查之间的秒数(实时) |
request_check_service | 字符串 | 否 | llm_query_moderation | Aliyun 请求检查服务 |
request_check_length_limit | 数字 | 否 | 2000 | 每个请求块的最大字符 |
response_check_service | 字符串 | 否 | llm_response_moderation | Aliyun响应检查服务 |
response_check_length_limit | 数字 | 否 | 5000 | 每个响应块的最大字符 |
risk_level_bar | 字符串 | 否 | high | 阈值值:none、low、medium、high、max |
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"阻止分级为high或max的内容。
设置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-proxy 或 ai-proxy-multi |
| AWS 插件未拦截内容 | 阈值设置过于宽松 | 降低 moderation_threshold 或各类别的阈值 |
| 阿里云响应审核未生效 | check_response 默认为 false | 显式设置 check_response: true |
| “指定签名不匹配” | 阿里云访问凭证错误 | 检查 access_key_id 和 access_key_secret |
| 延迟较高 | 同时启用了两个内容审核插件 | 每条路由只使用一个内容审核提供商 |
| 流式响应中途断开 | 阿里云实时模式检测到违规内容 | 这是预期行为;调整 risk_level_bar,或使用 final_packet 模式 |
本文根据 api7/a6 仓库中的 a6-plugin-ai-content-moderation/SKILL.md 生成。可在 AI Agent Skills 页面浏览全部 Skill。