59 lines
3.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 确定性分章并写入作品、章节、正文 block 和来源档案。首次导入完整书稿或明确重导时使用;不调用模型、不改写正文。导入后散落广告/乱码/拉票等语义噪声归 清理书稿文本,本 Skill 不做 M3 探测删除。
disable-model-invocation: true
---
# 导入完整书稿
对应 muse API 面:导入解析旅程(产品-03 §3.7)。落库走 psycopg 直连(凭据同 `访问数据库`),写入约定见 [`表映射.md`](../../../../../authority/db/表映射.md)。
## 用法
```bash
# 预演:只解析打印对账,不落库
.venv/bin/python muse/content/entity/skills/ingest/导入书稿/scripts/import_novel.py --dry-run "../小说清单/机动风暴_骷髅精灵.txt"
# 正式导入(已存在同名作品则拒绝,--force 软删旧行重导)
.venv/bin/python muse/content/entity/skills/ingest/导入书稿/scripts/import_novel.py "../小说清单/超神机械师_齐佩甲.txt"
.venv/bin/python muse/content/entity/skills/ingest/导入书稿/scripts/import_novel.py --force "../小说清单/机动风暴_骷髅精灵.txt"
```
## 分章规则(按覆盖的真实格式)
- **恒启用**:`第X章 标题`(中文/阿拉伯数字,含「两/零/〇」);`第X卷 第Y章 标题` 与无空格变体(取章开章,卷号入章行快照);纯卷行(有卷无章)不开章只计数。
- **自适应启用**(书内命中 ≥50 次才生效,防误切):裸阿拉伯 `001 标题` 式;裸中文数字 `一百零二 标题` 式。
- **修复规则**:同题重现一律不开新章(盗版重贴水印,丢标题行、正文归当前章);尾部章号大幅回落(<前文峰值一半且位于文件末 5%)→ 该处起截断丢弃;全文过 `html.unescape` 解实体;章号解析失败(如「一八五十一」错写)→ 继承前章号+1 并计数。
## 落库(一书一事务)
| 表 | 写入 |
|---|---|
| muse_content_work | 一行:title/genre='科幻'/status='completed'/owner_user_id=1/字数章数/import_status='imported'/parse_status='pending' |
| muse_content_chapter | 一章一行:order_no=顺序号、title=章题(≤200 字)、outline_snapshot 存 {卷号,解析章号} |
| muse_content_block | 一章一 block:order_no=1、block_type='scene'、content_text=正文、word_count |
| muse_knowledge_base | 幂等 ensure 两行:『参考书私有库』(kb_type='user') 与『公共范式库』(kb_type='global') |
| muse_knowledge_document | 每书一行挂私有库:file_hash=sha256、storage_ref=源文件相对路径 |
| example_reference_work | 参考书档案:作者/声明章数/导入章数/字符数/notes(修复统计) |
| muse_content_import_task | 审计一行:command_id=import-<hash16> 幂等,source_snapshot=对账 JSON |
## 审查面
- `--dry-run` 与正式导入都打印**对账表**:声明章数 vs 导入章数、丢弃重复题数、尾部截断行、卷分隔数、章号异常数、总字数,另附首/中/末三章题目与正文首行抽样。
- 导入后用 `访问数据库` 抽查:`query "SELECT order_no,title FROM muse_content_chapter WHERE work_id=… ORDER BY order_no LIMIT 5"`。
## 红线
- 原文只入私有库(work/chapter/block + 私有 kb 档案),公共面(拆书范式)另走 B2 且脱敏;本 skill 不做任何内容改写(除实体解码与噪音标题行修复)。
- 同名作品不覆盖:必须显式 `--force`(软删旧行,审计可溯)。
## 输出
- 面向当前任务的可执行判断、检查清单或改写建议(Markdown 结构化段落)。
- 不直接落库、不代替 `写下一章` / `决定正文候选去留` 写 Canonical。
## 复利合同
- 成功落库后经 `记录运行证据` 的 `propose_lesson_dedup` 登记 `example_lesson`(绑 run_id / work_id)。
- 升格仍走人工评审,不自动把单次运行升为公共范式。