Files
HomeAgent/docs/zh/recall-as-association.md
JianFeeeee cf14b840ef docs: 补齐文档状态分类 + 校正两轮代码改动后的失真
## 背景

上一次文档校订(b9b5ac0)之后又有两次代码提交(5194a96 / 8293282),
把 future-plan §1.1 整节变成了错的 —— 它还写着「档位没有生效点」
和「在 prepareInputTask 里加一次 activateSecurityProfile 调用」,
而后者正是被后来的收敛**否定掉的方案**。

## 新增 docs/zh/README.md(文档索引)

32 篇文档此前混着三种时态(当时实测 / 历史推演 / 设计规划),外观相同。
索引给出**状态分类与可信度规则**:

| 状态 | 能不能当事实用 |
|---|---|
| 已实现并部署 | ✅ 直接信 |
| 部分实现 | ⚠️ 只信标了"生效"的部分 |
| 设计 / 未实现 | ❌ 只能当设计意图 |
| 归档说明 | ❌ 不要改、也不要信 |

并写死**判据名可信度规则**:文档里的 `TestXxx` 不保证还存在。
给了核对命令,以及当前基线(27 条缺失的分布 —— 18 条属"设计未实现"类
文档的规划名、7 条是 §2.7.3 有意保留的历史对照表左栏、2 条属视频能力
未纳入契约)。判定标准:**在"已实现"类文档正文里找不到才是缺陷**。

## 重写 future-plan §1.1(已结案)

原节写的是错的方案。改成记录**真正的缺陷分三层**:

```
第 3 层(表面):activateSecurityProfile 零调用方
第 2 层:agent/core 在替 security 做策略决策
         (自己抠 security_profile / 自己选判定链 /
           自己写 Kind:"resident" 声明主体类别 —— 提权口子)
第 1 层(根因):security 缺少「输入接入点」
```

并补上「每 agent 一个实例」的最终形态(共享注册表 + per-agent 执行视图,
sessionProfile / longtimeProfile 两层,优先级 session > longtime 本身是安全语义)。

§〇「机制 ≠ 接线」表格里档位那一条从 🔴 改为 ✅。

## 各文档状态行

此前 14 篇缺状态行(runbook / 实测报告 / 计划类)。逐篇补上**符合实际内容**
的声明,而不是统一套一句。特别地:

- `commondev-design.md` 标题本就写「设计 · 未实现」→ 归到"设计"类
- `live-run-evidence-2026-10-04.md` → 明确标注"历史证据快照,不要用它的
  结论覆盖现在的实现判断"
- `legacy-issues.md` → 写明它与 future-plan 的分工(前者收已知问题,
  后者收能力缺失与零调用方)

## 正文里两处判据名漂移

- `TestBootCtxCloseAllIsReverseOrder` → 实际是
  `TestKernelStateCloseAllIsReverseOrder`(`BootCtx` 改名时判据跟着改的)
- `TestNilTypedBusSafety` → 标注为"规划名,仓库中不存在"

## 新增 §2.7.5 模块产物的实例化粒度

依赖图保证"设施已就绪",但没说该有几个实例 —— 这是独立决策。
记下 security 的两个答案:全局基线共享(否则插件声明对部分 agent 不生效)、
轮次状态 per-agent。并给出给未来新模块的两条判断标准。

## 安全文档

状态头补「架构形态」段(防火墙定位、per-agent 视图、两层档位);
接线状态表里 `ActivateProfile` 从 🔴 改为 ✅(2026-10-31 接通)。

## README

文档列表加索引与 future-plan 入口 —— 此前从 README 找不到 docs/zh 的任何指引。

## 核对

- docs/zh 32 篇全部有状态行
- 索引里列的文档全部存在,无遗漏
- 分类与各文档自述一致(逐篇抽查)
- go build 仍通过(纯文档改动)
2026-10-31 07:50:58 +08:00

81 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 召回即联想
> **状态:参考 / 机制说明。** 描述召回作为关联的模型,非待办清单。
> 未实现项见 [`future-plan.md`](./future-plan.md)。
> **「召回是针对节点的,然后召回的是节点与 n 层 bfs 结果」**
> —— 这个机制就是在模仿人类的联想能力。
## 为什么这个类比比技术描述准确
技术上说"命中节点 + N 层 BFS"只是描述了**做法**;
而"联想"说清了**为什么必须这样做**:
```
人听到「值班室分机号是多少」时真的发生的事:
① 想起 "值班室分机号" ← 命中节点
② 想起 "4324" ← 沿边一步
③ 想起 "旧号 4379 停用了" ← 沿边两步(4324 --停用于--> 4379)
④ 想起 "老周值班" ← 沿边一步(反向可达)
★ 人不会只答 ② —— ② 单独说出来没有意义(「4324」是什么?)
联想里 ③④ 是**自动附带**的,不是被问到的。
```
而"只召回主语块"(我上一条列为选项 1)恰恰是**切断联想**:
宾语块 `4324` 孤立召回时不知道自己来自哪里,于是要么丢它、
要么给它加"来源标注"这种特判——**都是在模拟"人不会联想"**。
## 三条由此推出的设计约束
### ① 召回对象是节点,不是"事实"
节点是记忆的载体。一条事实(`值班室分机号 --是--> 4324`)是
**两个节点 + 一条边**,不是三个字符串。
⇒ 任何把事实当原子值处理的实现(把 `<主语>|<关系>=<宾语>` 存成
一个块的属性图形态)都丢掉了"边可以独立演进"这件事。
### ② 不做"来源标注"这类特判
联想不需要标注"这个值从哪来"——它天然在图里。
要标注,说明图结构没建对。
⇒ 判据 `TestBFS_节点加N层邻居` 直接检查"孤立命中的宾语块能否
通过 BFS 找回主语",而不是检查标注字段是否为空。
### ③ 层数(N)是**上下文预算**,不是图算法参数
人回忆时不会无限联想——想起第三个无关的东西就停了。
所以 N 应该由**召回预算**决定,而不是"遍历完整张图"。
⇒ 与实测对齐:今天的召回预算是 `blockRecallTopK = 8`、
`blockRecallMinScore = 0.5`;N 定 1~2 层,
否则一个高频主语会把整张网拖出来(实测实体网会织成"全连通",
那样 BFS 就退化成全表扫描)。
★ **这是还没验证的部分**:N=1 时已经能带出 4 个节点(含两个方向的
邻居),但"织成网"之后的实际连通度与噪声率没有实测过。
判据 `TestBFS_节点加N层邻居` 钉的是形态,不是规模。
## 与已完成工作的关系
```
① 边升格(52e4596) 边成为独立单位(可并存多条、承载属性)
← 这是联想的**前提**:边不是标签才有"沿边一步"
② 节点形态回滚 主语块/宾语块(B 方案)
④ BFSBlocks 联想的实现
```
顺序不能反:没有 ①,「沿边一步」就是查一个字符串标签;
没有 ②,图里只有名字节点,联想织不出有意义的网。
## 一条反面记录
我第一次实现 `Commit` 块化时(cdf0726)做成了
`主语块 --是--> 宾语块` 的属性图形态 —— **节点形态对、但块内容错了**
(块内容是纯名字,而不是 `<主语>|<维度>=<值>` 的字段块)。
⇒ 形态对不等于设计对。**节点装什么内容,与节点之间怎么连,是两件事。**