模型重启之后,
它仍然记得。
1.22% 82.52% 同一 264 题题集的可回答正确率:无记忆基线 → 批次 B。 批次 A 为 62.60%,两批配置不同、不可合并。
向下滚动 · 走一遍读取路径
Key numbers
出处 ·
Evidence · 重启实验
把历史扔掉,它还记得吗?
下面不是示意动画,是工程里两次真实运行的逐字回放。同一条事实、同一个问题、同一份协议; 两次之间唯一的差别,是写入有没有真的落库。
写入的事实
重启之后问
Abstract
这是什么东西
它接在本地 Qwen3.5-4B 上,是一个模型内的记忆层:把适合长期复用的个人事实、项目事实和短对话片段 写进带地址的记忆记录;当前问题只读取少量相关记录,再把这些记录作为模型内部前缀交给 Qwen 生成答案。
它要解决的具体问题是:模型重启后不携带历史聊天记录,仍能访问已经保存的个人或项目事实, 同时不把全部历史转换成 GPU 上的长 KV Cache。
当前状态:研究原型到工程验证之间。同一 264 题题集上,可回答正确率从 1.22% 提升到 62.60%(批次 A) 与 82.52%(批次 B);代价是输入前缀变长、解码速度下降约 10%。我们不在页面上把它说成通用智能, 也不把实验室结果表述成线上服务承诺。
What's in this release
记忆层与索引
738 active records
批次 B 实际装载;24 个页面,页容量 32 条。地址空间设计容量 1,048,576。
记忆路由器
2,037,774 参数
16 张量 / float32 / 512 B 地址;结构 dim=128 · heads=8 · hidden=2560 · max_hops=3。
有界 GPU cache
256 records
上限 131,072 token;批次 B 实际用到 17,990 token,fallback 与分配失败均为 0。
评测题集
264 题
246 可回答 / 18 未知;真实仓库 220 题 + 项目对话事实 44 题。
可复核性
逐字原文
样例页的问答全部取自评测原始结果、未经润色,并包含两条我们判错的样例。
Headline result
After this release · NM2.1
发布之后又做了什么
上面所有数字都来自 v2。之后的 NM2.1 换掉了记忆路由器、修掉写入路径上一个会把事实互相销毁的缺陷, 并把「问库里没有的属性时照样编答案」这个 75% 的失败修到 0%。
未知拒答率 · 24 条同形候选
100.00% 从 0.00% 起 —— 修好之前,模型 75% 的情况下照样编一个答案
这是整个项目最该被引用的一个数字。它回答的不是「能不能检索到」,而是 「不知道的时候会不会不懂装懂」。
未知拒答率 · 同形候选
0.00% →100.00%
问库里不存在的属性时,正确说「不知道」的比例。修好之前,模型 75% 的情况下照样编一个答案。
写 20 条不同属性后存活
12/20 →20/20
v2 的写入路径会把 8 条无关事实互相 retract,让端到端正确率存在 50% 的硬上限——任何排序器都救不回一条已被删掉的记录。
零字面重叠改写
43.75% →68.75%
查询与事实之间没有任何独特字重叠时的回答正确率;24 条同句式候选的随机水平是 4.17%。
代价几乎为零:参数量 2,037,774 不变、每条记录地址 512 字节不变、模型包 8.88 GB 不变; 交错基准(7 轮,消除顺序效应)单查询延迟 1.4203 → 1.4242 ms,差 +0.28%, 小于同一轮里原版自身 4.85% 的离散度。
失败也一并写出来:那套「先判属性、再查库」的机制在离线实验里是 100.00% 拒答 / 0.00% 误拒, 但接上运行时连续失败两次——第一次把可回答正确率从 100.00% 压到 6.25%; 第二次修好了目标域(泄漏真的到 0.00%、可回答无损)却让另一个域崩到 0.00%。 最终该项已回退,原因也定位到了。
路由器工件本身的提升
这些是路由器工件在冻结评测集上的增益。它不会自动传递到最终答案 —— 原因见技术论证页的第十节。
Boundaries · 我们不宣称的内容
完整的八条与五项主要局限见 边界页。 把它们放在发布页正面,是因为它们和上面的数字一样重要。
Citation
@misc{naturalmemoryv2,
title = {Natural Memory v2: an in-model memory layer for local LLMs},
author = {wpy},
year = {2026},
note = {Research prototype on Qwen3.5-4B. 264-question dirty-corpus
transfer test; two independent batches.},
url = {https://wpyw.site}
}
引用时请一并注明「批次 A 与批次 B 配置不同、分数不可合并」,否则单个数字会被误读。