# SVO语义检索的系统化方案

# SVO 语义检索的系统化方案

> 本方案描述的是**检索架构**。SVO 算子定义、原子分类、拓扑模型、可读性建议等基础规范见 `SVO语义矢量算子手册.md`；大脑记忆四大机制的生物学原型见 `大脑记忆的核心机制.md`。本文不重复上述内容，只在关键处回指。
>
> **立场**：入库拆解、门控字段、边权分化、基础激活等全部是**工程需要**。表达层的算式只需满足手册的硬性约束（§1.1），工程层单向从合法算式中抽取所需字段。**任何为让检索工作而反向约束表达的规则，都不应出现在手册或指令文档中**。

---

## 零、方案概要

**一句话**：检索 = **概念向量入口** + **类型化图扩散** + **门控与基础激活调节** + **能量阈值输出**。

**四步对应大脑扩散激活**（`大脑记忆的核心机制.md` §四）：

| 生物机制 | 工程实现 |
| --- | --- |
| 入口激活（线索点亮节点） | 查询 → SVO 解析出概念簇 → 向量索引 top-K → 初始能量 |
| 沿边扩散（能量按边权流动） | 类型化有向图上并行 BFS，边权按 `:` / `>` / 连词类分化 |
| 激活汇聚叠加（多线索交汇） | 多源能量在公共邻居上求和；门控冲突乘惩罚；扇出归一化 |
| 阈值触发（累积高的浮现） | `threshold` 过滤 + `conclu / info / output` 三层输出 |

**为什么是扩散模型**（这是整份方案的设计根基）：

* **语义连续**交给向量（入口层）——分布式表征让"相似即相近"，对应脑的多通道编码。
* **结构离散**交给图（扩散层）——SVO 算子明确告诉工程层哪里是命题、哪里是修饰、哪里是逻辑连接，对应脑的海马体索引。
* **冲突信号用能量衰减而非硬过滤**——极性/量词/模态/连词的不匹配只是"乘以一个 < 1 的系数"，对应脑的神经调质调节。多入口交汇时，噪声互相抵消，信号互相增强；这是模糊检索的本质，不是 bug。

**SVO 二元本体（`SVO语义矢量算子手册.md` §1.2）在图上的同构**：

* **属性本体 `:`** → 概念簇内部结构 + 修饰边（scope → proposition）
* **力本体 `>`** → 动作命题（S→V→O）+ 逻辑命题（前件→连词→后件）+ 言说引用

属性和力在本体上是两类基本实体，在图上就是两类基本结构——**向量空间主要承载属性**（静态标签），**图结构主要承载力**（动态流向）。

---

## 一、相关性分层

检索相关性分六层，由图中不同机制承担。"每层一个专用索引"被扩散架构收敛为"一张图 + 一个向量索引 + 类型化边"：

| 层级 | 含义 | 承担机制 |
| --- | --- | --- |
| L1 概念相关 | 词项语义相似（"汽车"→"SUV"） | 概念向量索引（唯一入口） |
| L2 命题相关 | 主谓宾整体对齐 | 入口概念经**槽位边** 1 跳激活动作命题 |
| L3 作用域相关 | 话题/身份/范围/句子级副词匹配 | scope/sentence_mod 概念经**修饰边**激活命题 |
| L4 推导相关 | 条件/让步/因果链前后件匹配 | 扩散至逻辑命题 + 沿**逻辑前件边/后件边**双向展开 |
| L5 蕴含相关 | 否定/量词/模态区分 | 节点**门控属性**能量衰减（软约束） |
| L6 结构类比 | 骨架相同实体不同 | 扩散的自然副产物（同构命题图距近） |

**奥卡姆式收敛**：L2–L6 全部交给**同一张图的类型化扩散**；只有 L1 保留独立的向量索引。相比"倒排索引 + 结构哈希 + 前后件向量 + …"的多索引方案，扩散模型用"图拓扑本身承载结构语义"替代了多数专用索引。

---

## 二、入库：从 SVO 表达式到类型化图谱

### 2.1 三类原子节点（长期记忆的分布式单元）

SVO 表达式**不作为整体被索引**。解析后分解为三类节点，对应大脑皮层的三种模式：

