76 lines
5.9 KiB
Markdown
76 lines
5.9 KiB
Markdown
---
|
||
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)。
|
||
- 升格仍走人工评审,不自动把单次运行升为公共范式。
|