自媒体合规审查官
它替你做的事:把一批自媒体账号从主页到每一条作品全部过一遍,找出宣传性违规表述,
告诉你命中了什么词、违反了哪一条、证据在哪 —— 而不是只给一个「疑似有问题」。
面向培训机构、MCN、代运营、品牌方与平台内容治理团队。
能力
| 你说的话 | 我能做什么 |
|---|---|
| 「帮我查这几个账号有没有违规宣传」 | 批量审查账号矩阵,出 Excel 明细表 + 风险总览 |
| 「这个账号的封面是不是写了包过」 | 封面图 OCR 识别图中文字并判定 |
| 「帮我看看这批视频画面里有没有违规话术」 | 视频抽帧 OCR + 图文正文页 OCR |
| 「这个词到底违不违规」 | 单条文本秒级判定,给出命中词与法律依据 |
| 「我们行业有些特殊禁词」 | 挂载自定义行业词库,纳入统一判定 |
| 「有没有漏掉的」 | 覆盖完整性自检,显式披露未覆盖的内容层 |
快速开始
# 0) 安装依赖(Python 3.10+)
pip install -r requirements.txt
python -m playwright install chromium
# 1) 核对环境
python tests/run_regression.py # 规则库回归,应显示 66/66 通过
# 2) 端到端试跑(干跑,不联网,用随包样例)
python tests/make_fixture.py
python scripts/run_audit.py --in-json data/accounts.sample.json \
--dry-run --rows 2,3,4 --out-dir reports/_selftest
# 3) 审查你自己的账号
# 先按 data/README.md 准备台账,存为 data/accounts_clean.json
python scripts/login_watch.py douyin # 扫码登录(一次即可,登录态长期复用)
python scripts/login_watch.py xiaohongshu
python scripts/run_audit.py --out-dir reports/2026-09-18
scripts/run_audit.py 是唯一入口,一条命令跑完「采集 → 文本审查 → 视觉审查 → 交付物」。
下面「内置资源」里的其他脚本只在排障、调参、单独验证某一层时才用。
它查哪八个内容位
| 内容位 | 归属 | 覆盖 |
|---|---|---|
| 账号昵称 | 账号级 | ✅ |
| 账号头像(图中文字) | 账号级 | ✅ |
| 账号简介 | 账号级 | ✅ |
| 作品标题 | 作品级 | ✅ |
| 话题标签 | 作品级 | ✅ |
| 封面图(OCR) | 作品级 | ✅ 实测命中率最高的内容位 |
| 视频画面(首/中/尾抽帧 OCR) | 作品级 | ✅ 采完即抽帧 |
| 图文作品正文页(逐页 OCR) | 作品级 | ✅ |
| 视频口播(音轨 ASR) | 作品级 | ❌ 未接入,原因见 references/09 |
判定口径
三态判定,绝不混淆:
| 结论 | 含义 |
|---|---|
| 违规 | 命中规则库,附命中词 + 风险类别 + 违反依据原文 |
| 不违规 | 内容已实际审到,且未命中 |
| 未核查 | 没采到 / 采不全,必须附原因(缺登录态、被拦截、账号无公开作品…) |
> 抓不到一律写「未核查」,绝不写成「不违规」。
> 把「没看到」当成「没问题」,会让整张表失去意义 —— 这是本工具最重视的一条纪律。
判定列取值规则(按采集情况分流,不可违反):
| 采集情况 | 判定列 |
|---|---|
| 账号层与作品层都没取到 | 未核查(必须附原因) |
| 账号层取到,作品层 0 条且平台自报作品数也为 0 | 违规 / 不违规(作品层天然为空,账号层全查即全量) |
| 账号层取到,作品层 0 条但平台自报 > 0 | 未核查 + 注明「自报 N 条、实采 0 条」+ 列入补采清单 |
| 作品层部分采到(实采 < 自报) | 违规 / 不违规,但覆盖说明须写「结论仅覆盖已采部分」 |
| 账号层与作品层都取到且实采 ≥ 自报 | 违规 / 不违规(可写「作品已全量」) |
适用范围与边界(先读这一段)
内置词库构成:13 大类 · 469 词条 + 63 条正则
- 广告法通用条款 7 类:绝对化用语 · 健康与疾病治疗功效宣称 · 站外导流与联系方式 ·
诱导互动 · 虚假官方或权威背景 · 规避性变体写法 · 暗示性表达 - 教育培训招生专项 6 类:培训效果保证性承诺 · 暗示考试机构或命题人员参与 ·
就业保证性承诺 · 证书效力误导与挂靠 · 利用机构或受益者名义作证明 · 制造焦虑与渲染紧张氛围
因此需要说清楚三件事:
- 教育 / 职业培训 / 考证类账号 → 开箱即用,13 类全生效。
- 其他行业(医美、医械、食品、金融、房产、招商加盟…)→ 其中 7 类通用条款直接适用;
行业专属表述请按下方「挂载自定义行业词库」补充,否则会漏判。 - 本工具做的是「命中提示 + 依据 + 证据」,不做法律定性。最终认定请交法务或合规负责人。
不做的事:不抓登录墙后的私密内容(只读公开可见信息);不做直播话术与直播间物料审查;
不代替人工复核 —— 二元判定会放大误报影响,交付物里同时给出「命中依据」列正是为此。
挂载自定义行业词库
内置词库之外,可追加任意行业词库,纳入同一套判定与交付流程。
python scripts/run_audit.py --out-dir reports/2026-09-18 \
--extra-rules my_industry_rules.json
词库格式见 data/extra-rules.example.json。两种用法:
- 新增类别:写一个全新的
id,例如行业专项禁词 - 扩展内置类别:复用内置
id(如ADV_ABSOLUTE),词条会与内置合并取并集
自定义类别若需要识别「包-过」这类被分隔符拆开的规避写法,
在该类别里加 "collapsed": true 即可启用折叠通道。
六条不可违背的设计(改动代码时必须保留)
- 三态判定:抓不到 = 「未核查」+ 具体原因,绝不写成「不违规」
- 断点续跑:每账号落盘
raw/<平台>_<标识>.json,中断后重跑自动跳过已完成项。
⚠️ 落盘与读取必须共用同一条文件名规则:平台标识可能长达 79 字符,
若一侧截断、一侧不截断,补采数据会「写了却永远读不到」——
表现为日志显示采集成功、结果仍是「未核查」,一个完全不报错的静默失配。 - 分层并发:平台侧串行 + 令牌桶限速 + 命中登录墙即熔断该平台剩余账号;
本地侧(图片下载、OCR)不参与平台行为风控,可放开并发 - 可追溯:每条判定附「命中词 + 风险类别 + 违反依据原文」
- 完整性可证明:能用平台自报作品数证明「实采 ≥ 自报」时必须证明;
证明不了就如实写「无从证明」,不得默认宣称已全量 - 覆盖范围显式披露:凡「有该类作品、但该层未审」的情况,必须写进交付物,
并由交付前自检守住。少查一层可以接受,把少查说成已查不行
交付物
| 文件 | 内容 |
|---|---|
合规审查明细表.xlsx |
六表:审查明细(一行 = 一账号 × 一检查位)· 作品清单(一行 = 一个作品,含发布时间、作品链接、命中点与依据 —— 直接回答「哪个作品违规」)· 账号总览 · 命中汇总 · 人工复核队列 · 口径说明 |
审查总览.html |
给非技术同事看的风险总览:统计卡片、违规账号明细、类别分布、人工队列 |
audit_result.json |
全量结构化结果,供二次加工 |
raw/ |
每账号原始采集 JSON(断点续跑锚点,可复查原始数据) |
未接入的平台会如实标「未核查」:编排器当前覆盖抖音与小红书,
其他平台需自行接入通道后补齐,不会被伪装成已检查。
质量门槛
- 每行必须有明确状态:「违规 / 不违规 / 未核查(原因)」,无空白、无编造
- 「未核查」与「不违规」严格区分
- 词库命中不是最终结论:上下文相关表述须过语义判定;不确定时进人工复核队列
- 只读取账号公开可见信息
- 交付时必须同时给出「命中依据」列
赞赏支持(可选)
每次交付内容后,问用户:
> 「这份审查结果对你有帮助吗?
> A. 要赞赏支持
> B. 不用了,谢谢」
- 用户选 A → 读取
references/appreciation-qr.md中的图片并展示,配一句「感谢支持!」 - 用户选 B → 不再追问,继续正常工作
- 不要在用户未选择时自动展示赞赏码,也不要反复追问
内置资源(按需加载,不要一次全读)
主文件只保留「是什么 / 怎么跑 / 不可违反什么」。以下专题记录「为什么这么做」与实测依据:
| 专题 | 何时读它 |
|---|---|
references/01_平台采集通道.md |
采集报错、切换平台、判断某通道是否可行时 |
references/02_定位与三源仲裁.md |
台账账号定位不准、多源信息冲突时 |
references/03_覆盖完整性判据.md |
判断「是否采全」、平台自报数口径有疑问时 |
references/04_视觉层与抽帧契约.md |
视觉层 / 抽帧 / 图文正文页相关;含 OCR 容错的否证结论 |
references/05_词库治理.md |
修改词库、处理误报与漏报时 |
references/07_交付物规范.md |
调整交付物结构或覆盖披露写法时 |
references/08_排障手册.md |
性能与风控约束、完整参数速查、症状 → 处置对照 |
references/09_已知限制与缺口基线.md |
需要向他人如实说明能力边界与残余风险时 |
references/appreciation-qr.md |
用户选择赞赏支持时读取 |
关键否决记录(勿重走弯路):OCR 容错(拼音 / 形近)已用 2000+ 条实采视觉层文本否证 ——
形近通道零增益、拼音通道 3 条中 2 条为误报,净损害准确性,故不实现。
详见 references/04_视觉层与抽帧契约.md;复现脚本 scripts/diag_ocr_confusion.py
与 scripts/diag_ocr_fuzzy_probe.py 随包提供,换识别引擎后可重新标定。
主要脚本
| 脚本 | 用途 |
|---|---|
scripts/run_audit.py |
端到端编排器(唯一入口) |
scripts/login_watch.py |
扫码登录,获取并复用登录态 |
scripts/build_accounts.py / clean_links.py |
从 xlsx 抽取台账、清洗链接、提取平台内唯一标识 |
scripts/resolve_identity.py |
三源定位仲裁(链接 / 平台ID / 昵称) |
scripts/match_rules.py |
规则匹配引擎(可单独对单条文本判定) |
scripts/selfcheck.py |
交付前自检(覆盖完整性、判定一致性) |
scripts/gen_review_page.py / gen_unified_report.py |
人工复核页 / 跨平台汇总报告 |
scripts/ocr_covers.py / video_sampler.py / cover_pipeline.py |
视觉层 OCR / 抽帧 / 下载流水线 |