| 节点 | SVO 形式 | 皮层类比 |
| --- | --- | --- |
| **概念簇**（concept） | `红:苹果`、`(前:负责人):Karpathy`、`(AI:方面)`、`显然` | 分布式表征的最小单元（类 V1–IT 的层次特征） |
| **动作命题**（action_proposition） | `S > V > O`（含空补语/引用宾语） | 一条"事件索引"——主谓宾是海马体打包的最小共激活单元 |
| **逻辑命题**（logical_proposition） | `前件 > 连词 > 后件` | 两条事件索引之间的"关系索引" |

**概念簇的 role**（按手册 §1.2.1 的属性本体分类，入库自动判别）：

* `entity`：专有名词、人物、机构、产品
* `concept`：普通概念、抽象名词、偏正复合词
* `scope`：话题/身份/背景/范围（典型形式 `(AI:方面)`、`(前:负责人)`）
* `sentence_mod`：句子级副词与情态标记（`显然`、`不幸:的是`、`祈使`、`疑问`）

role 用于**按角色分流召回**（§4.3），不改变图结构。

**致使/条件/让步结构**的嵌入命题（手册 §1.1-4）被显式封装为独立命题节点，`>` 连接词变为逻辑命题的 `connector`。例如：

```
论文 > 促使 > (Tishby > 认识到 > (理论 > (可能:涵盖) > (广泛:过程)))
```

入库为：

```
P1 = Tishby > 认识到 > P2             (action; object_ref=P2)
P2 = 理论 > (可能:涵盖) > (广泛:过程)   (action)
L1 = 论文 > 促使 > P1                 (logical; connector_class=致使; antecedent="论文", consequent=P1)
```

### 2.2 三类引用关系边（海马体索引的具象化）

原子之间通过 **PropRef 引用关系**相连，对应图中三类有权有向边：

| ref_type | 典型 SVO 形式 | 图中边类型 | 默认基础权重 |
| --- | --- | --- | --- |
| `slot` | `S > V > O` 的 S、O 槽位 | **槽位边** concept ⇄ action | 0.8 |
| `utterance` | `K > 表示 > (P)`、认知指向类 | **言说引用边** action → action | 0.5 |
| `modifier` | `显然 : (P)`、`(AI:方面) : (P)` | **修饰边** scope/sent_mod → proposition | 0.6 |
| `logical` | `(P1) > 则 > (P2)` | **逻辑前件边** / **逻辑后件边** | 按连词类分化（§3.2） |

**边的方向 = 能量流动方向**（与 `>` 本体定义一致）：条件 → 结论、原因 → 结果、前件 → 后件、说话者 → 言说内容。

### 2.3 节点门控属性（软过滤调节器 = 神经调质）

门控对应神经调质（多巴胺/去甲肾上腺素/乙酰胆碱）——**不改变拓扑，只调节能量传递**。

| 字段 | 取值 | 作用层 |
| --- | --- | --- |
| `polarity` | +1 / −1 | L5 否定 |
| `quantifier` | 所有 / 某 / 没有 / NULL | L5 量词 |
| `modality` | 必须 / 可能 / NULL | L5 模态 |
| `voice` | active / passive / NULL | L2 语态一致性 |
| `connector_class` | 条件 / 让步 / 因果 / 推论 / 目的 / 致使 / 认知 / 比较 / 言说（仅逻辑命题） | L4 连词类型 |

**门控冲突惩罚**：扩散时若源节点与目标节点的门控字段**均非 NULL 且不相等**，该条边传递的能量乘 `gate_penalty`（默认 0.1）。NULL 视为"未指定"，不触发惩罚。

**voice 字段的关键作用**：把"被"从概念簇的修饰中抽离。`A > 发布 > B`（active）与 `B > 被:发布`（passive）应识别为同一事件的两种语态，入库管线自动抽取 `被` → `voice=passive`，而不是让"被"成为概念簇的一部分污染嵌入空间。

### 2.4 边权重：按类型与连词类分化

连词权重**按类别**而非按具体词（条件类涵盖"则/否则/除非/当/只有"，作者写哪个都归同一类）：

| 连词类 | 默认权重 | 代表词 |
| --- | --- | --- |
| 因果类 | 0.80 | 导致、使得、造成、引起、以致 |
| 致使类 | 0.75 | 促使、迫使、让、令、使、催生 |
| 条件类 | 0.70 | 则、否则、除非、当、只有 |
| 推论类 | 0.70 | 因此、所以、从而、故而、进而 |
| 认知指向 | 0.60 | 表示、认为、知道、察觉、发现 |
| 言说引导 | 0.60 | 说、告知、声明、问、答 |
| 比较类 | 0.60 | 比、胜过、不如、堪比、逊于 |
| 目的类 | 0.50 | 以便、为了、旨在、力求 |
| **让步类** | **0.30** | 尽管、虽然、即使、纵然（反预期，能量传递弱） |

