# 中医知识库「结构优先」改造 · 本轮进度与成果总结

**2026-10-02** · 本机实测，全部数字可复现 · 请外部评审过目

> 本文件与工作区下列文件配套：`交接-知识库结构优先-本轮收尾-20261002.md`、`处理记录-针灸大成-20261002.md`、`处理记录-脈經校注-20261002.md`、`验收报告-素问语译-20261002.md`、`抽查单-脈經校注-20261002.md`

---

## 一、本轮起点与终点

**起点**：GPT 复核结论（两份抽查单通过；《针灸大成》作为针灸专著类样板通过；卷次只作推定元数据；补两个小修正后可继续批量）。

**终点**：复核清单**全部落地**，并**多完成一本**（医经校注类首本《脈經校注》）。

| 复核意见 | 落地 | 证据 |
|---|---|---|
| 抽查单两份通过 | 已确认 | `抽查单-素问语译-20261002.md`、`抽查单-针灸大成-20261002.md` |
| 《针灸大成》h1「卷之八」误标：原文原样保留 | ✅ 一字未改 | 各篇 h1 原文、书目篇内书内目录 |
| 不把推定卷次写入正文 | ✅ 只进元数据 | `jd_meta.json` → `inferred_juan` / `inferred_juan_note`（标「非原文、待核」） |
| 元数据注明「源 EPUB 卷标题疑似错误」 | ✅ | `jd_meta.json` → `source_defect_juan` |
| 小修正①：前置页/版权页/目录页标记「书目信息／目录」 | ✅ 两本书都做了 | 针灸大成 4 页→1 篇；素问语译 135 元素→1 篇；篇首固定标记行，文字未删 |
| 小修正②（同卷次） | ✅ | 见上 |
| 新库改名「中医·结构优先」 | ✅ 库 id 不变 | `8bf27782-5f61-49c8-8d9a-af2b89158239` |
| 按书建目录和处理记录 | ✅ | 4 个类目录 + 4 个书目录，每书 1 篇处理记录 |
| 继续碎书，先做《脉经校注》 | ✅ 已完成并入库 | 105 篇 / 743 片，核验全通过 |
| 原 EPUB、旧库、临时结果保留 | ✅ | 未删任何库、未动原文件 |

---

## 二、成果：已完成 4 本书（旧库对照 47 本中的 4 本）

| 目录（主库内） | 篇数 | 块数 | 字符 | 逐篇块数一致 | 逐字无损 | 出处可回解 |
|---|---|---|---|---|---|---|
| 教材讲义类 / 经络腧穴学 | 29 | 676 | 297,000 | ✅ | ✅ | 676/676 |
| 医经语译类 / 黄帝内经素问语译 | 84 | 963 | 386,200 | ✅ 84/84 | ✅ 12 字滑窗 0 缺口 | 931/931 |
| 针灸专著类 / 针灸大成 | 234 | 1,607 | 378,648 | ✅ 232/233（唯一差异=书目篇多 1 块，见下注） | ✅ 0 缺口 | 1859/1859 |
| 医经校注类 / 脈經校注 | 106 | 760 | 276,841 | ✅ 105/105 | ✅ 0 缺口 | 2557/2557 |
| **合计** | **453** | **4,006** | **1,338,689** | — | — | — |

> 注：《针灸大成》书目信息篇库内 35 块 = 送入 34 片 + 1 条「插件按标题注入的上下文」，它自成一块。这是插件既有行为，不影响内容，也不影响无损。

**检索实测（显式限定主库，TopK=4）**

| 限定书 | 问题 | 首块 | 结果 |
|---|---|---|---|
| 经络腧穴学 | 中府 定位 | 339 字符 | ✅ 完整穴位条目（定位/取法/解剖/主治/操作/古文献摘录） |
| 黄帝内经素问语译 | 上古天真论 女子七岁 肾气盛 | 451 字符 | ✅ 原文+注解+语译同块 |
| 针灸大成 | 考正穴法 中府 定位 | 192 字符 | ✅ |
| 针灸大成 | 标幽赋 注解 | 195 字符 | ✅ |
| 脈經校注 | 浮脈 舉之有餘 按之不足 | 371 字符 | ✅（旧 md 版是 1294 字一大块） |
| 脈經校注 | 寸口脈浮 中風 發熱 頭痛 宜服桂枝湯 | 341 字符 | ✅ |

