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