**归类由入库管线完成**：作者按原句写任意连接词，管线查表归入九类之一。新词加入对应类别，**不修改表达层规则**。

### 2.5 基础激活 B_i（ACT-R，使用频率与近因）

借鉴 ACT-R 的 Base-Level Activation（`大脑记忆的核心机制.md` §5.2），每个节点维护：

$$
B_i = \ln\!\left(\sum_{k=1}^{n} t_k^{-d}\right)
$$

其中 `t_k` 是节点第 k 次被命中时距今的秒数，`d` 默认 0.5。

* 频繁被命中的节点 → B_i 高 → 同样线索下更易被激活
* 久未命中 → t_k 大 → B_i 衰减 → "想不起来"

**最终节点能量**（混合扩散能量 a_i 与基础激活 B_i）：

```
E_i = a_i + α · softplus(B_i)        α = 0.1（默认）
```

α 不宜过大，否则热门节点永远被召回（priming 失控）。仅 `conclu` 排序用 E_i，扩散过程本身仍用 a_i，避免基础激活层层累乘。

### 2.6 源表达式索引（海马体快照）

每个原子节点都挂一个 `source_expr_id`，回指**完整的 SVO 算式 + 自然语言原句 + 文档位置**。这层对应海马体保留的"共激活指针"——多次命中时，大脑通过索引同步回放所有相关皮层。工程上用它做：

* `conclu` 聚合：一条源表达式的总能量 = 其内部激活原子的能量之和
* 可解释性：每一个返回单元都能指回原句与文档行号
* 重巩固（§6）：命中的源表达式整体 B 加一次

---

## 三、概念向量索引（唯一独立索引 = 分布式表征）

扩散起点。查询解析得到的每个概念簇，在此索引上取 top-K 作为图入口。

### 3.1 编码策略：两阶段

**阶段一（零训练，立即可用）**：加性组合

```
v(concept) = v(核心词) + Σ α^depth · v(修饰词_i)
α = 0.8
```

深度按 SVO 绑定的嵌套层级定义：最外层核心词 depth=0，每多一层 `:` 深度 +1。

**阶段二（微调，精度提升）**：BGE-base / Qwen3-Embedding 主干 + 按 role 训练 4 个 LoRA 适配器（entity/concept/scope/sentence_mod），不强行统一编码空间。

**训练对比对**（阶段二）：

* 同指正例：`K氏` / `Karpathy`
* 属性敏感正例：`(资深:工程师):李`、`(高级:工程师):李`
* 混淆负例：同修饰不同核心词（`红:苹果` vs `红:汽车`）
* 属性翻转负例：`(前:CEO)` vs `(现任:CEO)`
* role 混淆负例：`(AI:方面)` scope vs `AI` entity

### 3.2 按 role 分流召回

在一个大向量库中用 `role` metadata 过滤子集召回：

* 查询的实体词 → entity + concept 子库
* 查询的场景词 → scope 子库
* 查询的情态词 → sentence_mod 子库

避免 `(AI:方面)` 作为 scope 被当成 `AI` 实体召回（它们表达不同的本体角色）。

### 3.3 属性 / 力双子空间（可选，阶段二上线）

手册 §1.2 的二元本体建议**显式投影**到两个子空间（同一主干 + 两个投影头）：

* **属性子空间**：编码概念簇、scope、sentence_mod —— **在线扩散仅用此子空间**，因为入口是概念簇
* **力子空间**：编码动作命题、逻辑命题 —— 离线诊断、类比挖掘、未来端到端重排

两个子空间独立归一化，避免属性向量被力向量拉偏。

---

## 四、扩散激活检索流程

### 4.1 完整流程（与大脑四步严格对应）

