AI 记忆系统的无人区:我们为什么放弃检索,造了一片「神经记忆场」
目录
- 一个反直觉的起点:记忆不是仓库里的货物
- [书童协议的哲学地基:AI 是认知校准器,不是答案机器](#书童协议的哲学地基:AI 是认知校准器,不是答案机器 "#2-%E4%B9%A6%E7%AB%A5%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%93%B2%E5%AD%A6%E5%9C%B0%E5%9F%BAai-%E6%98%AF%E8%AE%A4%E7%9F%A5%E6%A0%A1%E5%87%86%E5%99%A8%E4%B8%8D%E6%98%AF%E7%AD%94%E6%A1%88%E6%9C%BA%E5%99%A8")
- 神经记忆场的核心隐喻:记忆是活的神经元网络
- 记忆域的三层架构:热、温、冷是整理状态,不是温度
- [回忆机制:从「查询-返回」到「入口激活 + 场扩散」](#回忆机制:从「查询-返回」到「入口激活 + 场扩散」 "#5-%E5%9B%9E%E5%BF%86%E6%9C%BA%E5%88%B6%E4%BB%8E%E6%9F%A5%E8%AF%A2-%E8%BF%94%E5%9B%9E%E5%88%B0%E5%85%A5%E5%8F%A3%E6%BF%80%E6%B4%BB--%E5%9C%BA%E6%89%A9%E6%95%A3")
- 认知拓扑涌现:单峰、双峰与多峰
- 上下文的两步走:记忆处理与扇区编排
- 追问的内禀化:从硬编码规则到场状态触发
- [Hebbian 在线塑形:每轮对话都在重写认知地形](#Hebbian 在线塑形:每轮对话都在重写认知地形 "#9-hebbian-%E5%9C%A8%E7%BA%BF%E5%A1%91%E5%BD%A2%E6%AF%8F%E8%BD%AE%E5%AF%B9%E8%AF%9D%E9%83%BD%E5%9C%A8%E9%87%8D%E5%86%99%E8%AE%A4%E7%9F%A5%E5%9C%B0%E5%BD%A2")
- [MVP 的工程克制:22MB 模型、纯内存、零外部依赖](#MVP 的工程克制:22MB 模型、纯内存、零外部依赖 "#10-mvp-%E7%9A%84%E5%B7%A5%E7%A8%8B%E5%85%8B%E5%88%B622mb-%E6%A8%A1%E5%9E%8B%E7%BA%AF%E5%86%85%E5%AD%98%E9%9B%B6%E5%A4%96%E9%83%A8%E4%BE%9D%E8%B5%96")
- 未竟之地:相似非相同,以及多峰之外的认知地形
- 参考文献
- 结语:无人区的坐标
1. 一个反直觉的起点:记忆不是仓库里的货物
现有大语言模型的记忆系统,本质上都是检索增强(RAG)的变体。无论是向量数据库、关键词索引,还是最近流行的「记忆层」API,底层逻辑完全一致:
把记忆切成块,编上号,存进仓库。需要时按相似度排序,取 Top-K,拼进 Prompt。
这套范式在问答场景里跑得通,但一旦进入长程、多轮、语义纠缠的对话,就会暴露三个结构性缺陷:
第一,检索是静态的。 记忆的「相关性」在入库那一刻就被向量固定了,后续对话再怎么演化,旧记忆的坐标不会动。人脑不是这样------同一段记忆,在今天和三个月后的激活路径完全不同。
第二,召回是局部的。 向量相似度只能找到「长得像」的记忆,找不到「语义关联但表述不同」的记忆。你三天前说「那个 JWT 方案有问题」,今天说「认证模块还是不稳」,传统系统几乎不可能把这两句连起来。
第三,上下文是粗暴拼接的。 传统系统把检索到的记忆块直接塞进上下文,不分远近、不分轻重、不处理冲突。当两段记忆互相矛盾时,系统只会把它们一起丢给 LLM 自己去打架,本身感知不到「我在拉扯」。
我们造「神经记忆场」(Neural Memory Field),就是为了跳出这个框架。
2. 书童协议的哲学地基:AI 是认知校准器,不是答案机器
在讲技术之前,必须先交代这套系统的哲学前提------它来自我们持续迭代的书童协议(shutong-protocol)。
书童协议的核心主张只有一句话:
AI 不确定的时候,应该停下来追问,而不是硬猜。
这不是用户体验优化,这是认识论立场。我们认为:
- 概率性属于认知机制(选择走哪条记忆路径可以采样);
- 确定性属于认知结果(一旦选中,原文必须零压缩、零失真地注入)。
主流 RAG 恰好做反了:检索阶段是确定的(余弦相似度排序),注入阶段却是失真的(截断、摘要、重排)。书童协议要求把这个逻辑颠倒过来。
神经记忆场就是这一哲学的工程落地:让记忆的选择过程充满概率与涌现,让最终注入 LLM 的信息保持绝对忠诚。
3. 神经记忆场的核心隐喻:记忆是活的神经元网络
神经记忆场的基本单元不是「文档块」,而是神经元(Neuron)。
python
@dataclass
class Neuron:
id: str # 全局唯一标识
turn: int # 诞生轮次
speaker: str # "user" / "assistant"
text: str # 原文
embedding: np.ndarray # 384 维语义坐标
activation: float = 0.0 # 当前激活度(每轮清零重算)
threshold: float = 0.25 # 放电阈值
tags: Set[str] = field(default_factory=set)
每个神经元都是图中的一个节点。节点与节点之间通过突触(Synapse)连接,权重表示关联强度。
python
@dataclass
class Synapse:
from_id: str
to_id: str
weight: float # [0, 1],关联强度
type: str = "associative"
全局记忆场就是一个有向图:
python
G = nx.DiGraph() # 单例,纯内存
关键区别在于:这个图不是静态索引,而是一个动力学系统。 每轮对话,能量从当前输入注入,沿着突触扩散,传遍全图。激活度高的节点「放电」,进入下游的认知流程。
记忆不是被「查出来」的,是被**「激活」**出来的。
3.1 相关工作与边界:我们站在谁的肩膀上
在展开记忆域架构之前,有必要诚实交代:「扩散激活」本身不是我们的发明。
1975 年,Collins & Loftus 在认知科学领域就提出了 Spreading Activation 框架,描述人脑语义网络中的能量传播机制。半个世纪后,这一思路被重新引入 AI 记忆系统------近期被 ACL 2026 接收的 SYNAPSE(Jiang et al., 2026)就是一个典型代表:它将记忆建模为图节点,通过离散步长的能量传播实现检索增强,并混合语义嵌入与图结构进行召回。
此外,Brown University 的 Neural Graph Memory (2025)也探索了 Hebbian 可塑性在图记忆中的应用,Schlag & Schmidhuber 的 H-Mem(NeurIPS 2020)则用 Hebbian 学习实现了异联想记忆的 one-shot 学习。
这些工作证明了「图 + 激活 + 可塑性」这条技术路线的可行性。但神经记忆场与它们之间存在三个根本性的分野:
第一,热核扩散 vs. 离散传播。 SYNAPSE 的扩散是 3 步离散传播(retention δ=0.5),本质上仍是检索增强的变体。我们的热核扩散是 15 步连续衰减(decay=0.6),能量在图上形成的是连续动力学场,而非离散的节点激活序列。
第二,场拓扑即认知状态。 已有工作将扩散激活当作「找记忆更好」的手段,但从未将扩散后的场分布本身视为认知状态的表征。单峰、双峰、多峰------这些拓扑形态不是检索质量的副产品,而是系统内禀地感知自身认知状态的方式。
第三,追问的内禀化。 已有系统没有「不确定时停下来问」的机制。我们的绿黄红审查不是外部规则,而是场拓扑收敛失败的直接反应。追问不是检索失败后的 fallback,是场动力学本身的相变信号。
这些差异不是工程细节上的优化,而是认识论层面的分歧:我们把记忆场当作认知地形本身 ,而不仅是检索工具。书童协议的哲学------AI 作为认知校准器、概率确定、不确定时追问------是这些技术选择的统一根基。
4. 记忆域的三层架构:热、温、冷是整理状态,不是温度
书童协议原有热 / 温 / 冷三层记忆系统。在神经记忆场的语境下,这三层不再是「温度」的隐喻,而是整理状态 和存储位置的区分:
| 层级 | 状态 | 存储位置 | 在神经场中的形态 | 特征 |
|---|---|---|---|---|
| 热层 | 未整理 | 神经场中 | 空白但激活的节点 | 上次整理后到当前轮次的原始对话内容 |
| 温层 | 已整理 | 神经场中 | 完整的神经元节点 | 有检索字段(embedding)和上下文字段(语义关键说明) |
| 冷层 | 已归档 | 底层存储器 | 不在神经场中 | 原始记忆的归档备份,不轻易拿出 |
4.1 热层:空白但激活的节点
热层是当前窗口中尚未整理的内容 ------从上次整理完成到当前轮次之间的所有对话。这些内容在神经场中表现为空白但激活的节点:它们没有完整的语义编码和突触连接,但携带原始文本,在场扩散中可以被直接激活。
热层的存在解决了一个关键问题:整理不是每轮都做的。对话在流动,整理是间歇性的。热层保证了「整理间隙」中的内容不会丢失,它们以原始形态参与场扩散,直到下一次整理被提炼成温层节点。
4.2 温层:整理后的神经节点
温层是经过整理的记忆节点 。这里的「整理」不是简单的压缩或摘要,而是符合书童协议忠诚压缩原则的语义重构:
不追求压缩比,追求语义不丢失。
整理器将一段上下文对话提炼为一个或多个神经元节点。每个节点包含:
- 检索字段:384 维语义向量,用于入口激活时的相似度匹配
- 上下文字段:完整的原文或语义关键说明,用于扇区编排时注入 LLM
- 元数据:轮次、说话人、标签等
温层节点是神经场的「骨架」------它们有完整的突触连接,参与场扩散,承载长期语义关联。
4.3 冷层:底层归档
冷层是原始记忆的归档备份,存储在底层存储器中,不在神经场中参与扩散。它的作用是:
- 当温层节点需要「溯源」时,可以调取原始上下文
- 当神经场需要「重建」或「回溯」时,冷层提供完整的历史底稿
- 作为数据安全层,防止整理过程中的信息丢失
冷层不轻易参与日常对话,但在关键场景(如用户质疑某段记忆、系统需要深度复盘)时可以被动召回。
4.4 整理的节奏与忠诚压缩
整理不是每轮都做,而是由触发条件驱动:
- 对话轮次达到阈值(如每 10 轮)
- 上下文长度超过窗口限制
- 用户主动触发「整理」指令
- 系统检测到认知状态需要「归档」(如一段对话主题结束)
整理过程由大模型执行,但遵循严格的忠诚压缩原则:
markdown
输入:一段原始对话上下文
输出:一个或多个 Neuron 节点
约束:
1. 语义完整性:不能丢失关键信息
2. 因果保留:对话中的因果关系必须显式编码为突触
3. 不追求压缩比:如果需要两个节点才能完整表达,就不硬塞进一个
整理完成后,热层内容被「吸收」进温层,热层节点清空,等待下一轮对话重新累积。
5. 回忆机制:从「查询-返回」到「入口激活 + 场扩散」
传统回忆是两次操作:编码查询向量 → 相似度排序取 Top-K。
神经记忆场的回忆是四个连续阶段:
5.1 语义编码
用户输入首先被编码为 384 维向量。MVP 使用 all-MiniLM-L6-v2(22MB,纯 CPU),失败时降级为零向量。
python
user_emb = embedder.encode(user_input) # 384-dim
5.2 入口激活(Entry Activation)
新输入不是去「查」旧记忆,而是作为热源 ,在图中寻找「语义距离最近」的旧节点作为入口。
python
def entry_activation(user_emb):
for nid in G.nodes():
# 跳过空白节点(热层未整理内容没有 embedding)
emb = G.nodes[nid].get("embedding")
if emb is None or np.linalg.norm(emb) == 0:
continue
sim = cosine_similarity(user_emb, emb)
if sim >= MIN_SIMILARITY: # 硬过滤下限 0.5
candidates.append((nid, sim))
return top_k(candidates, k=5)
这里有一个关键设计:入口节点 + 当前输入节点共同作为种子(seed_nodes) ,在后续扩散中持续注入能量。当前输入不是查完就消失的查询条件,它是整场扩散的持续热源。
5.3 场扩散(Heat Kernel Diffusion)
15 步迭代,每步保留系数 decay = 0.6:
python
for _ in range(15):
for nid in G.nodes():
retention = decay * G.nodes[nid]["activation"]
incoming = sum(
G.nodes[pre]["activation"] * G[pre][nid]["weight"]
for pre in G.predecessors(nid)
)
G.nodes[nid]["activation"] = min(1.0, retention + incoming)
能量沿着突触流动,强关联的节点互相「共振」,弱关联的节点逐渐沉寂。15 步之后,全场的激活分布就是当前认知状态的拓扑表征。
5.4 放电选择(Top-K 排名)
不再使用绝对阈值(早期能量过低会导致全场静默),而是直接取激活度最高的 Top-15 节点:
python
firing = sorted(G.nodes(), key=lambda n: G.nodes[n]["activation"], reverse=True)[:15]
这些放电节点进入审查和扇区编排,最终组装成 LLM 的上下文。
6. 认知拓扑涌现:单峰、双峰与多峰
这是神经记忆场最反直觉、也最有野心的部分。
传统系统用离散状态机管理「认知状态」:比如「正常回答」「需要追问」「信息冲突」等状态,由硬编码规则切换。
神经记忆场认为:认知状态不是被规则判定的,是从场拓扑中自然涌现的。
6.1 单峰:认知收敛
如果扩散后,场上只有一个明显的能量峰值,其余节点激活度平缓衰减,说明当前输入与历史记忆形成了单一、连贯的认知焦点。系统可以直接回答,无需追问。
6.2 双峰:认知冲突
如果场上出现两个能量接近的峰值 ,且它们之间没有强突触连接,说明两段记忆被同时激活,但彼此「不认账」。这就是认知冲突的场表征。
比如:第 3 轮你说「用 JWT 做认证」,第 12 轮你说「JWT 有安全隐患,改用 Session」。今天你再提「认证方案」,场上可能同时激活第 3 轮和第 12 轮的神经元,形成双峰。
双峰不是 bug,是系统内禀地感知到了「我在拉扯」。这种感知不需要任何硬编码的冲突检测规则------它是图动力学的自然结果。
6.3 多峰:更复杂的认知地形
双峰只是简单情况。真实对话中,场上可能出现三个、四个甚至更多能量峰值,形成复杂的「认知地形」:
- 一个峰值关于技术方案 A
- 一个峰值关于技术方案 B
- 一个峰值关于你之前说过的约束条件
- 还有一个峰值关于某段看似无关、但语义上藕断丝连的旧对话
多峰意味着当前输入触发了多个语义簇,它们之间的关系不明朗 。这时系统的最优策略不是强行选一个,而是追问------让用户提供更多信号,帮助场重新收敛。
注意:多峰分析目前只是理论推演。MVP 阶段我们只验证双峰场景的追问触发,多峰的精细处理是 v0.3 的目标。
7. 上下文的两步走:记忆处理与扇区编排
传统系统的上下文组装是一步完成的:检索记忆 → 拼进 Prompt → 发给 LLM。神经记忆场将这个过程拆分为两步走。
7.1 第一步:记忆系统处理
以前直接发给 LLM 的原始上下文,现在先经过记忆系统处理:
markdown
原始对话上下文 → 整理器 → 记忆节点(温层)
↓
热层内容(未整理)
↓
神经场扩散 → 放电节点
这一步的核心产出是放电节点------经过场扩散筛选、排序、赋予权重的「认知焦点」。
7.2 第二步:带着记忆发送给 LLM
放电节点选出后,不是简单拼接,而是按时间位阶差异化注入。当前窗口的上下文包含两部分:
- 温层记忆:已整理成神经节点的历史记忆,按时间距离分桶
- 热层记忆:当前窗口中尚未整理的原始对话,原文完整保留
python
current_turn = max(G.nodes[n]["turn"] for n in G.nodes())
# 分桶(仅针对温层节点)
near = [n for n in firing if G.nodes[n].get("embedding") is not None
and current_turn - G.nodes[n]["turn"] <= 5]
mid = [n for n in firing if G.nodes[n].get("embedding") is not None
and 5 < current_turn - G.nodes[n]["turn"] <= 50]
far = [n for n in firing if G.nodes[n].get("embedding") is not None
and current_turn - G.nodes[n]["turn"] > 50]
# 热层内容:原文完整保留
hot_txt = "\n".join([G.nodes[n]["text"] for n in firing
if G.nodes[n].get("embedding") is None])
# 温层格式化:越远越薄
near_txt = "\n".join([G.nodes[n]["text"] for n in near])
mid_txt = "\n".join([f"[早前] {G.nodes[n]['text'][:80]}..." for n in mid[:5]])
far_txt = "\n".join([f"[历史] {G.nodes[n]['text'][:40]}..." for n in far[:3]])
7.3 位阶组装:远 → 中 → 近 → 热 → 当前
python
prompt = (
"你是书童。当前审查状态:" + light + "\n"
"【长期背景】\n" + far_txt + "\n"
"【相关历史】\n" + mid_txt + "\n"
"【最近对话】\n" + near_txt + "\n"
"【当前窗口】\n" + hot_txt + "\n"
"用户:" + user_input + "\n请回答:"
)
这个顺序不是随意的。它对应书童协议「上下文编排器」的五层注意力位阶:
| 位阶 | 内容 | 作用 |
|---|---|---|
| 长期背景 | 远场温层记忆 | 建立坐标系 |
| 相关历史 | 中场温层记忆 | 填充细节 |
| 最近对话 | 近场温层记忆 | 提供上下文 |
| 当前窗口 | 热层未整理内容 | 保留原始语义 |
| 当前输入 | 用户本轮输入 | 焦点 |
越远的内容越薄,不是因为不重要,而是因为场已经替我们做了筛选------能活到远场放电的节点,必然是通过了多轮扩散的强关联记忆,它不需要完整文本,只需要一个「锚点」就能唤醒 LLM 的语义联想。
7.4 为什么两步走?
两步走的本质是解耦:
- 第一步解决「记忆是什么」的问题------通过神经场扩散,让系统内禀地感知哪些记忆是相关的、哪些是冲突的
- 第二步解决「怎么告诉 LLM」的问题------通过扇区编排,将经过场筛选的记忆以最优结构注入上下文
这种解耦让系统可以在第一步做复杂的认知计算 (场扩散、拓扑分析、冲突检测),在第二步做简洁的信息传递(差异化注入、忠诚压缩)。
7.5 关于上下文窗口的思考
有人可能会问:既然 LLM 的上下文窗口越来越长,为什么还要做这么复杂的记忆系统?
答案是:窗口长度 ≠ 信息处理能力。
在注意力机制下,即使窗口无限长,模型的信息处理能力也是有限的。当一次性注入的信息过多时,模型会出现「注意力稀释」------所有 token 都被看到了,但没有被真正「理解」。
神经记忆场的价值在于:不是减少信息量,而是优化信息结构。 通过场扩散筛选出真正相关的记忆,通过扇区编排让不同距离的记忆以不同「音量」呈现,我们让 LLM 的注意力集中在该集中的地方。
未来,当上下文窗口进一步扩展时,这套系统的角色会从「减少注入量」转变为**「配合大模型进行思考过程」**------将大量信息先经过记忆系统整理吸收,再发送给 LLM。整理成神经节点的过程,本质上就是一次「预思考」。
8. 追问的内禀化:从硬编码规则到场状态触发
书童协议的交互范式是:不确定 → 停 → 问 → 记 → 编 → 答。
在神经记忆场中,「不确定」不再由规则判断,而是由场状态判断。
我们设计了一个极简审查机制(绿 / 黄 / 红):
python
def safe_llm_review(user_input, firing_nodes):
# LLM 基于放电节点和当前输入,输出 GREEN / YELLOW / RED
# GREEN: 记忆充足,直接回答
# YELLOW: 能回答但有缺口,回答时附带提醒
# RED: 记忆不足或矛盾,必须追问
审查的输入不是原始记忆库,而是场扩散后的放电节点------也就是已经被场筛选、排序、赋予权重的「认知焦点」。LLM 审查的不是「有没有相关文档」,而是**「这些被激活的记忆是否足够支撑一个确定的回答」**。
当双峰或多峰出现时,审查大概率返回 RED。此时系统生成追问,而不是硬答。
这就是追问的内禀化:追问不是外部规则触发的,是场拓扑本身的收敛失败触发的。
9. Hebbian 在线塑形:语义单元之间的认知地形重写
每轮对话结束后,系统执行 Hebbian 学习:
一起放电的语义单元,连在一起。
但这里有一个关键前提:Hebbian 塑形的对象不是「单轮对话」或「单条消息」,而是「整理后的语义单元」。
9.1 语义单元 vs. 单轮消息
传统思路会把每一轮用户输入和 AI 回复都当成独立神经元,Hebbian 在它们之间建立连接。这样做的结果是:一张由碎片化语句构成的「语句关联网」。
问题是:用户和 AI 的对话本身是一个完整的语义环境。比如:
用户:「JWT 方案有问题」 AI:「具体是哪个环节?」 用户:「签名验证的时候 token 解析失败」 AI:「可能是算法不匹配,你用的是 RS256 还是 HS256?」
这四句话如果拆成四个独立节点,Hebbian 只能捕捉到「问题→追问→回答→追问」的表层链式结构。但这段对话的真正认知价值是:「JWT 签名验证算法不匹配的诊断场景」------这是一个完整的语义单元,包含问题、排查过程、关键线索。把它拆碎,记忆就丢失了「场景感」。
因此,神经记忆场的 Hebbian 塑形遵循一个原则:
节点是整理后的语义单元,不是原始消息。
9.2 整理后的语义单元作为塑形对象
热层的原始对话经过整理器提炼后,形成温层的语义单元节点。每个节点内部保持完整的语义环境:
python
@dataclass
class SemanticUnit(Neuron):
# 继承 Neuron 的所有字段
# 但 text 字段不再是单条消息,而是整理后的场景描述
text: str # 例如:「用户报告 JWT 签名验证失败,经排查为算法不匹配(RS256 vs HS256)」
source_turns: List[int] # 该语义单元来源于哪些原始轮次
source_speakers: List[str] # 涉及的说话人序列
causal_chain: str # 因果链摘要(可选)
Hebbian 塑形发生在这些语义单元之间:
python
def hebbian_plasticity(active_units: List[str], lr: float = 0.1):
"""
active_units: 本轮场扩散中放电的语义单元 ID 列表
包含:
- 当前输入对应的语义单元(如果本轮已整理)
- 入口激活召回的旧语义单元
- AI 回复生成的语义单元(整理后)
"""
for i, a in enumerate(active_units):
for b in active_units[i+1:]:
if not G.has_edge(a, b):
G.add_edge(a, b, weight=lr)
else:
G[a][b]["weight"] = min(1.0, G[a][b]["weight"] + lr)
9.3 语义环境的完整性
为什么必须保持语义单元的完整性?
因为记忆的价值在于「场景复现」,不是「关键词匹配」。当你一个月后再次提到「JWT」,系统应该召回的是「算法不匹配的诊断场景」这个完整认知单元,而不是零散地想起「签名验证」「token 解析失败」「RS256」这几个孤立词汇。
语义单元内部的完整性由整理器保证:
- 不追求压缩比:如果一个场景需要 200 字才能完整表达,就不硬塞进 50 字
- 因果保留:对话中的追问-回答链必须显式编码在语义单元内部
- 角色标记:谁说了什么、谁提出了关键线索,必须保留
Hebbian 连接的是场景与场景之间的关联:
- 「JWT 算法不匹配」→「OAuth2 流程设计」
- 「数据库连接池溢出」→「高并发架构优化」
这些连接构成了认知地形------不是平铺的关键词索引,而是有地形起伏的语义地貌。高频共现的场景之间形成「山脉」(强突触),偶尔关联的场景之间形成「河谷」(弱突触),无关场景之间是「平原」(无连接)。
9.4 塑形的时间窗口
不是所有放电的语义单元都参与 Hebbian 塑形。我们只选择本轮场扩散中激活度最高的 Top-K 语义单元(而非所有放电节点),避免噪声关联。
python
# 从放电节点中筛选出「语义单元」(排除热层空白节点)
active_units = [
nid for nid in firing_nodes
if G.nodes[nid].get("embedding") is not None # 温层节点才有 embedding
][:HEBBIAN_TOP_K]
hebbian_plasticity(active_units, lr=0.1)
下一轮再遇到类似语境,能量会沿着这些新建立的突触更快传播。记忆不是死的档案,是在对话中实时生长的认知地形。
10. MVP 的工程克制:22MB 模型、纯内存、零外部依赖
理论再漂亮,跑不起来就是玄学。v0.2 MVP 的工程选择体现了极强的克制:
| 组件 | 选择 | 理由 |
|---|---|---|
| 图引擎 | networkx 纯内存 |
不引入图数据库,先验证假设 |
| 向量模型 | all-MiniLM-L6-v2(22MB) |
本地 CPU 可跑,零 API 依赖 |
| 扩散步数 | 15 步 | 足够传遍 200 节点规模的全图 |
| 放电机制 | Top-K 排名 | 避免绝对阈值导致的早期静默 |
| 异常降级 | 完整链条 | embedding 失败 → 零向量;LLM 失败 → 重试 + 降级;首轮空图 → 直接 GREEN |
| 持久化 | 无 | 纯内存,会话结束即销毁 |
我们刻意避开了:向量数据库、异步框架、Rust 重写、缓存系统、多线程并发。这些不是不重要,而是在验证核心假设之前,它们都是噪声。
监控台每轮输出场状态快照:
json
{
"round": 7,
"review_light": "YELLOW",
"graph": { "nodes": 14, "edges": 23 },
"field": {
"max_activation": 0.847,
"mean_activation": 0.12,
"firing_count": 15
},
"top5": [...]
}
跑起来的那一刻,看着能量在图上流动、突触在对话中生长,你会有一种奇怪的感觉:这不是我在查记忆,这是记忆自己在说话。
11. 未竟之地:相似非相同,以及多峰之外的认知地形
神经记忆场目前只验证了「冲突型」认知拓扑(双峰 / 多峰)。但记忆的纠缠远不止冲突一种模式。
还有一种更微妙、更常见的状态:相似非相同。
第 5 轮你讨论「JWT 的过期策略」,第 18 轮你讨论「Refresh Token 的轮换机制」。两者语义高度相关,但并非同一概念,也不矛盾。传统系统要么把它们当同一件事合并,要么完全分开处理。
在场语言中,这对应一种**「粘连峰」------两个峰值能量接近、突触连接较强,但语义重心有细微偏移。系统应该感知到「这两件事有关,但不一样」,并在回答中区分引用**,而不是混为一谈。
如何处理「相似非相同」,目前还没有成熟方案。它是 v0.3 的核心攻关方向之一。
此外,以下模块仍在理论阶段:
- 情绪感知与调制:当前固定物理参数,未引入情绪增益
- 参数自适应:Hebbian 学习率、扩散衰减系数固定,未随对话演化
- 主动心跳:当前纯被动对话,未实现时间提醒与主动推送
- 多用户隔离:MVP 单会话单用户
- 预思考整理:大量信息先经过记忆系统整理成节点,再发送给 LLM
12. 参考文献
-
Collins, A. M., & Loftus, E. F. (1975). A spreading-activation theory of semantic processing. Psychological Review, 82(6), 407-428.
-
Jiang, Y., Chen, Y., Li, Y., et al. (2026). SYNAPSE: Episodic and Semantic Memory with Spreading Activation for LLM Agents. In Proceedings of ACL 2026 (Findings). arXiv:2601.02744.
-
Neural Graph Memory. (2025). Brown University. Zenodo preprint.
-
Schlag, I., & Schmidhuber, J. (2020). H-Mem: Holographic Memory. In Advances in Neural Information Processing Systems 33 (NeurIPS 2020).
-
Krotov, D., & Hopfield, J. J. (2016). Dense associative memory for pattern recognition. Advances in Neural Information Processing Systems, 29.
-
Vaswani, A., Shazeer, N., Parmar, N., et al. (2017). Attention is all you need. Advances in Neural Information Processing Systems, 30.
13. 结语:无人区的坐标
神经记忆场不是对 RAG 的优化,是对「AI 如何记忆」这一问题的重新提问。
它试图回答一个更底层的问题:如果记忆不是被检索的,而是被激活的;如果认知状态不是被规则判定的,而是被场拓扑涌现的;如果追问不是外部干预,而是内禀收敛失败的自然反应------那么 AI 的记忆系统应该长什么样?
书童协议的第一个验证 Demo(V0.1)已经跑通。神经记忆场是第二个。
我们很清楚,这片领域是无人区。没有论文可以直接抄,没有开源项目可以直接 fork。每一步都是假设 → 实现 → 观测 → 修正的闭环。
但正是这种无人区的探索,才让「AI 作为认知校准器」的愿景有了工程上的落脚点。
如果你也在思考记忆系统的下一代形态,欢迎评论探讨或者来 GitHub 围观(或拍砖):
shutong-protocol : github.com/VZIQAQ/shut...
本文基于书童协议神经记忆场 MVP v0.2 技术方案撰写。所有架构决策、参数选择与异常策略均来自实际工程实现,而非理论推演。