context-infra 检查与复盘infra.guiming.net · 全内容自包含呈现 · 生成于 2026-07-21 16:28 UTC

Library Distillation

Z3 全文↑ Z2 条目

术-内容 · 术层 skill 全文

← 返回术层 skill 索引 · 返回方法论区

本页是 <code>rules/skills/workflow_library_distillation.md</code> 的逐字投影(仅隐私清洗,零改写)。

时点提示:本页是仓内文件 rules/skills/workflow_library_distillation.md 的逐字投影(仅做隐私清洗:仓库根绝对路径→相对路径、家目录→~/;除此零改写)。若源文件后续有修订,以仓内真源为准。

Workflow: Library Distillation

类型: Workflow skill

用途: 把一本方法论密集的书蒸馏为 agent 可直接调用的 axioms / skills / meta-skills

产物性质: 每个单元可独立调用、可组合使用、可压力测试 —— 不是摘要、不是读书笔记

2026-05-31 重大更新:作者忠实度优先 + 写时 verify-gate(新方法,已实证)

基于实测:旧 8-phase 产物只有约 20% 作者扎根、80% 编辑物,R / A1 / B 在多个 skill 间逐字节相同模板;Phase 4 的 3110 个合成 test-prompts 从未被任何 runner 执行(画靶射箭,should_trigger 是 A2 语言信号逐字复制),事后两两正交审计不落地。三本代表书(Out of the Tar Pit / Gödel Escher Bach / A Pattern Language)用新方法 + Codex 全量重蒸 + 盲审验证:作者忠实度 8.0/10,客观逐字核验 97-100%(旧方法 0% 可核验)。证据与评价见 adhoc_jobs/distillation_newmethod_trial_20260531/EVALUATION_AND_WORKFLOW_UPDATE.md,方法全文 tmp/distill_newmethod/METHOD_v3.md,更新历史 WORKFLOW_UPDATE_HISTORY.md

新方法的核心改动(取代下方 Phase 2 / 4 / 5 的对应做法):

  1. 写时逐字纪律 + 硬 gate:R / A1 必须从源文逐字复制 + 给行号;写完由 library_distillation_verify_citations(独立确定性脚本,非 LLM 自评)核验,PARAPHRASE / MISCITED 必须修或老实标 PARAPHRASE(去引号去行号)。这是缺失的「误差信号」,替代不可靠的自我回望(实测 Codex 自报零问题但实际 86% 转述冒充逐字)。
  2. 道术矩阵:用作者「问题 → 解法」结构组织(行 = 作者问题 / 道,列 = 术 + 作者招牌诊断信号)。正交性从矩阵位置读出(同格 MERGE / 相邻格 COMPOSES 且引作者亲手写的链接 / 异行天然正交),不做 Phase 4 的事后两两 should_trigger 交叉审计。
  3. 取消合成 test-prompts:改为每条 skill 的机械锚 mechanical_anchors.md(≥2 条确定性可核验 positive + ≥1 条 decoy);触发正确性与有效性差异交 Harness 层 differential oracle(loop3/4/5 协议:paired skill-blind vs skill-loaded、fresh-agent routing probe),不在写 skill 阶段造虚拟场景。研究依据 TESTCASE_RESEARCH_BRIEF.md
  4. 大书分块:单次蒸馏 source ≤ ~40K tokens(实测一次喂 272K → 86% 转述冒充逐字;按 ~43K / chunk → 99.4% 逐字)。
  5. skill 内容再平衡:E 段(含 输入 / 输出 / 每步判停)为主体;R 真引文(不截断)+ A1 作者真实例;与相邻 skill 的区别压成一行指针指回矩阵(不在 skill 体内重复三遍);现代 / 编辑性 caveat 显式标 editorial(非作者原文)。

下方 Phase 4 的「合成 test-prompts」和「事后两两正交审计」标记为 deprecated(保留历史,不再作为默认路径)。Phase 0 多路 critique、Phase 1.5 source contract 判断层、Phase 3 关系图保留有效。

把以上并入下方逐 phase 正文 + 同步 tools/library_distillation/prompts/phase*.md全面重构version-manager + reference_validator,待用户确认后执行(本次先做顶层更新 + 工具落地 + 实证,不静默改写全部 phase 文本)。