```
查询（自然语言或 SVO 算式）
  │
  ① 入口激活 ─ SVO 解析 → 概念簇集合
  │   ├─ 解析成功：每个概念簇在向量索引取 top-K，初始 a_i = 余弦相似度
  │   └─ 解析失败：整句向量化作单入口，降级模式（保证服务可用）
  │
  ② 沿边扩散 ─ 并行 BFS，最多 max_hops 跳
  │   ├─ 每一跳按边权衰减
  │   ├─ 节点门控软过滤（冲突 × gate_penalty）
  │   ├─ 扇出归一化（fan effect 防 hub 吞能）
  │   └─ 全局距离衰减 global_decay
  │
  ③ 激活汇聚叠加 ─ 多源能量在公共邻居上求和
  │   └─ 噪声互相抵消、信号互相增强 = 模糊检索
  │
  ④ 阈值触发 ─ E_i = a_i + α·softplus(B_i) ≥ threshold
      ├─ conclu：按 source_expr 聚合能量，top-M 返回
      ├─ info：top-N 原子，带能量与命中路径
      └─ output：沿逻辑链前后展开至 logic_chain_max_depth
```

### 4.2 能量传播公式

每一跳：

```
a_j(t+1) = Σ_i [ a_i(t) · w_type(i→j) · gate(i,j) · fan_norm(i) ] · global_decay
```

其中：

* `w_type(i→j)`：边类型基础权重，逻辑边用连词类分化权重（§2.4）
* `gate(i,j) = 1.0` 若所有非 NULL 门控字段一致；冲突则 `gate_penalty`（默认 0.1）
* `fan_norm(i) = 1/√fan_out(i)` 当 `fan_out(i) > fan_trigger`，否则 1.0
* `global_decay = 0.7`

**可行性自检**（这些常数必须满足能量能跨 2 跳存活）：

```
初始能量 ≈ 0.9（cosine）
1 跳后 ≈ 0.9 × 0.8 × 1.0 × 0.7 ≈ 0.50   > threshold=0.05  ✓
2 跳后 ≈ 0.50 × 0.7 × 1.0 × 0.7 ≈ 0.25   > threshold       ✓
门控冲突 1 跳 ≈ 0.9 × 0.8 × 0.1 × 0.7 ≈ 0.05   勉强达阈   ✓（正符合"冲突项压到阈值附近"的设计）
让步类 1 跳 ≈ 0.9 × 0.3 × 1.0 × 0.7 ≈ 0.19     低但存活  ✓
```

**最终排序能量**（§2.5）：`E_i = a_i + 0.1 · softplus(B_i)`。

### 4.3 扇出归一化（fan effect）

ACT-R 的扇出效应：高出度节点（"AI"、"机器学习"、"深度学习"）的能量均摊到所有出边。

`fan_norm(i) = 1/√fan_out(i)` 仅当 `fan_out(i) > fan_trigger=20` 触发。低出度节点不惩罚，避免过早衰减冷门节点。

**监控指标**：top-20 最高出度节点在 `conclu` 占总能量比例应 < 30%，否则提高归一化强度或降低 `fan_trigger`。

### 4.4 门控冲突的精细化（阶段二）

默认所有冲突乘同一个 `gate_penalty=0.1`。阶段二按冲突类型分化：

| 冲突类型 | 默认惩罚 | 理由 |
| --- | --- | --- |
| polarity 翻转（肯定 vs 否定） | 0.05 | 最强信号，近乎反义 |
| quantifier 不一致（所有 vs 某 vs 没有） | 0.20 | 弱于极性但确实改变真值 |
| modality 不一致（必须 vs 可能） | 0.40 | 最弱，常表示近似信息 |
| voice 不一致（active vs passive） | 1.00 | 不扣分——同一事件的两种语态 |
| connector_class 不一致 | 0.25 | 已由边权分化承担一部分 |

### 4.5 默认参数（写入 `config.yaml`）

```yaml
activation:
  entry_top_k: 5              # 每入口概念召回候选数
  max_hops: 2                 # 最大扩散跳数
  global_decay: 0.7           # 每跳全局距离衰减
  threshold: 0.05             # 节点最低保留能量
  gate_penalty: 0.10          # 默认冲突惩罚（阶段一）
  fan_trigger: 20             # 出度超此值启用 fan 归一化
  fan_normalizer: sqrt        # sqrt / linear / none
  base_activation_alpha: 0.10 # 基础激活混合系数
  max_visited_nodes: 10000    # 防退化上限

edge_weight:
  slot: 0.80
  utterance: 0.50
  modifier: 0.60
  logical:
    因果: 0.80
    致使: 0.75
    条件: 0.70
    推论: 0.70
    认知: 0.60
    言说: 0.60
    比较: 0.60
    目的: 0.50
    让步: 0.30

output:
  conclu_top_m: 10            # 结论层表达式数
  info_top_n: 30              # 证据层原子数
  logic_chain_max_depth: 4    # 逻辑链展开深度
```

