# 认知图：3.入库与查询流水线

# 认知图：入库与查询流水线

文档定位：规范态（spec）。

依赖：[认知图：以谓词作为概念](认知图：1.以谓词作为概念.md)（unit / 节点 / 谓词定义）、[文本到认知图：图构建方法](认知图：2.图构建方法.md)（文本 → 图构建流程）。

覆盖：扩展《认知图：1》§7 的查询规范——允许 LLM 在线参与、补缓存 / 明面关系优先等节流策略。两份冲突时以本文档为准。

***

## §1 总览

### 1.1 系统范围

把认知图作为长期可推理的知识层，对接 LLM 完成两端：

* 入库——自然语言文本 → unit 集 + 节点向量；

* 查询——query 文本 → 命中 unit 集 → LLM 总结答案。

两端结构对称——同一套 LLM 抽取规则，同一组节点向量。

### 1.2 关键特性

| 特性 | 含义 | 主要定义 |
| - | - | - |
| 对称性 | 入库与查询走同一套 LLM 抽取规则；向量化基于同一组节点 | §2.1 + §3.1 |
| 多层检索 | 向量给入口、图给结构、扩散给广度 | §3.2 / §3.3 |
| LLM 节流 | 明面关系优先 + 缓存；LLM 只在权衡 / 合成位介入 | §4 |
| 迭代终止 | 图扩展 ↔ LLM 下钻可来回多次；按覆盖度 / 边际收益收敛 | §3.4 |

### 1.3 流水线概览

入库：

```
原文 → LLM 抽取 → unit 集 + 图拓扑 → 节点向量化 → 持久化
```

查询：

```
query → LLM 抽关键节点 → 向量比对 → 候选节点集
                                       ↓
                            ┌────────────────────┐
                            │ 图扩展（无 LLM）   │
                            │   ├ 定向遍历       │
                            │   └ 扩散查询       │
                            └─────────┬──────────┘
                                      ↓
                            ┌────────────────────┐
                            │ LLM 分层下钻       │
                            │挑选 / 判够 / 选下跳│
                            └─────┬──────────┬───┘
                                  ↓够       ↓不够 / 漂移
                              总结返回    新种子 → 回图扩展
```

### 1.4 记号约定

| 记号 | 含义 |
| - | - |
| `{X}` / `(X)` / `[P]` | 见《认知图：1》§1.4 |
| `subject_mentions` / `context_mentions` / `narrowed_by` | 反向索引；见《认知图：1》§7.1 |
| ≡ / ↔ / ⇒ | 判断索引；见《认知图：1》§7.2 |
| τ(edge_type) / ε / K | 扩散查询参数；见 §3.3.2 |

***

## §2 入库流水线

### 2.1 LLM 抽取

按《认知图：2》§2 把原文压成 unit 集 + 入口节点 + 关系。允许两种激进度：

| 模式 | 适用 | 行为 |
| - | - | - |
| 摘要驱动 | 论文 / 综述 / 技术文档 | 剥叙述外壳、合并冗余事实，留事实骨架 |
| 细节保留 | 访谈 / 评论 / 用户输入 | 保留量化 / 程度 / 置信度修饰行，叙述细节进 `()[模态]` / `()[置信度]` |

两者公共要求：不存储原文形态的句子镜像——细节保留模式也走 unit 结构，不退化为带索引的全文。

### 2.2 节点向量化

对每个入口节点 `{X}` 计算嵌入向量，按节点 ID 索引。

* 派生节点 `{MB}` 单独嵌入（不是 M 与 B 嵌入的拼接），语义在派生整体上；

* 谓词实例 `[P]` 不嵌入——语义由 family 基础成员承载，归一化后走 family 闭包匹配；

* `(X)` 不嵌入——不可查询节点不是检索入口。

### 2.3 关系持久化

unit 集 ground truth 是 unit 文本（《认知图：2》§4.1）；反向索引随入库自动更新。

向量层是反向索引的补充——不取代 `subject_mentions` 等符号索引，而是给"语义近似但字面不同"的 query 节点提供入口。

***

## §3 查询流水线

### 3.1 关键节点抽取

把 query 当作一段输入，走与入库同一套 LLM 抽取流程（《认知图：2》§2.1–2.3），产出 query 节点集 + 关键谓词。

