小红书发布前检测
把「发一篇笔记之前要人工过的那些关」变成一条命令 + 一个退出码。
发布前一次性过完 4 组检查,直接告诉你:能不能发、哪一条要改、改成什么。
定位:内容合规自查,不是别的东西
这是对照平台公开规范做发布前自检。类比:进机场前自己先检查一遍行李。
- 对照的是平台公开的社区规范与元数据限制 —— 创作者对照公开规范自查,是权利也是义务
- 本 skill 不做内容生成,也不碰发布自动化;它只回答「这一篇现在能不能发」
- 措辞纪律(任何会被平台自动扫描的产物都该有这一条):统一用「合规自查 / 发布前自检 / 对照公开规范」这一组词,不自造其它同义改写
架构上的对应约束:词库 references/prohibited-words.md 里带有运营视角的叙述,
本 skill 只取它的「词 + 级别 + 替代建议」三列,不引用那些叙述。词库是单一真相源,
过滤是这一层的责任。
Trigger
- 小红书笔记发布前,想知道这一篇会不会被限流 / 驳回
- 手上有一篇终稿(md / txt),想一条命令过一遍
- 想用退出码把自检接进发布流程,而不是靠记忆
- 想知道改了之后有没有真的清干净
快速开始
# 1. 从笔记 md 读(推荐):读「## 标题」「## 正文」「## 标签」三段
python3 scripts/preflight.py --file 笔记终稿.md
# 2. 直接传文本
python3 scripts/preflight.py --title "标题" --body "正文" --tags "#标签1 #标签2"
# 3. 位置参数
python3 scripts/preflight.py "标题" "正文" "标签"
# 4. 机器可读(接自动化)
python3 scripts/preflight.py --file 笔记终稿.md --json
未提供的项自动跳过,不报错(只给标题也能跑,只是不做正文检查)。
退出码 —— 这是「可卡发布」的关键
| 码 | 含义 | 该怎么办 |
|---|---|---|
0 |
通过 | 可以发 |
1 |
有 P0 必改项 | 不许发,清空 P0 再重跑 |
2 |
只有 P1 建议项 | 可发,但建议顺手改 |
3 |
输入缺失 / 词库找不到 / 解析失败 | fail-closed,按「不允许发布」处理 |
为什么 3 要单独留一档:「没查出来」和「查不了」必须是两件事。 一条发布前的自检命令如果把依赖缺失静默当成「干净」,那它比没有更危险 —— 你会以为查过了。
4 组检查项
| # | 检查组 | 查什么 | 数据来源 |
|---|---|---|---|
| 1 | 违禁词·敏感词·限流词 | 实测硬词(如「白嫖」)、营销高危组合(官方+免费+拿证)、外部平台名、极限词、价格诱导、账号级禁区词 | 词库(单一真相源) |
| 2 | 标题与篇幅规范 | 标题 20 字符上限、过短、无结果感钩子、感叹号 / emoji 堆叠;正文 1000 字符上限 | references/platforms/xiaohongshu.json |
| 3 | AI 声明与强制标注 | 文本命中 AI 生成 / 辅助信号时提醒勾选声明;并列出平台强制标注项供逐条核对 | 平台 JSON + 词库「七」 |
| 4 | 导流风险 | 手机号、邮箱、二维码 / 扫码话术、私域话术 | 平台 JSON + 词库「二」「五」 |
三档分级:P0 必改(阻塞)/P1 建议改(不阻塞)/提示(不影响退出码)。
输出长这样
【违禁词·敏感词·限流词】
✗ P0 [全文]「白嫖」 ×2
依据:9/12 两次实测"仅自己可见"软限流,改标题去词后重过审核即恢复
建议:直接删,靠"结果感"钩子(如"4小时拿3个徽章")
【标题与篇幅规范】
! P1 [标题]「24 字符(上限 20)」
依据:小红书标题上限 20 字符,超出会被折叠,钩子在列表页看不全
建议:压到 20 字符内,把结果感放前半句
──────────────────────────────────────────────
结论:✗ 需改 —— P0 共 9 处(7 项),P0 未清空 = 禁止发布
最小补法
1. 先清 P0(9 处)—— 这一档清空之前不要发
2. 再处理 P1(1 处)—— 顺手改,不阻塞
3. 重跑自检:python3 scripts/preflight.py --file 笔记终稿.md
未覆盖:图片 / 封面 / 视频 —— v1 只查文本
退出码 1
同一个词出现多次会折叠成 ×N —— 自检结果要能一眼看完,不是把出现次数都铺出来。
依赖:词库与解析器都只有一份
违禁词库的单一真相源是 skill xiaohongshu-prohibited-words,
本 skill 不复制它,只在运行时按候选路径去读。
⚠️ 这是一个硬依赖 —— 用之前先装它,否则本 skill 会一直返回退出码 3:
clawhub install xiaohongshu-prohibited-words
其它行为:
- 支持
--wordlist <路径>指定,或环境变量XHS_WORDLIST - 解析出 0 条规则 = 退出码 3(词库格式变了必须炸出来,不能静默通过)
- 输出里会打印「载入了多少条、各段各多少条」—— 词库漂移一眼可见
解析逻辑也不在这里:本 skill 复用词库 skill 的 scripts/wordlist.py
(运行时按它相对于词库的路径动态载入),不保留自己的解析副本。
段落映射与逐词级别(哪一段归哪一组、默认什么级别、「微信号」为什么提到 P0)
写在词库 skill 的 references/sections.json —— 本 skill 下一次运行自动跟上。
怎么维护
改平台规则(字数上限、标题规则、AI 信号词)→ 只改
references/platforms/xiaohongshu.json,不用动脚本。
改词 / 改级别 → 改词库那边(xiaohongshu-prohibited-words/references/):
prohibited-words.md 加词、sections.json 改段落级别 —— 本 skill 下次运行自动跟上。
加平台(v2 方向) → 在 references/platforms/ 下加一个 <platform>.json
(公众号 / 抖音…),用 --platform <name> 切。只加数据文件,不改架构。
python3 scripts/selftest.sh # 改完跑一遍,确认 4 条路径的退出码没跑偏
资源
scripts/preflight.py— 主脚本(纯 stdlib,零依赖)scripts/selftest.sh— 退出码回归自测references/platforms/xiaohongshu.json— 平台规则(字数上限、标题规则、AI 信号)references/wordlist-bridge.md— 与词库的引用关系、只取三列原则、解析逻辑位置- 词库与解析器来自
xiaohongshu-prohibited-words(references/sections.json+scripts/wordlist.py) examples/— 通过 / 不通过两个用例
明确不做(Non-goals)
- ❌ 不做内容生成 —— 生成侧是红海,且不是本 skill 的资产
- ❌ 不做发布自动化
- ❌ 不做爆款 / 流量预测 —— 没有数据基础
- ❌ v1 不查图片 / 封面 / 视频 —— 只做文本,封面配字与 OCR 请人工过一眼
- ❌ 不复刻词库 —— 单一真相源在
xiaohongshu-prohibited-words - ❌ 不替代
multi-wordcheck—— 那是三平台通用词检,本 skill 只盯「小红书发布前这一刻」
引用关系
- 引用
xiaohongshu-prohibited-words的词库(运行时不复制) - 可被
xiaohongshu-content-workflow串在内容生产最后一步当闸门