### 4.6 三层输出契约（向下兼容现有 `BuildContextFragments`）

```python
def SpreadingActivationSearch(query: str) -> tuple[str, str, str]:
    """返回 (conclu, info, output)"""
```

* **conclu（结论层）**：top-M 源表达式（SVO canonical + 自然语言回译），按聚合能量排序。聚合能量 = 该源表达式内部被激活原子的能量之和，带长度惩罚，去重。**LLM 的主要生成依据**。
* **info（证据层）**：top-N 激活原子，每条带 `(atom, energy, entry_sources, hop_path)`。用于调试、人工排错、LLM 定位命中点。
* **output（推导层）**：扫描激活到的逻辑命题，沿逻辑前件/后件边前后向各展开至 `logic_chain_max_depth` 跳——**即使链上节点未达阈值也补齐**，保证 LLM 看到完整因果/条件链。对应大脑扩散激活触发后整段情境快照被完整回放。

### 4.7 典型扩散场景

| 查询 | 扩散行为 | 结果 |
| --- | --- | --- |
| `(模型>开源) > 则 > (?)` | 入口激活 `模型`、`开源` → 槽位边到命题 `模型>开源` → 逻辑前件边 | `connector_class=条件` 的后件能量最高 |
| `所有:学生 > 通过 > 考试` | 候选 `某:学生 > 通过 > 考试` 因 quantifier 冲突能量 × 0.2 | 量词匹配命题排前 |
| `现有:框架 > 适用` | 候选 `现有:框架 > 不:适用` 因 polarity 冲突 × 0.05 | 反义命题降至阈值以下 |
| `(AI:方面) : (K > 偏向 > X)` | scope 入口经修饰边激活命题；其他域命题拿不到此路径能量 | 域外相关命题降权 |
| `A 促使 B 认识到 C` 类比 | 结构同构命题在图中拓扑接近，扩散自然汇聚 | L6 类比无需专门结构哈希 |
| `谁说 AGI 还要十年` | `AGI`、`十年之遥` 入口 → 动作命题 → utterance 反向边 | 言说者节点浮现 |

---

## 五、数据模型

```sql
-- 概念簇（唯一向量索引）
CREATE TABLE concept (
  id BIGSERIAL PRIMARY KEY,
  canonical TEXT NOT NULL,                   -- (前:负责人):Karpathy
  core_word TEXT NOT NULL,                   -- Karpathy
  modifiers TEXT[] NOT NULL,                 -- [前, 负责人]
  role VARCHAR(16) NOT NULL,                 -- entity|concept|scope|sentence_mod
  vector VECTOR(768),
  base_activation FLOAT NOT NULL DEFAULT 0,  -- B_i
  last_hits_ts TIMESTAMPTZ[]                 -- 最近 N 次命中时戳（环形缓冲，计算 B_i 用）
);
CREATE INDEX idx_concept_role ON concept(role);

-- 动作命题（图节点）
CREATE TABLE action_proposition (
  id BIGSERIAL PRIMARY KEY,
  subject_id BIGINT REFERENCES concept(id),
  verb TEXT NOT NULL,
  object_id BIGINT REFERENCES concept(id),   -- NULL 时宾语是 PropRef
  object_ref BIGINT,                         -- PropRef 指向另一命题
  polarity SMALLINT NOT NULL DEFAULT 1,      -- 门控
  modality VARCHAR(16),                      -- 门控
  quantifier VARCHAR(16),                    -- 门控
  voice VARCHAR(8) DEFAULT 'active',         -- 门控：active/passive
  base_activation FLOAT NOT NULL DEFAULT 0,
  last_hits_ts TIMESTAMPTZ[],
  source_expr_id BIGINT NOT NULL
);

-- 逻辑命题（图节点）
CREATE TABLE logical_proposition (
  id BIGSERIAL PRIMARY KEY,
  antecedent_id BIGINT NOT NULL REFERENCES action_proposition(id),
  connector_raw TEXT NOT NULL,               -- 原句连接词（则/尽管/由于/从而迫使/...）
  connector_class VARCHAR(16) NOT NULL,      -- 九类之一：条件/让步/因果/推论/目的/致使/认知/比较/言说
  consequent_id BIGINT NOT NULL REFERENCES action_proposition(id),
  base_activation FLOAT NOT NULL DEFAULT 0,
  last_hits_ts TIMESTAMPTZ[],
  source_expr_id BIGINT NOT NULL
);
CREATE INDEX idx_logical_class ON logical_proposition(connector_class);

-- 引用关系（图边表；双向索引即邻接结构）
CREATE TABLE prop_ref (
  id BIGSERIAL PRIMARY KEY,
  source_type VARCHAR(16) NOT NULL,          -- action|logical|concept
  source_id BIGINT NOT NULL,
  target_type VARCHAR(16) NOT NULL,          -- action|logical|concept
  target_id BIGINT NOT NULL,
  ref_type VARCHAR(16) NOT NULL,             -- slot|utterance|modifier|logical_ante|logical_cons
  weight_override FLOAT                      -- 阶段三学习权重，NULL 用类型默认
);
CREATE INDEX idx_ref_target ON prop_ref(target_type, target_id, ref_type);
CREATE INDEX idx_ref_source ON prop_ref(source_type, source_id, ref_type);

-- 源表达式（conclu 聚合回溯 = 海马体快照）
CREATE TABLE source_expression (
  id BIGSERIAL PRIMARY KEY,
  canonical TEXT NOT NULL,                   -- SVO canonical
  natural TEXT NOT NULL,                     -- 自然语言原句
  doc_id BIGINT,
  line_no INT,
  base_activation FLOAT NOT NULL DEFAULT 0,
  last_hits_ts TIMESTAMPTZ[]
);
```