目标不是完整 unit 图——只取能作为检索入口的节点（即 `{X}`，不含 `(X)`）。

### 3.2 向量比对

每个 query 节点对库内入口节点向量做 top-k 近邻 → 候选节点集。

* 阈值过滤——余弦相似度低于阈值的候选丢弃，避免拉入语义不相关的节点；

* 谓词作为方向偏置——query 中归并到 family 基础成员的谓词，用于后续遍历的方向选择（不在向量层硬过滤）。

### 3.3 图扩展（不调 LLM）

候选节点为种子，两种互补路径，按 query 类型选择或并用。明面关系直接消费，是 LLM 节流的主战场。

#### 3.3.1 定向遍历

适用：query 谓词明确（"X 的因果链"、"谁认为 Y"），沿特定关系走精确路径。

* 沿 `subject_mentions` 取以候选为主体的 unit；

* 沿 `context_mentions` 取以候选为论元 / 修饰行值的 unit；

* 沿 `属于` 闭包传递（上位类断言下沉到子类）；

* 沿 `同义` 合并 ≡ 索引下的等价节点；

* 沿 `被取代` 链取末端（跳过被取代的旧 unit）；

* 沿 `narrowed_by` 取派生节点（基础节点不继承派生节点的具体断言）。

#### 3.3.2 扩散查询

适用：query 意图模糊 / 需要广联想（综述类、对比类、"这个概念让你想到什么"），或定向遍历命中太少时作为补充。

从种子节点出发，沿全部关系按权重逐跳传播激活——模拟人脑联想记忆：cue 激活相关概念，相关概念再激活下一层，逐层衰减。

参数：

| 参数 | 含义 | 典型取值 |
| - | - | - |
| 初始能量 E₀ | 种子节点起始激活值，可按向量相似度加权 | 1.0 |
| 传导系数 τ(edge_type) | 边的"易联想度"——强关联边传更多能量 | `同义` ≈ 0.9 / `属于` ≈ 0.7 / `的` ≈ 0.5 / 内容 family ≈ 0.3 / `相关于` ≈ 0.2 |
| 衰减阈值 ε | 能量低于 ε 的节点不再向外传 | 0.05 |
| 最大跳数 K | 兜底，防发散 | 3–5 |

输出每个被激活节点的累积能量值，作为联想强度排名。能量值是排序权重，不代表事实可信度——事实由 unit 本身承载。

### 3.4 分层下钻（LLM 介入）

扩展到的 unit 集合交给 LLM，它做三件事：

| 子任务 | 行为 |
| - | - |
| 挑选相关 | 剔除虽连接但与 query 无关的 unit（如沿 `属于` 拉来的不相关上位事实，或扩散激活拉来的语义远点） |
| 判断够不够 | 已收集 unit 是否足以回答 query |
| 决定下一跳 | 不够则指明从哪些节点继续扩展，并指定走哪种扩展方式（定向不够 → 触发扩散；扩散噪声多 → 切回定向）；若判定 query 真正关心的不是初始命中节点，触发方向漂移 → 重新走 §3.1 |

下钻与扩散可来回多次：下钻指出新种子 → 回到 §3.3 → 拿新结果再下钻。

收敛条件——任一成立即停止迭代：

1. 信息覆盖度——query 节点全部被命中节点 / 扩展节点覆盖；关键谓词在某条 unit 上落地；
2. 边际收益消失——上一轮扩展带来的新 unit 中没有再回答 query 的内容。

兜底上限：最大下钻轮数 / 最大命中 unit 数。超过即停（防开放式 query 不收敛）。

### 3.5 总结返回

LLM 判"信息足够"后，基于命中 unit 集生成回答。回答的事实基础限定在命中 unit 集——不允许 LLM 用参数化知识补未在图里的事实，否则破坏图作为 ground truth 的地位。

***

## §4 LLM 节流

查询流水线的 LLM 调用集中在 §3.1（query → 关键节点）、§3.4（分层下钻）、§3.5（总结）。两条策略压缩调用量。

### 4.1 明面关系优先

能在符号图上直接遍历得到的事实，不让 LLM 复述：