---

## 三、三本书族模板已固化（后续书可直接复用）

| 书族 | 模板 | 单元规则 | 已用 |
|---|---|---|---|
| 医经语译类 | `gen_suwen.py` | 一条 = 原文段 +【注解】+注文 +【语译】+译文；篇=文档 | 素问语译（首本） |
| 针灸专著类 | `gen_jd.py` | 四模式自适应：歌赋注解型／短行打包型／长段型／考正穴法穴条型；一穴一条 | 针灸大成（首本） |
| 医经校注类 | `gen_mj.py` | **一条 = 原文段 + 紧随其后的注释段**（注释段以〔N〕开头，遇新原文/标题收束）；篇标题+提要+按语同片 | 脈經校注（首本） |

**三条通用硬约束（已写入各处理记录）**
1. **12 字滑窗全覆盖**取代顺序拼接判据 —— 源目录是嵌套 div，同级内容会被重复包两次，顺序判据必误报。
2. **连续起首不拆分** —— 「穴名/脉名 + 别名 + 空格」的正则会命中针法口诀、手法连续论述的句首；只按白名单判定起首，白名单外一律不拆。
3. **插件无移动文档接口** —— 迁目录只能「取回 rawText → 删除 → 按 `parentDirectoryId` 重新入库」。

---

## 四、⚠ 本轮发现的一个真问题（待定处置）

**检索开关的「启用范围」实际不生效。**

- 现象：`GET /knowledge/knowledge-toggle` 显示 `enabledBaseIds = ["8bf27782-…（中医·结构优先）"]`，但 `POST /knowledge/search`（不带 `baseId`）**仍返回旧「中医」库和临时库的块**。
- 实例：问「浮脈 舉之有餘 按之不足」，前 3 名全是旧库（`中医古籍整理丛书重刊-18-脈經校注.md` 等），新结构库同名文档排第 4。
- 原因（已读插件源码，非猜测）：`enabledBaseIds` 只被 `knowledge-toggle` 路由存取、供面板显示；检索链路 `search()` / `searchSingle()` 只认请求里的 `baseId` / `baseIds`，**从不读 `getEnabledBaseIds()`**。另实测 `docIds` 也不是硬过滤，**只有 `baseId` / `baseIds` 是硬过滤**。
- 影响：库列表现有 12 个库（含 6 个 `_tmp-*` 临时库、旧「中医」「中医新」），同一内容多份竞争，旧库大块常因分数略高挤到前面。

**三个候选处置（需用户/评审定）**
1. 检索时显式带 `baseId` —— 无需改本体，但依赖调用方自觉；
2. 改插件让其回落到 `getEnabledBaseIds()` —— 属 DSH 本体改动，需批准 + 重启；
3. 删 6 个废弃 `_tmp-*` 库 —— 立刻减少重复竞争，但不能阻止旧库参与。

> **本轮没有动插件本体，也没有删任何库。**

---

## 五、待复核 / 未完成

1. **《脈經校注》抽查单 34 条待人工过目**（`抽查单-脈經校注-20261002.md`，覆盖开头/中间/结尾/最长块/带图片/异常短块/篇标题+提要+按语/原文+注释条/短条打包片/卷首/书目信息/表格/短条+注释）。
2. **剩余 42 本未开工**（本批共 46 本）：医经校注类 4 本、医经语译类 2 本、针灸专著类 2 本、教材讲义类 5 本、方书类 6 本、其余「较粗」的书 23 本左右；「较粗」的那批要连图片、脚注、字形图一起从 EPUB 重做。
3. **字形图提字**单独立项（全 10 个 EPUB 共 13,588 张字形图 / 约 1.36 万字），建议先做 1 本验证准确率。
4. 历史遗留：凭据轮换、`parseEpub` 不读 OPF spine 的上游 issue、临时库清理。

---

## 六、边界与合规

- **未改动**：原始 EPUB（10 个）、旧「中医」库（47 文档）、「中医新」库（6535 块）、插件文件、检索开关值（仅 `siblingChunks: 0` 一处库级配置，前值已存档可回退）。
- **本文件不含任何 API key 或凭据**；所有涉密字段一律掩码描述。
- 所有数字均为本机实测；每本书的核验脚本、数据文件、日志均留在 `工作区\_tmp\` 下可复查。

*生成时间：2026-10-02*