**关键设计**：

* `concept` 向量独立存储在 Qdrant / Milvus，`concept.id` 与向量 metadata 互相映射。
* 内存图从 Postgres 的 `prop_ref` 双向索引加载为 `numpy / scipy` 稀疏邻接，百万节点 ≈ 500 MB。
* `base_activation` 与 `last_hits_ts` 是**可巩固字段**：命中时更新（§6）。
* `weight_override` 留给阶段三的端到端边权学习；阶段一、二为 NULL 不启用。

---

## 六、记忆巩固：离线重放与再巩固

这一节是本方案相对旧版的核心增量——把**大脑记忆"快照 → 回放 → 巩固"**（`大脑记忆的核心机制.md` §三、§5.4）显式搬入工程层。

### 6.1 海马体 ↔ 皮层：两层记忆组织

* **海马体层**（episodic，短期高塑性）：`source_expression` + 原子级 `base_activation`。每次入库/命中都快速修改。
* **皮层层**（semantic，长期稳定）：图结构（节点 + 边）+ 稳定化的边权 `weight_override`。只在离线巩固时修改。

类比 CLS（Complementary Learning Systems, `大脑记忆的核心机制.md` §5.4）：
短期系统承担单次事件的快速记录，长期系统从反复回放中提取统计规律。

### 6.2 在线命中即重巩固（reconsolidation）

**每次查询命中后**，对命中的源表达式与其内部原子执行：

```python
def on_hit(node, now):
    node.last_hits_ts.append(now)
    if len(node.last_hits_ts) > MAX_HITS_BUFFER:
        node.last_hits_ts.pop(0)
    node.base_activation = log_sum_power_decay(node.last_hits_ts, d=0.5)
```

效应：

* 频繁被查的节点 B 上升 → 下次更易被召回（priming）
* 久未命中的节点 B 自然衰减 → 不删除，只"想不起来"
* 每次命中都是一次学习，符合 `大脑记忆的核心机制.md` §3.2 的 reconsolidation

### 6.3 离线巩固任务（类慢波睡眠）

定时任务（每日/每周）执行：

1. **扫描高频共现边**：过去 N 天查询中，哪两个节点经常同时被高能量激活 → 记录为候选赫布强化对。
2. **赫布更新 `weight_override`**：
   ```
   Δw_ij = η · a_i · a_j · μ
   η = 0.01（学习率）
   μ ∈ [0.5, 2.0] 按情绪/显著性（见 §6.4）
   ```
3. **突触稳态归一化**：每个节点所有出边权重之和若超过 `homeostasis_cap`（默认 N × base_weight），整体等比缩放——防止某些节点所有出边无限增强。
4. **提取规律到皮层层**：如果 `A → B → C` 的路径在多次查询中都被高能量激活，可增加 `A → C` 的快捷边（学习到的规律性连接，阶段三才启用）。

**这对应脑的慢波睡眠回放**（`大脑记忆的核心机制.md` §3.3, §6.2）：
Experience replay（RL）、多 epoch 训练都是对应的工程机制。

### 6.4 情绪 / 显著性门控（可选）

