认知图:入库与查询流水线

把认知图作为长期可推理的知识层,对接 LLM 完成入库与查询。两端结构对称——入库把自然语言压成节点 + 关系,查询把 query 压成关键节点集再回到节点 + 关系。


一、核心思路

四条贯穿入库与查询的特性:

对称性 —— 入库把输入 → unit 节点集 + 关系;查询把 query → 关键节点集 → 在图里展开。两端走同一套 LLM 抽取规则,向量化基于同一组节点,不在两侧各自再造一种表示。

多层检索 —— 三层互补:向量做模糊入口(query 节点 → 库内候选节点);定向遍历做精确扩展(沿明确关系收集相关 unit);扩散查询做联想广度(沿全部关系按权重传播激活,模拟人脑联想记忆)。向量给入口,图给结构,扩散给广度。

LLM 节流 —— 明面关系(图上可直接遍历的边、family 闭包、同义 / 属于 / )能解的不调 LLM;只有需要在多个候选间权衡、合成回答时才介入。重复决策走缓存。

迭代终止 —— 查询是迭代过程:图扩展(定向 + 扩散)→ LLM 下钻判够 → 不够则触发新一轮扩展。下钻与扩散可来回多次。LLM 每一层判"够不够",够了就总结返回。


二、入库流水线

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

1. LLM 抽取

文本到认知图 §三 把原文压成 unit 集 + 入口节点 + 关系。允许两种激进度,按文体选:

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

2. 节点向量化

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

3. 关系持久化

unit 集 ground truth 是 unit 文本(认知图 §五);反向索引(subject_mentions / context_mentions / narrowed_by)随入库自动更新。

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


三、查询流水线

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

1. 关键节点抽取

把 query 当成一段输入,走与入库同一套 LLM 抽取流程(文本到认知图 §三 步骤 1–3),产出 query 节点集 + 关键谓词。

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

2. 向量比对

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

3. 图扩展(不调 LLM)

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

3.1 定向遍历

适用于 query 谓词明确("X 的因果链"、"谁认为 Y"),沿特定关系走精确路径:

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 本身承载。

4. 分层下钻(LLM 介入)

扩展到的 unit 集合给 LLM,它做三件事:

下钻与扩散可来回多次:下钻指出新种子 → 回到 §三.3(定向或扩散)→ 拿新结果再下钻。

两条收敛条件,任一成立即停止迭代:

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

兜底上限:最大下钻轮数 / 最大命中 unit 数。超过即停(防止开放式 query 不收敛)。

5. 总结返回

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


四、LLM 节流

查询流水线的 LLM 调用集中在 §三.1(query → 关键节点)、§三.4(分层下钻)、§三.5(总结)。两条策略压缩调用量:

1. 走明面关系

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

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

2. 缓存

三层都可缓存,按缓存键复用:

缓存的代价是新事实入库 → 已缓存的"信息足够"判断可能过时。入库时按节点维护失效集——某节点入新 unit → 含该节点的缓存条目失效。


五、不变量

整个流水线必须满足:

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

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


六、trade-off


Revision #1
Created 2026-05-13 14:31:09 UTC by Colin
Updated 2026-05-13 14:31:09 UTC by Colin