phase 6 part 1: eight cross-stack enterprise scenarios and scenarios index
This commit is contained in:
1 parent
691f738f5f
commit
5b1a7a430f
12 files changed
+1145
-12
No files matched your search
@@ -0,0 +1,88 @@
|
||||
---
|
||||
id: scenario.content-moderation
|
||||
title: 内容审核:规则 + 模型的分层审核、异步流水线、人工复审、申诉和效果度量
|
||||
type: scenario
|
||||
domain: cross
|
||||
stack: [mq, redis, postgresql, prompt-engineering, agent-ops, fastapi, react]
|
||||
tags: [内容审核, 分层过滤, 敏感词, 大模型审核, 人工复审, 异步, 召回率, 误杀率]
|
||||
level: intermediate
|
||||
prerequisites: [backend.mq.index, ai.prompt-engineering.index]
|
||||
est_hours: 2.5
|
||||
related: [ai.prompt-engineering.scenario.injection-defense, ai.agent-ops.scenario.agent-quality-gate, backend.mq.reliability]
|
||||
week: [13, 14]
|
||||
---
|
||||
|
||||
# 内容审核:规则 + 模型的分层审核、异步流水线、人工复审、申诉和效果度量
|
||||
|
||||
## 业务背景与问题
|
||||
|
||||
社区产品允许用户发帖、评论,同时 AI 助手会生成回复。监管和平台要求:
|
||||
|
||||
1. 违规内容(色情、暴力、诈骗广告、个人信息泄露)要及时拦截;
|
||||
2. 纯人工审核成本高、速度慢;纯关键词误杀多(“打击诈骗”被当成诈骗);
|
||||
3. AI 生成的内容同样要审核;
|
||||
4. 用户对误判可以申诉。
|
||||
|
||||
## 约束
|
||||
|
||||
- 发帖体验不能明显变慢。
|
||||
- 高风险内容宁可误杀;低风险内容宁可放过后再处理。
|
||||
- 审核标准会随政策变化。
|
||||
|
||||
## 方案设计
|
||||
|
||||
1. **分层审核**:
|
||||
- 第一层(同步,毫秒级):敏感词(AC 自动机 / 词库服务)、黑名单 URL、正则(手机号、身份证号)→ 命中高危直接拒绝;
|
||||
- 第二层(异步,秒级):大模型按审核标准分类,输出结构化结果(类别、风险等级、证据片段、理由);
|
||||
- 第三层(人工):中风险和模型不确定的内容进入人工复审队列,按风险和时效排序。
|
||||
2. **发布策略**:低风险先发布(“先发后审”),中风险“仅自己可见”直到审核完成,高风险拒绝。
|
||||
3. **异步流水线**:发帖写库后发消息,审核服务消费(重试、死信、幂等:按内容 id + 内容哈希);结果回写并通知。
|
||||
4. **AI 生成内容**:输出前过第一层;流式输出时按句缓冲检测,命中即中止并替换为提示语。
|
||||
5. **审核标准即配置**:审核提示词和类别定义版本化管理;修改后用标注集回归(召回率、误杀率)通过才上线。
|
||||
6. **申诉与反馈**:申诉进入人工复审;复审结论回流到标注集,用于评测和改进规则。
|
||||
7. **防对抗**:谐音、拆字、图片中的文字(OCR);提示词注入(帖子内容里写“忽略审核规则”),审核提示词中把用户内容作为数据隔离。
|
||||
|
||||
## 关键代码
|
||||
|
||||
审核结果结构与决策(示意):
|
||||
|
||||
```python
|
||||
class ModerationResult(BaseModel):
|
||||
category: Literal["ok", "porn", "violence", "fraud", "pii", "other"]
|
||||
risk: Literal["low", "medium", "high"]
|
||||
evidence: list[str] = Field(max_length=5) # 命中的原文片段,方便复审
|
||||
reason: str
|
||||
|
||||
def decide(rule_hit: RuleHit | None, model: ModerationResult | None) -> str:
|
||||
if rule_hit and rule_hit.level == "high":
|
||||
return "reject"
|
||||
if model is None: # 模型超时 / 不可用:进入人工,不自动放行中高风险
|
||||
return "manual_review"
|
||||
if model.risk == "high":
|
||||
return "reject"
|
||||
if model.risk == "medium" or (rule_hit and rule_hit.level == "medium"):
|
||||
return "manual_review"
|
||||
return "publish"
|
||||
```
|
||||
|
||||
审核提示词中隔离用户内容(防注入)的写法见[提示词注入防护](../topics/ai/prompt-engineering/scenarios/injection-defense.md);评测和门禁见 [Agent 质量门禁](../topics/ai/agent-ops/scenarios/agent-quality-gate.md)。
|
||||
|
||||
## 取舍
|
||||
|
||||
| 决策 | 选择 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| 审核方式 | 规则 + 模型 + 人工分层 | 兼顾速度、成本和准确率 |
|
||||
| 发布时机 | 按风险分级 | 体验和安全的平衡 |
|
||||
| 模型故障 | 降级为人工 | 不能因故障放行风险内容 |
|
||||
| 标准变更 | 标注集回归 | 防止改一条规则引起大量误杀 |
|
||||
|
||||
## 易错点
|
||||
|
||||
- 只看召回率(拦住多少违规),不看误杀率(误伤多少正常内容)。
|
||||
- 审核结果覆盖了用户后来编辑过的新内容(用内容哈希校验版本)。
|
||||
- 把用户内容直接拼进审核提示词,被注入。
|
||||
- 审核日志中保存了大量个人信息,没有脱敏和保留期限。
|
||||
|
||||
## 面试怎么讲
|
||||
|
||||
> “内容审核我做了三层:同步的敏感词和正则直接拦高危;异步的大模型按审核标准输出类别、风险和证据;中风险和不确定的进人工复审。发布按风险分级,模型故障时降级到人工而不是放行。审核标准作为版本化配置,修改后用标注集回归召回率和误杀率。申诉结论回流到标注集。”
|
||||
Reference in new issue
Block a user