Sillage:用 4 MB 固定记忆让冻结大模型"记住"读过的内容
一个 Show HN 开源工具,把四篇论文中的记忆机制整合成一行命令,让冻结的语言模型无需梯度即可持久记忆已读文本,存储…
在 Hacker News 的 Show HN 板块,一个名为 Sillage 的开源工具近日引发讨论。它把四篇论文中提出的记忆机制整合成单一命令行程序,让"冻结"(不再训练)的大语言模型在阅读新文档后能把内容记住,并在下次生成时调用这份记忆,全程不使用梯度、不做微调,也不让索引随文档量无限增长。
核心思路:四机制合一
Sillage 的设计来自四个独立机制,作者将其拼装成同一工具:
- 一张 Hebbian 矩阵,在模型逐 token 前向过程中被持续写入;
- 一个按置信度路由的"语义分级",对中间层表示做不同强度处理;
- 一个依据"惊讶度"做整合的冷存储,作为长期记忆层;
- 一个 rank-16 的读出适配器(adapter),影响最终预测分布。
作者以法语单词 "sillage"(事物经过后留下的痕迹)命名这一系统,意指"模型读过的内容留下的痕迹"。整个工具依赖 numpy、torch 与 transformers,可在笔记本 CPU 上直接运行。
实测效果:从两次阅读中看出"学会"
作者以两次会话、间隔两天、上下文互不共享的方式做了端到端演示。第一次读取 preprint_v1.txt 后,冻结模型本身的 PPL 从 12.14 降到 11.83(adapter 贡献),再叠加记忆后降到 11.71。第二天以全新进程读取 preprint_v2.md,冻结模型 PPL 为 10.68,加入 adapter 后降到 9.82,叠加全部已读记忆后进一步下降到 5.39——意味着模型在没有上文提示的情况下,仅凭"记忆"就把困惑度砍去近一半,并能补全它只在之前文档里见过的句子。
阅读时间取决于模型大小:默认的 Qwen3-0.6B 在 CPU 上每 1 万 token 约需 8 分钟;切换到 gpt2 速度可快约 4 倍,但仅支持英文。index 与 ask 命令甚至不需要加载模型,可做到即时响应。
模型无关,但有边界
Sillage 不绑定特定架构,GPT-2、Qwen、Llama、Mistral、Pythia、SmolLM 或用户自己的微调模型均可接入。系统只读取"下一 token 的 logits、一个隐藏层状态、被观测的 token"这三类信号,因此对任何因果语言模型都适用。作者已在 GPT-2、Qwen3、GPT-NeoX 三类架构上验证。
作者同时列出几条工程注意事项:
- 读出端的 β、λ 以及"何时沉默"的弃答阈值,针对每个模型需单独校准;
- 未校准模型上"语义分级"默认关闭(可由
--semantic强制启用),因为隐状态白化目前只在 Qwen3 上验证过; - 记忆以某一模型的词表空间写入,跨模型不通用,每个模型需要独立的
--state目录; - 设计目标为 0.1–1B 级别小模型,7B 模型理论上可用但偏慢;提供
--device cuda时冻结前向可放 GPU,记忆机制仍跑在 CPU。
固定开销与"永不自我学习"的取舍
记忆占用从启动第一天起就被锁死:GPT-2 上 7.4 MB,Qwen3 上 25 MB(词表约 3 倍),无论读过 1 篇还是 1 万篇文档都一样大。adapter 体积等于词表大小 × 16 个浮点数,GPT-2 上为 3.2 MB,Qwen3 上为 9.7 MB。
同时有一个关键限制——记忆只从用户提供的内容里学习,从不学习模型自己生成的内容。作者表示这是有意设计,避免模型通过自生成反馈循环偏离原始知识。
项目以 MIT 风格开源,可通过 pip install sillage 安装,作者也提供了浏览器内的免安装试用入口(已预置一篇论文的记忆)。对于希望给本地小模型加一份"固定大小、可重启后保留"的长期记忆的研究者和开发者来说,这是一个值得尝试的方向。