不是所有命中都值得长期巩固。可引入 `salience` 信号作为神经调质 μ：

| 信号 | μ 乘数 | 说明 |
| --- | --- | --- |
| 用户显式反馈（点赞 / 采用） | 2.0 | 最强显著性 |
| LLM 生成时引用 | 1.5 | 下游任务确认有用 |
| 单次查询中能量异常高（> μ+2σ） | 1.2 | 明确命中 |
| 普通命中 | 1.0 | 基线 |
| 疑似噪声召回（能量极低） | 0.5 | 弱化，防止扩散噪声被固化 |

μ 对应多巴胺（预测奖赏）、去甲肾上腺素（惊讶）、乙酰胆碱（专注）的联合调节（`大脑记忆的核心机制.md` §2.3）。

---

## 七、核心挑战与对策

### 7.1 SVO 解析器稳定性（最大风险点）

扩散架构对解析器依赖**比旧架构更重**——解析结果直接决定入口概念集合。

**行动指引**：

1. **解析一致率基准**：500 句自然语言 × 10 个人工改写（同语义），统计结构指纹一致率。
2. **一致率门槛**：< 85% 不得投入生产。
3. **双轨降级**：解析成功 → 多入口；解析失败 → 整句向量化单入口（§4.1）。
4. **重点稳定"作用域 vs 条件"识别**：中文"在 X 的情况下"歧义最高，必须用上下文特征分类，不能靠正则。
5. **解析器版本化**：每次解析器升级重建全量 `concept` 向量与 `prop_ref`；灰度期保留两份索引。

### 7.2 编码器敏感度要求

向量层需区分：

* 角色翻转：`A > 杀 > B` vs `B > 杀 > A`（由命题节点区分，向量只需区分 `A`、`B`）
* 同义动作：`喜欢` vs `爱`（需向量区分；主要由人工对比对训练）
* 作用域翻转：`(战时)` vs `(和平)`（scope 子索引）

**注意**：极性翻转、连词翻转**主要由门控 + 边权分化承担**，向量辅助。不要试图让向量承担全部语义区分——那是旧架构的技术债。

### 7.3 参数校准（扩散架构特有）

* **`gate_penalty × global_decay` 需过 `threshold`**：0.1 × 0.7 × 1.0 = 0.07 勉强过 0.05。必须用标注集校准。
* **连词权重相对值**：条件 0.7 vs 让步 0.3 的比值直接决定反预期召回率。
* **扇出归一化触发点**：`fan_trigger=20` 为经验初值，需监控 Hub 能量占比。
* **基础激活混合系数 α**：α 过大 → 热门节点永远浮现（priming 失控）；α 过小 → 无 recency/frequency 效应。建议 [0.05, 0.2]。

**方法**：阶段一 100 条 `(query, expected)` 标注 + 脚本化 grid search；阶段二 500+ 对监督学习。

### 7.4 Hub 能量流失

中心节点（"AI"、"模型"、"深度学习"）因入度/出度极高，容易吞掉全图能量或把能量分散到无关节点。

**对策分层**：

1. **扇出归一化**（§4.3）：已在公式内置
2. **阶段二边权学习**：度越高的节点，出边基础权重按 `1/log(fan_out)` 再衰减
3. **阶段三 edge attention**：用 GNN 学习上下文相关的边权

---

## 八、工程落地路径

### 8.1 基础设施选型

| 组件 | 选型 | 理由 |
| --- | --- | --- |
| 概念向量索引 | Qdrant / Milvus / MindStore | 支持按 metadata（role）过滤 |
| 关系表 & 图边表 | Postgres | 外键一致，`prop_ref` 双向索引即邻接结构 |
| 内存图 | numpy / scipy sparse | 百万节点 ≈ 500 MB |
| 编码器 | BGE-base / Qwen3-Embedding + LoRA | 中文效果好、微调成本低；复用本仓库已有 checkpoint |
| 扩散算法 | 纯 Python 模块 | 无需新服务；热点可异步 C 扩展 |
| 离线巩固 | Airflow / 定时脚本 | 每日/每周跑 §6.3 |

**废弃基础设施**（相对旧四层索引）：

* Elasticsearch 倒排 → 槽位边扩散替代
* Redis 结构哈希 → 扩散自然实现 L6 类比
* pgvector 的前后件向量列 → 逻辑命题作为图节点，不再独立向量化

### 8.2 三阶段演进