| 任务 | 走明面关系 | 调 LLM 的场景 |
| - | - | - |
| 找以 X 为主体的所有事实 | `subject_mentions[X]` | / |
| 找 X 的派生节点 | `narrowed_by[X]` | / |
| 找因果链下游 | 谓词 ∈ 导致 family，沿 (因→果) 主体遍历 | / |
| 联想相关节点（模糊 / 综述 query） | 扩散查询（§3.3.2） | 联想结果中筛掉远端噪声 |
| 合并语义近似的 query 节点 | `同义` 闭包 + ≡ 索引 | 向量空间命中但库内无 `同义` 主 unit 时，LLM 判 ≡ / ↔ |
| 取最新事实 | 沿 `被取代` ⇒ 链取末端 | / |
| 跨多 unit 综合回答 | / | 综合本身需要 LLM |
| query 节点对应库内哪个具体节点 | 向量 top-k | 多个候选难选时升级到 LLM 二选 |

### 4.2 缓存与失效

三层都可缓存：

| 缓存项 | key | value |
| - | - | - |
| query 节点抽取 | query 文本（normalize 后） | 关键节点集 + 谓词 |
| 向量近邻 | query 节点 ID | top-k 候选 |
| 扩散结果 | (种子节点集, 参数集 τ/ε/K) | 激活节点列表 + 能量值 |
| 分层下钻决策 | (已命中 unit 集签名, 当前 query) | 下一跳种子 / 停止信号 |

失效集——每条缓存项必须挂"依赖的节点 / unit"清单。某节点入新 unit → 含该节点的缓存条目全部失效。不允许只写入不失效。

***

## §5 不变量

整个流水线必须同时满足：

1. 入库—查询节点表征同构——入库与查询走同一套 LLM 抽取规则（《认知图：2》§2），同一节点 ID 在两端指向同一向量、同一图位置。
2. 向量与扩散只决定排序，不决定事实——候选节点 / 联想节点由向量相似度和扩散能量给出，事实由 unit 给出。不允许把向量相似度或扩散能量当作事实可信度。
3. 回答的事实基础限定在命中 unit 集——LLM 总结时不可引入未在图里的事实；缺失就报告"图中无此信息"。
4. 明面关系优先于 LLM 推理——能在符号闭包内得到的关系不调 LLM；调 LLM 的位置仅限 §3.1 / §3.4 / §3.5。
5. 缓存与失效成对——每条缓存项必须有可识别的失效条件；不允许只写入不失效。
6. 不存储原文句子镜像——入库丢叙述外壳，留事实节点；细节保留模式也走修饰行 / 派生节点，不退化为带索引全文。

违反任一条 → 流水线退化为普通 RAG（全文检索 + LLM 重读），失去认知图带来的可推理性。

***

## §6 Trade-off

| 取舍 | 内容 |
| - | - |
| 入库代价高于纯 RAG，查询代价高于纯图遍历 | 入库多一道向量化，查询多两道 LLM（query 抽节点 + 分层下钻）。代价换两个收益：向量层让 query 不必字面匹配；分层下钻让大段事实合成做对 |
| 向量层引入语义漂移风险 | 余弦近邻可能拉入"看起来相关但不是同一概念"的节点（如"想象增强智能体"与"想象力"在向量空间近邻，但前者是具体架构、后者是通用能力）。靠 §3.4 LLM 挑选步骤兜底——这步删错节点比保留无关节点风险低 |
| 扩散查询参数难调 | 传导系数 τ 决定哪些关系"易联想"：调高拉来噪声，调低等同纯定向遍历。需要按文档域校准（学术语料 `属于` / `导致` 传得更远；生活语料 `相关于` 权重应升）。联想性 query 下扩散可能激活近半张图，靠 K / ε / LLM 挑选三重兜底 |
| 缓存让查询走捷径，也让设计错误持久化 | 一次错判的"信息足够"被缓存后，重复 query 都拿到同样错的回答。失效条件设计是缓存层的核心难点 |
| 分层下钻终止靠 LLM 主观判断 | 没有形式化的收敛条件。两条启发（覆盖度 + 边际收益）可缓解但消不掉。极端 query（开放式综述、对比类问题）下 LLM 可能反复扩展不收敛——靠最大跳数 / 最大命中数兜底 |
| 明面关系覆盖度依赖入库质量 | 若入库时谓词没归到 family 基础成员、派生节点没正确声明，查询期的 `同义` / `属于` 闭包遍历就走不通，被迫退化到 LLM 判 ≡ / ↔。入库代价转嫁查询代价 |