TokMem: One-Token Procedural Memory for Large Language Models¶
会议: ICLR 2026
arXiv: 2510.00444
代码: https://github.com/MANGA-UOFA/TokMem
领域: 信息检索
关键词: 程序性记忆, 记忆 token, 持续学习, 上下文压缩, 工具调用
一句话总结¶
提出 TokMem,将可复用的任务程序编译为单个可训练记忆 token,既作为程序索引又作为生成控制信号,无需长 prompt 即可高效调用 1000+ 任务程序,且支持无遗忘的持续扩展。
研究背景与动机¶
- 长 prompt 的效率瓶颈: 现代 LLM 依赖 prompt 控制行为,但长 prompt 构造成本高、自注意力平方级计算开销大、占用上下文窗口导致截断
- 检索增强的局限: RAG 等方法虽外部化了 prompt,但检索内容仍以文本形式占用上下文窗口,且常用程序每次都需重新解读
- 认知科学启发: 人类的程序性记忆(如骑自行车)通过练习编译为高效技能,无需每次重新读取陈述性知识
- 核心思想: 将频繁使用的任务程序"压缩"存储到专用记忆 token 中,实现常量开销的程序调用
方法详解¶
整体框架¶
TokMem 想解决的是"长 prompt 复用难"这个老问题:现代 LLM 靠 prompt 控制行为,但每来一个查询都要把整段程序说明重新塞进上下文,既占窗口又带来平方级注意力开销。它的做法是把每个常用任务程序压缩进一个专属的可训练 token,让这个 token 同时扮演"程序索引"和"生成控制信号"两个角色。整条 pipeline 分三段:训练时把程序编译进 token——在词表里额外添加 \(l\) 个特殊 token 构成记忆库 \(M = [\bm{m}_1, \ldots, \bm{m}_l]^\top \in \mathbb{R}^{l \times d}\),每个 \(\bm{m}_i\) 是一个可训练向量、对应一个唯一程序、没有文本形式,只更新这些嵌入而骨干 LLM 全程冻结;推理时模型从查询的隐状态直接路由出该用哪个记忆 token,把它喂回去自回归生成响应,多步任务还能链式预测下一个 token;持续扩展时用一步重正则化把新加入的记忆与旧记忆对齐,避免新程序压制旧程序。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
subgraph ENC["单 token 编译程序,骨干全冻结"]
direction TB
T["程序-响应对<br/>交替序列"] --> NT["next-token 预测<br/>(只更新记忆嵌入)"] --> M["记忆库 M<br/>每程序一向量"]
end
Q["查询 q"] --> R
M --> R
subgraph RT["隐状态直接路由记忆 token"]
direction TB
R["最终隐状态<br/>选 logit 最高记忆 token"] --> G["拼接后<br/>自回归生成响应"]
G -->|"多步程序链接"| R
end
G --> O["输出 / 工具调用结果"]
G -->|"无匹配程序"| F["回退普通文本生成"]
subgraph RN["重正则化对齐新旧记忆幅度"]
direction TB
NEW["新增程序嵌入<br/>范数膨胀"] --> NORM["对齐到旧记忆<br/>典型范数(方向不变)"]
end
NORM --> M
关键设计¶
1. 单 token 编译程序,骨干全冻结:把"读 prompt"换成"查一个向量"
长 prompt 的根本痛点在于程序知识每次都以文本形式重新进上下文,既吃窗口又带来平方级注意力开销。TokMem 把训练序列组织成"查询 + 若干程序-响应对交替排列"的形式 \(\bm{a} = (q_1, \ldots, q_k, a_{m_i}, a_{r_{i1}}, a_{r_{i2}}, \ldots, a_{m_j}, a_{r_{j1}}, \ldots)\),其中 \(a_{m_i}\) 是记忆 token、\(a_{r_{ij}}\) 是它该产生的响应 token。用标准的 next-token prediction 损失 \(\mathcal{L}(\bm{a}; M) = -\sum_{i>k} \log \Pr(a_i \mid \bm{a}_{<i}; M)\) 训练,但梯度只回传到记忆嵌入,骨干 LLM 和原始 token 嵌入完全不动。这样一个程序的全部知识就被"编译"进了它那个向量里,调用时开销是常量级的,彻底绕开了长 prompt 的两个成本。
2. 隐状态直接路由记忆 token:检索和生成共用同一套机制
程序编译好之后还需要一个"该用哪个程序"的入口。TokMem 不另搭检索器,而是直接复用语言模型头:给定查询 \(q\),从最终隐状态 \(h_k\) 算出各记忆 token 的分布 \(P(a_{m_i} \mid q) \propto \exp(\text{logit}(m_i \mid h_k))\),选 logit 最高的那个附到查询后得到 \([q; a_{m^*}]\),再自回归生成响应。因为记忆 token 既是索引又是控制信号,检索和生成是同一个动作的两面。这套机制天然支持两件事:一是多步程序链接——生成完一段响应后继续预测下一个记忆 token,就能在工具调用里依次串起 parse→search→format;二是优雅回退——当没有匹配程序时所有记忆 logit 都偏低,模型自动落回普通文本生成,不会被迫硬塞一个错误程序。
3. 重正则化对齐新旧记忆幅度:让持续扩展不压制旧程序
持续往记忆库里加新程序时会遇到一个具体故障:新训练的嵌入范数容易膨胀,在 softmax 路由里把旧记忆的 logit 系统性压低,造成隐性遗忘。TokMem 用一步后处理修正——对新增集合 \(A\) 中的每个嵌入做 \(\bm{m}_i \leftarrow \bm{m}_i \cdot \frac{\bar{n}_I}{\|\bm{m}_i\|_2 + \varepsilon}\),把它的模长拉到已有记忆的典型范数 \(\bar{n}_I = \text{mean}_{j \in I} \|\bm{m}_j\|_2\) 上,而方向保持不变。只对齐幅度、不动方向,既消除了新嵌入对旧记忆的压制,又不破坏新程序已学到的语义,整步开销仅 \(O(|A|d)\) 可忽略。配合"每个程序的知识完全隔离在各自 token 嵌入中"这一结构特性,新程序可以源源不断加入而不干扰已有程序,从而天然支持无灾难性遗忘的持续学习。
实验¶
原子记忆召回:Super-Natural Instructions(ROUGE-L)¶
| 模型 | 方法 | 10任务 | 200任务 | 1000任务 | 平均 |
|---|---|---|---|---|---|
| Qwen 0.5B | RAG | 50.4 | 38.8 | 34.7 | 40.7 |
| Qwen 0.5B | Fine-Tuning | 52.4 | 40.6 | 43.2 | 45.2 |
| Qwen 0.5B | Replay Memory | 52.4 | 47.2 | 46.7 | 48.7 |
| Qwen 0.5B | TokMem | 52.8 | 49.3 | 50.0 | 50.7 |
| Llama 3.2 3B | RAG | 60.0 | 45.8 | 39.9 | 47.3 |
| Llama 3.2 3B | TokMem | 68.0 | 61.2 | 61.5 | 62.9 |
| Llama 3.1 8B | TokMem | 75.4 | 65.1 | 64.8 | 67.0 |
记忆路由准确率¶
| 方法 | 10任务 | 200任务 | 1000任务 |
|---|---|---|---|
| Sentence-BERT (RAG) | 99.6 | 88.7 | 79.7 |
| TokMem (Qwen 0.5B) | 99.4 | 97.4 | 94.7 |
| TokMem (Llama 8B) | 99.8 | 98.9 | 97.5 |
组合记忆召回:工具调用(APIGen)¶
| 模型 | 方法 | 参数量 | 工具选择 Avg | 参数 F1 Avg |
|---|---|---|---|---|
| Llama 1B | ICL | - | 16.4 | 0.4 |
| Llama 1B | RAG | - | 16.9 | 2.7 |
| Llama 1B | Fine-Tuning | 0.85M | 9.0 | 68.6 |
| Llama 1B | TokMem | 0.10M | 86.2 | 68.9 |
关键发现¶
- TokMem 在 1000 任务时仍保持 94.7% 路由准确率(最小模型),远超 RAG 的 79.7%
- 训练效率极高:仅 10 个样本即可超越 RAG 的 500 样本性能
- 可训练参数量远少于 LoRA 微调(0.10M vs 0.85M),但性能相当或更优
- 持续学习中无灾难性遗忘,性能随任务增加仅缓慢下降
- 支持多步程序链接,在工具调用场景中可依次召回 parse→search→format
亮点¶
- 概念优雅: 将程序性知识压缩为单个 token,认知科学和工程实现完美结合
- 参数隔离: 每个程序独立存储,天然无遗忘,完美适配持续学习场景
- 极致高效: 常量大小的记忆开销,消除了长 prompt 的平方级计算成本
- 路由准确率惊人: 即使在 0.5B 模型上管理 1000 个任务也保持 94.7% 准确率
局限性¶
- 程序需要预先定义和训练,不支持零样本程序创建
- 单个 token 的信息容量有限,复杂程序可能无法完全编码
- 嵌入空间的容量上限未知——当程序数量极大时路由可能退化
- 重正则化是后处理操作,可能无法完全解决持续学习中的分布漂移
- 仅在 QA 和工具调用场景验证,对创意生成、长文本等任务的适用性未探索
相关工作¶
- 上下文工程: CoT、RAG、MemGPT——均以文本扩展 prompt,占用上下文窗口
- 参数高效微调: LoRA、Adapter——更新骨干参数,可能遗忘
- 软提示: Prompt tuning、Prefix tuning——训练连续提示向量,但通常不建模为独立记忆单元
- 认知科学: ACT-R 理论中的程序性记忆——技能通过练习编译为高效模块
- TokMem: 首次将 NLP 中的 token 化思想应用于程序性记忆管理
评分¶
| 维度 | 分数 |
|---|---|
| 创新性 | ★★★★★ |
| 理论深度 | ★★★☆☆ |
| 实验充分性 | ★★★★☆ |
| 实用价值 | ★★★★☆ |
| 写作质量 | ★★★★☆ |