运行入口(新方法 phase-split 管线,2026-05-31 落地,按名见 tools/INDEX.mdtools/library_distillation/v3_run.sh 编排 v3_p0_split(切 ≤40K chunk)→ v3_p1_distill(Codex primary + Kimi fallback,不用 GLM/zai,每 chunk checkpoint 断点续传)→ v3_p2_verifyverify_citations gate + repair ≤2 轮)→ v3_p3_assemble(汇编到 draft track v3/)。误报限额 bug 已修(router.py 成功路径不再扫 rate-limit 短路 + quota_state.py 先解析 ISO 绝对日期)。

When to Use

当一本书从"读过但调不出来"需要转化为 agent 或人可直接调用的认知单元时走本 workflow。

Prerequisites

按名引用工具,路径查 tools/INDEX.md

Tmp Intake Gate

当用户的自然语言请求包含“书在 tmp/ / temp/ 里”“帮我蒸馏这些书”“新 session 开始后处理书籍”等场景,第一步不是跑 run_book.py,而是先做 tmp intake。

第一动作

python3 tools/library_distillation/distill_from_tmp.py plan --recent-hours 48

若 plan 中 slug、目标路径、replace 行为清楚,才执行:

python3 tools/library_distillation/distill_from_tmp.py run \
  --source <tmp/source.pdf-or-epub> --slug <book_slug> --name <canonical_name> \
  --provider codex:medium --track codex_v6 --max-parallel 2 --yes

若只需要验证 intake / TXT conversion,不进入长蒸馏,使用 --prepare-only --yes

低负担 agent loop:新 session 不要把整套 Phase 细节一次性放进工作记忆。先执行:

python3 tools/library_distillation/distill_from_tmp.py plan --recent-hours 48 \
  --write-plan tmp/library_distillation_intake_plan.json --json

只检查 plan 的 blockedslugcanonical_namedestination_path_relativereplace_requested。若是新 slug,主 agent 先统一更新 contexts/library/INDEX.md;每本书的 worker / sub-agent 不改这个共享书单。若 blocked 为空且来源文件符合用户要求,直接执行:

python3 tools/library_distillation/distill_from_tmp.py run \
  --plan-file tmp/library_distillation_intake_plan.json --yes

完成或中断后再运行 doctor。不要在 doctor 报缺口之前手工跳进 Phase 0-5 的内部状态。

硬条件

Source Preparation Gate

Distillation 的第一层确定性检查是 source preparation,不再要求 agent 手工判断 PDF / EPUB 该怎么转 TXT。

成功条件source_original/ 至少存在一个可用 .txt / .md;若只有 PDF / EPUB,library_distillation_prepare_source 必须生成 .txtsource_preparation.jsonSOURCE_PREPARATION.md,记录 method、输入路径、输出路径、文本统计、OCR fallback 和 warning。split_book.py 只消费已准备好的 text。

PDF 策略:优先 pdftotext -layout,因为它保留页内布局且成本低。若 text layer 为空、极短或字母数字密度异常低,转入 OCR fallback。OCR 产物足够用于搜索、切章和蒸馏;exact quotes、公式、页码、表格仍需回查原 PDF。

EPUB 策略:按 OPF spine 顺序提取正文,避免按 ZIP 文件名乱序。若 EPUB spine 缺失,才退回 HTML 文件名排序,并在 source_preparation.json 中留下 method details。

验收边界:source preparation 只证明 text 可用,不证明章节切分完美。OCR 噪声、跨页断行、图表公式损坏要进入 Phase 0 summary / source contract caveat,而不是在 source preparation 阶段伪装成 clean source。

Provider Runtime Handling

Provider failure 是运行时状态,不应污染书籍完成事实。

Reading Strategy for Large Books

原书 100K+ tokens 时主 agent 不直读全书原文,否则 context 被原文吃掉,设计 / 写作 / 验证无余地。

主 agent 读什么BOOK_OVERVIEW.md、各章 summary、候选清单的结构化字段(tier / anchor 等,不含大段原文)、合并产物。原文 raw text 不读。

原文读取 delegate 给分章 sub-agent:先用 token_estimator 估总 token 和每章 token;按保序装箱分组(preserve-order chunking,非 token 降序)保章节连贯;每组大小让 sub-agent 一次读完且有余量产结构化输出;sub-agent 只回传结构化产出(摘要 / candidate / local concept 列表),不回传原文。

