抖音文案违规检测
发布前扫描口播稿,找出可能触发抖音限流/禁言/下架的文案风险。它是版本化启发式筛查,不是抖音官方审核器,也不承诺发布结果。
核心理念
抖音审核不是"有敏感词就违规"的简单匹配——同一个词在引用、否定、专业术语等语境下完全合法。过度标记比漏标更糟:如果每次检测都报一堆低风险,用户会养成忽略报告的习惯,真正的高风险就被淹没了。所以宁可漏标也不误标——只标记真实风险,不确定的标低风险并注明原因(高风险类别除外,见评分规则)。
不适用场景
- 视频画面违规(水印、低俗画面)→ 本 skill 只管文案
- 其他平台(小红书/知乎等)→ 词库针对抖音,其他平台规则不同
- 法律合规审查 → 这是平台规则检测,不是法律审查
- 缺少文案内容 → 停下来,告诉用户需要提供文案文件或文本
工作流
1. 读入文案
接收文案来源(文件路径或直接文本),提取纯文本内容。
- 完成条件: 拿到纯文本字符串
- 如果无法获取文案内容 → 停下来,告诉用户需要提供文件路径或直接粘贴文本
2. 按9类扫描
先读取 references/ruleset.json。scan time 超过 expires_at 时在报告写 ruleset_warning: STALE 并安排复核,但不因规则过期自动阻断文案;只有命中明确未解决高风险或扫描根本无法完成时才 REVISE_REQUIRED|BLOCKED。再按 references/keywords.md 词库逐类扫描,每类独立评分。
| 类别 | 代码 | 风险等级 | 说明 |
|---|---|---|---|
| 引流违规 | YL | 高 | 引导用户加微信/扫码/私信等站外引流(含谐音变形:薇信/徵信/加V♥等) |
| 极限词/广告法 | JX | 高 | 最、第一、唯一等绝对化用语 |
| 医疗效果承诺 | YL-MED | 高 | 治愈、根治、100%有效等医疗声明 |
| 金融收益承诺 | YL-FIN | 高 | 保收益、稳赚、具体收益数字 |
| 低质/标题党 | DZ | 中 | 震惊体、悬念杀、信息空洞 |
| 敏感话题 | MG | 高 | 政治敏感、未经证实消息、争议性话题 |
| 平台特有限制 | PT | 中 | 抖音独有的隐性限流规则(重复发布、诱导互动等) |
| 低俗色情 | DS | 高 | 抖音第一红线:擦边/性暗示/软色情即限流,硬色情封号 |
| 引战谩骂 | ZH | 高 | 人身攻击/地域攻击/拉踩引战/脏话,AI测评易踩拉踩线 |
- 完成条件: 9类全部扫描完毕,记录所有匹配项及其上下文
3. 输出报告
当参数含 --episode episodes/<slug> 时,报告只能写入 episodes/<slug>/02-违规报告.md,并以以下 frontmatter 开头;script_hash 是该期 01-口播稿.md 的 SHA-256。任何改稿都必须重跑本步骤,不能复用旧报告。
---
script_hash: <sha256>
risk_status: CLEAR # CLEAR | REVISE_REQUIRED | BLOCKED
unresolved_high_risk_count: 0
ruleset_version: douyin-text-risk-2026-07-11
ruleset_reviewed_at: <复制 references/ruleset.json reviewed_at>
ruleset_expires_at: <复制 references/ruleset.json expires_at>
scan_completed_at: <ISO-8601>
platform_guarantee: false
---
## 违规检测报告
**文案**: {文件名或前20字}
**整体风险**: 🟢当前规则集未发现未解决高风险 / 🟡低风险 / 🟠中风险 / 🔴高风险
### 发现问题
| # | 类别 | 风险 | 原文片段 | 建议替换 |
|---|------|------|---------|---------|
### 统计
- 高风险: X处 | 中风险: X处 | 低风险: X处
- 总扫描字数: X字
### 建议
{高风险>0 → 建议不发布;中风险 → 给修改建议;低风险 → 提醒;无问题 → 明确“当前版本规则集未发现未解决高风险,不代表平台保证”}
- 完成条件: 报告包含所有匹配项、统计、建议
risk_status 是给 bianpai 的机械结论:明确高风险且未解决时写 REVISE_REQUIRED;扫描根本无法完成时写 BLOCKED;其余写 CLEAR 与 unresolved_high_risk_count: 0。规则过期用 ruleset_warning: STALE 提醒,不自动把 CLEAR 改成 BLOCKED。必须复制 ruleset 版本/复核/到期时间、实际 scan time,并写 platform_guarantee: false。不得只靠 script_hash 让报告放行。
4. 给出修改版(可选)
用户要求时,直接给出修改后的文案,用 [原词→新词] 标注改动位置。
操作规则
跨步骤的全局约束——在扫描和输出时都必须遵守:
匹配方式
- 关键词精确匹配:引流词、极限词等直接匹配
- 模式匹配:数字+收益(如"月入3万")、联系方式模式(微信号、手机号)
- 变形词归一化(扫描前置):抖音规避手段常用谐音字/符号插入/全角半角绕过检测。扫每类前先把文案归一化再匹配——谐音变体(薇信→微信)直接查 YL 词库列出的变体;全角字母(VX)转半角;容忍词内插入 0-3 个非汉字符号(加★微★信→加微信)。详见
references/keywords.md「变形词归一化规则」。拼音首字母/拆字等激进变形暂不检测(口播场景罕见,过度检测误伤正常词)。
上下文豁免
同一个词在不同语境下风险不同。以下情况不算违规,不要误报:
❌ 差(误报): "他说这个工具月入百万" → 标记为 YL-FIN 高风险 (这是引用他人观点,不是收益承诺)
✅ 好(正确豁免): "他说这个工具月入百万" → 不标记(引用语境豁免)
豁免条件:
- 引用/转述他人观点("有人说XXX")
- 客观陈述事实("这个工具月活1000万")
- 否定句式("不要相信月入百万")
- 专业术语("第一性原理")
宁漏勿误原则
❌ 差(过度标记): 每个"最"都标高风险 → 用户学会忽略报告 → 真正的高风险被淹没
✅ 好(精准标记): "最好的AI工具"在教程推荐语境 → 标低风险 + 注明"教程推荐语境,实际风险低" "加我微信xxx123" → 标高风险(明确的引流行为)
仅当语境不确定且即使最不利解释也不构成高风险时,标“低风险”并注明原因;若不确定性涉及引流、承诺、资质、医疗/金融或其他高风险类别,按上文写 REVISE_REQUIRED,不得用低风险降级。
评分规则
| 情况 | 整体风险 |
|---|---|
| 任何1个高风险 | 🔴高风险 |
| 2个以上中风险 | 🟠中风险 |
| 1个中风险 | 🟡低风险 |
| 仅低风险或无 | 🟢当前规则集未发现未解决高风险 |
与其他 skill 的关系
- 写完口播稿后、发布前跑一次 laohan-weigui
- 可在 laohan-cheat 流程中加一步"违规检测"(publish前检查)
- 与 laohan-chuangzuo 独立,可在创作流程的任何节点单独调用
词库维护
词库的价值来自用户的实际限流经验——被限过一次的词,比猜的100个词都有用。
- 词库文件:
references/keywords.md - 规则清单:
references/ruleset.json;至少每90天或出现真实平台处罚后复核 - 每次使用时提示:"如果之前有被限流的经验,告诉我具体关键词,我加入词库"
- 加入时记录来源(哪个视频被限、平台反馈了什么),方便后续判断规则是否过时