上下文工程 - 三种Memory方案对比¶
Ch06.016 上下文工程 - 三种Memory方案对比¶
📊 Level ⭐⭐ | 12.4KB |
entities/context-engineering-three-memory-paradigms-comparison.md
上下文工程 - 三种Memory方案对比¶
当前的 Agent Memory 方案大致分为三类:隐式记忆、参数记忆、外部显式记忆。
- 隐式记忆:以 KV cache 为载体,代表方案是 EverMind 开源的《MSA:Memory Sparse Attention》,核心是将 KV cache 作为记忆载体,通过可扩展稀疏注意力 + KV 分级缓存机制,将模型的隐式记忆扩展了 100 倍。
- 参数记忆:以模型参数为记忆载体,代表方案是 Doc-to-lora,用一个专门训练过的模型,将文档直接转换为模型的 lora 权重参数,附加到模型上。
- 显式记忆:以外挂的文本检索模块为记忆载体,代表方案为各种 RAG。 这篇文章在"知识问答"和"小说情节理解"两种场景下测试对比以上三种记忆方式。
三种 Memory 方案¶
隐式记忆:MSA (Memory Sparse Attention)¶
论文:arxiv.org/pdf/2603.23516 | Github:EverMind-AI/MSA 核心原理:以 KV cache 作为记忆载体,分级存储 KV cache。只在 query 命中时加载对应 cache,与用户 query 的 cache 拼接,输出最终答案。 MSA 推理分三步: 1. 离线阶段:Global Memory Encoding。将输入的所有语料,划分为一个个单独文档。每个文档通过模型得到 hidden states,然后生成:普通 attention 用的 K/V、专门用于路由检索的 Router Key、K/V/Router Key 按 chunk 做 mean pooling 压缩,分级存储(Router Key 在 GPU 缓存,K/V 在内存,命中时加载)。 2. 在线查询:用户提问后,query 被编码为 Router Query,与 memory bank 中的 Router Key 匹配,选取 Top-k 文档,并将这些文档对应的压缩 K/V 加载到 GPU 缓存中。 3. 拼接回答:query 生成 Router Query,和 memory bank 的 Router Key 匹配,选 Top-k 文档,加载这些文档的压缩 K/V 到 GPU 缓存。 能扩展到 100M tokens 的机制:
- 文档独立处理(Document-wise RoPE):每个文档内部自己做 attention,不拼成超长序列,避免全局 full attention 的平方复杂度。
- KV chunk pooling:原始 token-level KV cache 经 chunk pooling 压缩后存 CPU 缓存。 复现结果(HotpotQA 1000题):LLM Score 4.172(论文:4.061)复现成功,检索 Precision 0.8515,Recall 0.8510,76.9% 得满分 5 分。
参数记忆:Doc-to-lora¶
论文:arxiv.org/pdf/2602.15902 | Github:SakanaAI/doc-to-lora 核心原理:用一个专门训练过的模型,将文档直接转换为模型的 lora 权重参数,附加到模型上,在 0 context 下也能回答相关问题。 两个核心: 1. Frozen target LLM:回答问题的模型,参数冻结,附加 lora 用于回答。 2. D2L Hypernetwork:核心,输入是文档,输出是一组 LoRA 参数,通过大量文档训练。 复现结果(SQuAD 100样本,normalized recall):D2L Recall 0.8313,Base Recall 0.9315,Normalized Recall 0.892(论文:0.85-0.90),复现成功。
显式记忆:RAG¶
RAG 是本文的对照基线。流程三步:离线建索引(语料分块,embedding 模型向量化,存入 FAISS IndexFlatIP)、在线检索(query 向量化,取 top-k 最近邻文档)、生成回答(检索到的文档拼接进 prompt,LLM 输出答案)。 本文配置:Qwen3-Embedding-4B + Qwen3-4B-Instruct + FAISS IndexFlatIP,检索 top-5,每条文档截断至 1500 字,未使用 reranker。 复现结果:HotpotQA LLM Score 3.815(高于论文 3.179)。
实验结果¶
实验一:MSA vs RAG 全量对比¶
HotpotQA(1000题,多跳推理问答): | 方法 | LLM Score | 原论文 | |------|-----------|--------| | MSA | 4.172 | 4.061 | | RAG | 3.815 | 3.179 | 小说 QA(蛊真人,7.95M 字,296题): | 方法 | 整体 | Easy | Medium | Hard | |------|------|------|--------|------| | RAG-CN | 2.152 | 2.449 | 2.000 | 1.887 | | MSA-EN | 1.574 | 1.678 | 1.411 | 1.648 |
实验二:MSA vs RAG vs D2L 受控三方对比¶
HotpotQA(200题): | 方法 | 2K | 4K | 8K | 均值 | |------|-----|-----|-----|------| | RAG | 4.125 | 4.215 | 4.225 | 4.188 | | MSA | 4.460 | 4.440 | 4.260 | 4.387 | | D2L | 1.810 | 1.490 | 1.435 | 1.578 | 小说 QA(131题): | 方法 | 整体 | Easy | Medium | Hard | |------|------|--------|--------|------| | RAG | 3.840 | 4.419 | 3.986 | 2.935 | | MSA | 2.802 | 3.194 | 2.870 | 2.258 | | D2L | 0.656 | 0.645 | 0.594 | 0.806 |
延迟与资源消耗¶
| 方法 | 延迟 | 特点 |
|---|---|---|
| RAG | ~2249ms | 稳定,LLM 生成是瓶颈 |
| D2L | ~4007ms | 较高,document→LoRA 编码耗时 |
| MSA | ~9448ms | 最高,两轮生成 + KV 加载 |
深度分析¶
三种范式的根本取舍¶
三种 Memory 方案代表了三种截然不同的信息存储与检索范式,其核心差异在于信息压缩率与信息保真度的权衡。 隐式记忆(MSA)将 KV cache 作为记忆载体,通过 chunk-level mean pooling 实现 64 倍的压缩比。这种设计在需要"主旨匹配"的场景(如知识问答、多跳推理)中表现优异,因为模型在预训练中已经学会了从压缩表征中提取语义核心。然而,当任务需要"精确回溯"——如小说中某个角色的具体言行、上下文的细微转折——压缩造成的信息稀释就成了瓶颈。MSA 论文原文的消融实验也印证了这一点:禁用原始文本注入后整体得分下降 37.1%,阅读理解任务(DuReader)更下降 46.2%。 参数记忆(Doc-to-lora)试图用模型权重本身存储信息,这是最激进的有损压缩——文档被转换为 LoRA 权重参数,信息密度最低。实验结果揭示了一个关键问题:D2L 实际上记住的是"知识风格"而非"知识本身"。gold 答案字符串只出现在 32% 的输出中(RAG 为 76%),且信息越多表现越差(2K→8K 得分从 1.810 降至 1.435)。这说明参数空间根本无法承载细粒度的事实性记忆。 显式记忆(RAG)通过外挂文本库实现近乎无损的信息存储,以检索精度换取记忆保真度。在需要精确回溯的场景(小说情节、多轮对话上下文)中,它反而优于 MSA。这也揭示了 Memory 方案选择的核心矛盾:扩展性(能存多少)与保真度(记得多准)不可兼得。
场景适配性规律¶
从实验数据中可以提炼出一个实用的场景适配矩阵: | 场景特征 | 推荐方案 | 原因 | |----------|----------|------| | 需要多跳推理、跨文档关联 | MSA | 压缩表征仍保留主旨信号 | | 需要精确回溯、细节还原 | RAG | 无损存储,检索即还原 | | 追求零context推理 | D2L | 方向错误,不推荐生产使用 | | 延迟敏感、需快速响应 | RAG | 延迟最低,架构简单 | | 超大规模语料库(100M+ tokens) | MSA | 架构原生支持扩展 |
信息有损的本质¶
三种方案都在做不同程度的"信息抽象":RAG 的有损环节在 embedding 化和截断(1500字限制),MSA 在 chunk-level pooling,D2L 在文档→权重参数的映射。三者并非简单的优劣之分,而是对应了不同的"记忆粒度"需求——这与人类记忆中的工作记忆、短时记忆、长期记忆的层次化分工有异曲同工之处。
实践启示¶
1. 按任务类型选择 Memory 范式¶
不要试图用一种方案解决所有问题。知识密集型的问答系统优先考虑 MSA 或 RAG;需要精确上下文还原的场景(如代码库问答、合同审查)选 RAG;D2L 目前不推荐用于生产环境。
2. RAG 是目前最稳定的基线¶
在延迟、精度、实现复杂度三个维度上,RAG 综合得分最高。如果不确定选什么,从 RAG 开始是明智的。
3. MSA 适合扩展性优先的场景¶
当语料库规模超过模型上下文窗口(如 100M tokens 级别),MSA 的架构优势显现。其稀疏注意力机制避免了 full attention 的平方复杂度,适合超长记忆场景。
4. 避免 D2L 的幻觉陷阱¶
D2L 看似优雅的"0 context 回答"实际上是以高幻觉率为代价的。如果必须使用参数记忆,考虑将其作为辅助信号而非唯一来源,而非替代 RAG。
5. 考虑混合架构¶
未来的 Memory 系统可能是分层的:RAG 提供精确细节检索,MSA 提供语义层面的快速匹配,参数记忆(如微调)提供任务特定的行为模式。三者的融合可能是下一代 Agent Memory 的方向。
相关实体¶
- 深度解析LLM Wiki / Obsidian-Wiki / GBrain:Agent时代知识的"自组织"与"自进化"
- Skills赏析:使用skills-refiner提升skill质量
- 企业级AI记忆基质三层架构:事实/交互/行动记忆
- SkillClaw
- Agent 自我改进的六条路
- Skill 系统:Agent 如何把经验沉淀成可复用能力
- GBrain
- Demis Hassabis YC 专访:AGI / 记忆 / Agent / 创造性观点集
- OpenHuman: AI Agent 持久记忆框架
- Karpathy LLM Wiki V2
- MOC