**阶段一 MVP（2–4 周）**

* 跑通 SVO 解析 → 多入口 → 类型化边扩散 → 三层输出
* 概念编码用加性组合（零训练）
* 参数从 §4.5 初值起手调；100 条标注做 grid search 校准 `threshold` / `gate_penalty`
* 基础激活 B 字段保留但不在排序生效（α = 0）
* **目标**：验证扩散能量排序能替代旧架构的学习排序

**阶段二 精度提升（1–2 月）**

* 编码器微调：概念按 role 训练 4 个 LoRA
* 扇出归一化从 `sqrt` 改为按边类型 + 节点度数的联合学习权重
* 连词权重从手调改为小规模监督学习（500+ 对）
* 门控系数按冲突类型细化（§4.4）
* 基础激活上线：α = 0.1，MAX_HITS_BUFFER = 50
* 开启 reconsolidation（§6.2）
* **目标**：L3/L4 召回率显著提升，Hub 能量占比 < 30%

**阶段三 持续优化**

* 离线巩固任务上线（§6.3），启用 `weight_override` 与学习到的快捷边
* 全图 edge attention（类 GNN），端到端学习边权
* 属性 / 力双子空间投影上线（在线仍只用属性子空间）
* 显著性门控（§6.4）：用户反馈回流强化信号
* 多模态入口：图片 / 音频作为入口激活源
* 激活缓存：高频查询启动效应（priming）

### 8.3 评估指标

**SVO 固有指标**：
角色准确率 / 极性准确率 / 量词一致率 / 作用域覆盖率 / 嵌套深度保持率 / 连词一致率 / 逻辑链完整率。

**扩散架构新增指标**：

| 指标 | 定义 | 目标 |
| --- | --- | --- |
| 扩散覆盖率 | 目标命题在 2 跳内被激活到的比例 | > 90% |
| 能量信噪比 | top-K 结果能量均值 / 第 K+1 位能量 | > 2.0 |
| Hub 能量占比 | top-20 最高出度节点能量 / 总能量 | < 30% |
| 门控过滤准确率 | 冲突门控命题被压至阈值以下的比例 | > 85% |
| 基础激活效应 | priming 命中在同一会话内耗时下降比例 | 阶段二 > 20% |
| 巩固稳定性 | 离线巩固前后 top-10 变化率 | < 15%（避免震荡） |

---

## 九、操作快查表

| 检索需求 | 扩散实现 |
| --- | --- |
| 含特定实体的表达式 | 实体词为入口概念激活 |
| 含特定话题 / 场景 | scope 概念为入口 + 修饰边 1 跳 |
| 含句子级态度词（"显然"） | sentence_mod 概念为入口 |
| 角色精确匹配动作命题 | 入口 + 槽位边 1 跳 |
| 结构类比动作命题 | 多入口扩散自然实现 |
| 语义模糊相似动作命题 | 入口 top-K + 扩散 2 跳 |
| "如果 X 则…"推导 | X 入口 → 激活逻辑命题 → 后件边，`connector_class=条件` 权重最高 |
| "…导致 X"推导 | X 入口反向沿前件边，`connector_class=因果` 权重最高 |
| 特定连词推导链 | 连词类别权重直接分化，无需额外过滤 |
| 避免召回反义命题 | polarity 门控 × 0.05 衰减 |
| 避免召回不同连词 | 条件 0.7 vs 让步 0.3 的权重差异自动压制 |
| 追溯"谁说了这句话" | 沿 utterance 反向边扩散 |
| 展开"他说了什么" | 沿 utterance 正向边扩散 |
| 追溯推导前提 | 沿逻辑前件边反向 / output 层逻辑链补齐 |
| 展开推导后果 | 沿逻辑后件边正向扩散 |
| 热门词不要永远浮现 | 扇出归一化 + α 限制基础激活影响 |
| 频繁被查的信息优先 | 基础激活 B_i 上升 + α·softplus(B) 参与排序 |
| 区分同事件的主动/被动语态 | voice 门控不扣分，聚合在同一命题 |

---

## 十、参考

* SVO 算子规范与原子定义：`Agent/svo/SVO语义矢量算子手册.md`
* 生物学原型与设计灵感：`Agent/svo/大脑记忆的核心机制.md`
* SVO 表达层输入规范：`Agent/svo/SVO表达指令.md`
* 现有检索接口（待对接）：`Auto/gen_qdrant_dataset.py` 中的 `BuildContextFragments`