76 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: 清理书稿文本
description: 识别并删除参考书或旧稿中的广告、水印、作者拉票和乱码噪声,同时保留逐段审计。静态导入后仍有语义垃圾时使用;模型只提候选,确定性守卫决定是否删除,绝不改写正文。首次 txt 分章落库归 导入书稿;本 Skill 只在已有 block 上做语义噪声清洗。
disable-model-invocation: true
---
# 清洗书稿正文
分工(创始人方案 2026-07-13):**规则层**已在 `导入书稿` 解决结构性垃圾(水印正则/重贴章题/目录页/分页尾巴/残破实体);本 Skill 处理**语义垃圾**——变体书站广告、作者拉票/PS 段、微信导流、乱码水印等正则打不全的散落噪声。LLM 只当探测器(输出待删片段逐字原文),删除由脚本执行:零改写、可审计、可回放。探测模型=New-API `MiniMax-M3`(经 `调用内容模型` 的受治理入口 `chat_governed`;模型降级与额度治理走全局 `BUDGET_CHAIN` 与 5h 额度窗,本 Skill 不自写降级链。全链耗尽时该窗记 skipped、不清洗、不返回假成功——网文正文会触发上游敏感词拦截,由治理链自动换模型救回)。
## 流程
```bash
# 放量驱动(每书 prep→detect→apply 全链;断点续跑/幂等防重删;可多进程分书并行)
.venv/bin/python muse/content/entity/skills/ingest/清理书稿文本/scripts/clean_batch.py --work-id 7 --work-id 10 --batch <批次号>
# 单步(调试/演示用)
.venv/bin/python muse/content/entity/skills/ingest/清理书稿文本/scripts/clean_prep.py --work-id 7 [--from 1 --to 50] # 切窗
.venv/bin/python muse/content/entity/skills/ingest/清理书稿文本/scripts/clean_detect.py --work-id 7 [--win 1] # M3 探测
.venv/bin/python muse/content/entity/skills/ingest/清理书稿文本/scripts/clean_apply.py --work-id 7 --batch X --file … [--dry-run] [--report-md docs/清洗-N-书名.md]
# 收尾收割:高频水印全书规则扫净(LLM 每窗只报样例,重复水印靠种子收割)
.venv/bin/python muse/content/entity/skills/ingest/清理书稿文本/scripts/clean_sweep.py --work-id 7 --batch X # 审计自动种子(重复≥3次且≥20字)
.venv/bin/python muse/content/entity/skills/ingest/清理书稿文本/scripts/clean_sweep.py --work-id 4 --batch X --seed "http://m." # 人工确认的碎水印
# 审查:审计对账
.venv/bin/python muse/authority/evidence/skills/访问数据库/scripts/db.py query "SELECT batch, count(*), sum(length(removed_text)) FROM example_clean_log WHERE work_id=7 GROUP BY batch"
```
⚠️ prep 会覆盖 /tmp/muse-clean/<work>/ 的窗与 manifest——换范围重切前先归档旧产物目录。
## 守卫体系(脚本硬闸,LLM 建议 ≠ 必删;全部为放量实测病对症)
1. **长度界**:`exact` 4–500 字;
2. **章题保护**:不得含/命中所在章章题;
3. **单章顶**:单章累计删除 ≤ max(章长 20%, 120 字)——绝对下限救短章(百字残章按比例删不了任何垃圾);
4. **行级垃圾特征**:exact 每一行必须命中通用垃圾词(ps头/感谢/求票/微信公众号/域名符号/盗版占位语…不含书内专名)或书名水印豁免(孤行=本书名、行含《本书名》);无特征行拆行跳过(宁漏删不误删——实拦「广告+被截断正文」粘连 3 处);
5. **水印裁剪**:删除段含明确水印模式(百镀一下/一秒记住…免费阅读)且水印前有前缀时只删水印——防「正文行尾粘水印」误删正文头(实测修复 1 例 3 字误删)。
匹配三级:精确命中 → 空白弹性(M3 折叠 `\n\n\n`→`\n\n`)→ 邻章 ±1 容错(长窗内章号偏移;fix 轮还能二次收割邻章重复水印)。三级全失败 → 拒绝。收尾规则:被删 ps 段的前置星号分隔线孤悬章尾则连带清除;被清洗章空行归一。每次删除一行审计(原文/理由/模型/批次),源 txt 永远不动(可整书重导回滚)。
## P2 全语料实测(2026-07-13 收口)
- 8 书 ≈3,300 万字 ≈340 窗;M3 中文 ≈0.58 token/字,总输入 ~20M token;10 万字窗 in≈5.9 万 token、耗时 10–25s;
- 总删除 **1,685 段 / 约 6.1 万字**(机破星河 2.4 万最脏、机战无限 1.9 万次之);误删实测 1 例 3 字(已修复+守卫补上);
- 已知残留:作者疲劳话(无通用特征)、「重贴章题+(第N更 求月票)」嵌正文行变体(高风险规则,待拍)、感言/请假条整章(结构性存在,段落清洗不动章)。
## 输入
- 库内已导入作品的章节 block 文本(`muse_content_block`),按 `--work-id` 与窗范围切分。
- 可选:`clean_prep` 产出的窗 manifest、`clean_detect` 的 M3 探测 JSON、人工 `--seed` 水印片段。
## 输出
- `example_clean_log` 逐段删除审计(原文片段、理由、模型、批次、删除字数)。
- 可选 Markdown 审查报告(`--report-md`);源 txt 与导入快照不改写。
## 数据边界
- 读写:`example_clean_log`、目标作品的 `muse_content_block`(apply 阶段软删/标记噪声段,不碰源文件)。
- 模型:经 `调用内容模型` 的 `chat_governed` 探测;额度耗尽时该窗记 skipped,不返回假成功。
- 不改正文语义、不重写句子、不触发拆书或知识抽取。
## 红线
- LLM 建议 ≠ 必删;守卫五级全失败则拒绝,宁漏删不误删。
- 单章累计删除不得超过 `max(章长 20%, 120 字)` 上限。
- 不得删除章题、不得命中无垃圾特征的正文行。
- 源 txt 永远不动;回滚靠重导,不靠 apply 逆操作。
- 全链模型耗尽时 fail-closed,禁止空批通过。
## 复利合同
- 成功落库后经 `记录运行证据` 的 `propose_lesson_dedup` 登记 `example_lesson`(绑 run_id / work_id)。
- 升格仍走人工评审,不自动把单次运行升为公共范式。