Context 预算分配(参考比例):设计 + 编排约 15%;写作(RIA++ / INDEX / meta-skill)> 50%;验证 + 收尾约 20%;剩余 buffer 给分派 prompt 和中间产物阅读。

降级策略:主 agent context 超过 70% 时停止写新 RIA++,将剩余候选持久化到 process/remaining_candidates.md。单 session 不够时中间产物全部落盘(process/ 目录),分 session 续跑,下一 session 从磁盘读,不依赖对话历史。超大书(200K+ tokens)默认分 2–3 个 session:Phase 0–1B / Phase 1.5–2 / 验证 + 晋升。

Orchestration Cheatsheet

Phase 0:   N 章节摘要 + 多路 critique (并行)
Phase 1A:  主 agent 写 anchor_list; N distributed-scan + 主 agent merge
Phase 1B:  M extractor (M = 章节组数, ≤并发上限)
Phase 1.5: 三重验证 + source contracts + coverage ledger + mini/final merge
Phase 2:   主 agent 分阶段亲写 RIA++
Phase 3:   主 agent 亲写 Zettelkasten INDEX
Phase 4:   test-prompts + 正交 / 尺寸 / cold-read + Phase 4e utility gate
Phase 5:   meta-skill 合成 + 晋升评估

N / M / K 由书的章节数 + token 量决定。下游 phase 读上游落盘产物,不允许跳 phase 反推。

核心 Phase

Phase 0 — Adler 整书理解 + 多路 Critique

Phase 1A — Anchor List + Cross-Chapter Concept Index

Phase 1B — 五类 Extractor 并行提取 + 红绿灯分级

Phase 1.5 — 三重验证筛选 + 合并(按 tier 分流)

Phase 2 — RIA++ 构造(写作由主 agent 亲写)

本阶段是"精确提取"收束为"可被陌生 agent 调用"的 skill / axiom 的关键写作点。RIA++ 六段是通用 skill 规范(When to Use / Prerequisites / 步骤 / 验收 / 边界)在 library distillation 子类的具象化:metadata 头承担 Prerequisites 的可回溯部分;A2 承担 When to Use 的触发判定;E 承担步骤与判停;B 承担边界。陌生 agent 读单条 SKILL.md 即可判"是否触发 / 如何执行 / 何时停 / 何时不该调用"。

Phase 3 — Zettelkasten 链接

Phase 4 — 压力测试 + 质量把关

Phase 4e — Differential Utility Gate(晋升 gate,不修 source fidelity)

Phase 4e 在 source fidelity、test-prompts、orthogonality、size、cold-read 之后运行。它只回答一个问题:一个已经 source-faithful 且可触发的单元,加载后是否改变实际工程判断或行动。

Phase 5 — Meta-skill 合成 + 晋升评估

失败与恢复

以下基于真实执行观测,不编造。

Bad Behavior 防护

产物质量标准

以陌生 agent 能否独立调用为准,非形式指标。

Axiom:六节齐全;单独读可重述核心公理不依赖书外背景;高风险 axiom 的陷阱段含来自 critique 的作者局限(非当场发明的免责声明);与 rules/axioms/INDEX.md 既有公理有显式关系或明确新增。

Skill:RIA++ 六段齐全;有 source contract 和 coverage ledger row;fragile claim 已 active retrieval;A2 三件事缺一不可(具体场景 + 语言信号 + 相邻区分)—— 这是"可独立调用"性质在 skill 层面的实体化;E 段步骤可执行每步有判停点;B 段含反场景 + 失败模式 + 作者盲点;有 test-prompts(≥3 should_trigger / ≥2 诱饵 / ≥1 edge_case);两两正交性问题有结论;Phase 4e 不为 vocabulary-only。

Meta-skill:N 步 procedure 每步含 input / output / decision criterion;composed-of 列出组合的 axiom / skill ID;V-meta 三问(Pipeline Reality / Independent Scaffold Value / Non-Tautology)有显式回答;不是子单元同义重述或简单 concat。

INDEX:每条边指向真实 ID,无悬空引用;depends 图无环;Zettelkasten 关系只记真实 usage(说不出一句话理由的关系不写)。

工具引用

按名引用,路径查 tools/INDEX.md


← 返回术层 skill 索引 · 返回方法论区