PlugMem 论文解读:把 Agent 经历抽象成可复用知识图的插件式记忆模块
一句话定位:PlugMem 是 ICML 2026 的任务无关 Agent Memory 模块,把原始 episode 轨迹抽象成 propositional knowledge(事实命题)和 prescriptive knowledge(行动处方),再组织成知识中心记忆图,作为插件接到任意 LLM Agent 外部。
会议信息 :ICML 2026 Poster
GitHub / 实践项目 :TIMAN-group/PlugMem
Star 数 :约 131(截至 2026-05-21 附近公开信息)
开源状态 :官方实现,Apache-2.0
适合读者:想理解任务无关 Agent Memory、知识图式记忆、经验到知识抽象,以及给现有 Agent 外挂长期记忆模块的工程师和研究者。
文章导读
PlugMem 的关键不是"再做一个向量库",而是把 Agent 过去的经历转成更高密度的知识单元。它认为原始轨迹只是证据,真正对未来决策有用的是两类知识:事实命题和行动处方。前者回答"知道什么",后者回答"怎么做"。系统再把这些知识组织成图,在新任务来时检索相关子图,并压缩成短的行动建议给基础 Agent。
如果只想快速看结论,可读短文:plugmem-brief.md。
1. 核心结论
- PlugMem 的目标是 task-agnostic plugin memory:不为单个 benchmark 定制,也不要求重写 Agent 主流程。
- 它不把 raw trajectory 直接当记忆给 Agent 读,而是先抽象成知识。
- 它显式区分三类记忆:episodic memory 是证据,semantic memory 是事实命题,procedural memory 是行动处方。
- 它的图不是普通实体图,也不是 chunk graph,而是 knowledge-centric memory graph,节点单位是 proposition / prescription。
- 检索过程先用 embedding 找低层知识节点,再通过 concept / intent 这类高层节点扩展相关知识。
- reasoning module 会把召回知识再压缩成行动提示,避免把大图或长轨迹塞进上下文。
- 实验覆盖 LongMemEval、HotpotQA、WebArena,说明同一套模块能跨长对话、多跳知识检索和网页 Agent 任务复用。
2. 论文信息速览
| 项目 | 内容 |
|---|---|
| 标题 | PlugMem: A Task-Agnostic Plugin Memory Module for LLM Agents |
| 会议 | ICML 2026 Poster |
| arXiv | 2603.03296 |
| 作者 | Ke Yang、Zixi Chen、Xuan He、Jize Jiang、Michel Galley、Chenglong Wang、Jianfeng Gao、Jiawei Han、ChengXiang Zhai |
| 代码 | TIMAN-group/PlugMem |
| 核心对象 | LLM Agent 的长期记忆模块 |
| 核心主张 | 决策相关信息主要存在于抽象知识中,而不是冗长原始经历中 |
| 主要评测 | LongMemEval、HotpotQA、WebArena |
3. 它要解决什么问题
LLM Agent 需要长期记忆,但现有方案常卡在两个方向。
第一类是 任务特化记忆。
这类方法常为某个任务写特定 memory pipeline。例如长对话 QA 里偏用户事实,网页 Agent 里偏操作轨迹,代码 Agent 里偏工具日志。它们在单个 benchmark 上可能有效,但换任务后通常要重写"存什么、怎么查、怎么用"。
第二类是 任务无关但粗糙的记忆。
典型做法是 raw retrieval 或 RAG:把所有过去经历切成 chunk,查询时按相似度召回。这很通用,但问题是:
- 原始轨迹太长,token 成本高;
- 真正有用的信息很稀疏;
- 召回片段常带大量低层噪音;
- 历史经历不等于未来决策知识;
- WebAgent、长对话、多跳检索需要的记忆类型不一样。
PlugMem 的问题定义是:
能不能做一个不绑定具体任务的记忆模块,同时让召回内容足够短、足够抽象、足够和当前决策相关?
4. 核心思想:Memory to Knowledge
论文借用认知科学里的区分:
- episodic memory:具体经历,类似"我曾经做过什么、看见什么、说过什么";
- semantic memory:事实知识,类似"知道什么";
- procedural memory:流程知识,类似"知道怎么做"。
PlugMem 的判断是:Agent 过去经历本身不是最适合被直接读的记忆。它应该先被抽象成两类更有决策价值的知识:
| 类型 | 中文理解 | 例子 | 作用 |
|---|---|---|---|
| Episodic memory | 原始经历 / 证据层 | 一段对话、网页操作轨迹、文档片段 | 用来验证知识来源 |
| Propositional knowledge | 事实命题 | 用户不吃乳制品;某人物住在某地 | 支持事实召回和判断 |
| Prescriptive knowledge | 行动处方 | 购物时先搜索、再排序、再核对价格 | 支持任务执行策略 |
一句话说:
PlugMem 不想让 Agent 重读历史,而是让 Agent 直接复用从历史中抽象出的事实和做法。
5. 总体架构:Structuring → Retrieval → Reasoning
PlugMem 由三块组成。
渲染错误: Mermaid 渲染失败: Parse error on line 3: ...抽取知识"] struct --> graph["Knowledge-Cen ----------------------^ Expecting 'AMP', 'COLON', 'PIPE', 'TESTSTR', 'DOWN', 'DEFAULT', 'NUM', 'COMMA', 'NODE_STRING', 'BRKT', 'MINUS', 'MULT', 'UNICODE_TEXT', got 'GRAPH'
1. Structuring Module
负责把不同来源的原始经历变成统一格式,再抽取知识。
输入可能是:
- 用户和 Agent 的对话;
- 文档片段;
- 网页导航轨迹;
- 工具调用记录;
- 观察和动作序列。
输出是三类互相连接的图:
- episodic graph;
- semantic graph;
- procedural graph。
2. Retrieval Module
负责从图里找到当前任务相关的知识。它不是只做向量 top-k,而是结合低层知识节点和高层抽象节点做多跳检索。
3. Reasoning Module
负责把召回的知识进一步整理成短的行动指导。因为召回图里可能有重复、冗余或不适合直接塞给 Agent 的信息,需要再压缩。
6. 三张图怎么存记忆
Episodic Graph:证据层
原始轨迹会被标准化成一步步的记录。论文里把每一步表示成观察、状态、动作、奖励和子目标等元素。
它的作用不是直接让 Agent 每次重读,而是作为"证据锚点"。
当某条命题或处方被质疑时,可以回到对应 episode,看这条知识来自哪段真实经历。
Semantic Graph:事实命题层
从 episode 中抽取原子事实,形成 proposition。
例如:
text
User prefers vegetarian meals.
Tam Sventon is a fictional private detective based in Stockholm.
The project uses SQLite as the default local backend.
每条 proposition 会关联若干 concept。concept 像轻量索引,帮助检索定位相关事实。
结构可以理解成:
#mermaid-svg-L9g4JZk2UN6XaG55{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-L9g4JZk2UN6XaG55 .error-icon{fill:#552222;}#mermaid-svg-L9g4JZk2UN6XaG55 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-L9g4JZk2UN6XaG55 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-L9g4JZk2UN6XaG55 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-L9g4JZk2UN6XaG55 .marker.cross{stroke:#333333;}#mermaid-svg-L9g4JZk2UN6XaG55 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-L9g4JZk2UN6XaG55 p{margin:0;}#mermaid-svg-L9g4JZk2UN6XaG55 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-L9g4JZk2UN6XaG55 .cluster-label text{fill:#333;}#mermaid-svg-L9g4JZk2UN6XaG55 .cluster-label span{color:#333;}#mermaid-svg-L9g4JZk2UN6XaG55 .cluster-label span p{background-color:transparent;}#mermaid-svg-L9g4JZk2UN6XaG55 .label text,#mermaid-svg-L9g4JZk2UN6XaG55 span{fill:#333;color:#333;}#mermaid-svg-L9g4JZk2UN6XaG55 .node rect,#mermaid-svg-L9g4JZk2UN6XaG55 .node circle,#mermaid-svg-L9g4JZk2UN6XaG55 .node ellipse,#mermaid-svg-L9g4JZk2UN6XaG55 .node polygon,#mermaid-svg-L9g4JZk2UN6XaG55 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-L9g4JZk2UN6XaG55 .rough-node .label text,#mermaid-svg-L9g4JZk2UN6XaG55 .node .label text,#mermaid-svg-L9g4JZk2UN6XaG55 .image-shape .label,#mermaid-svg-L9g4JZk2UN6XaG55 .icon-shape .label{text-anchor:middle;}#mermaid-svg-L9g4JZk2UN6XaG55 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-L9g4JZk2UN6XaG55 .rough-node .label,#mermaid-svg-L9g4JZk2UN6XaG55 .node .label,#mermaid-svg-L9g4JZk2UN6XaG55 .image-shape .label,#mermaid-svg-L9g4JZk2UN6XaG55 .icon-shape .label{text-align:center;}#mermaid-svg-L9g4JZk2UN6XaG55 .node.clickable{cursor:pointer;}#mermaid-svg-L9g4JZk2UN6XaG55 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-L9g4JZk2UN6XaG55 .arrowheadPath{fill:#333333;}#mermaid-svg-L9g4JZk2UN6XaG55 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-L9g4JZk2UN6XaG55 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-L9g4JZk2UN6XaG55 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-L9g4JZk2UN6XaG55 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-L9g4JZk2UN6XaG55 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-L9g4JZk2UN6XaG55 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-L9g4JZk2UN6XaG55 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-L9g4JZk2UN6XaG55 .cluster text{fill:#333;}#mermaid-svg-L9g4JZk2UN6XaG55 .cluster span{color:#333;}#mermaid-svg-L9g4JZk2UN6XaG55 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-L9g4JZk2UN6XaG55 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-L9g4JZk2UN6XaG55 rect.text{fill:none;stroke-width:0;}#mermaid-svg-L9g4JZk2UN6XaG55 .icon-shape,#mermaid-svg-L9g4JZk2UN6XaG55 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-L9g4JZk2UN6XaG55 .icon-shape p,#mermaid-svg-L9g4JZk2UN6XaG55 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-L9g4JZk2UN6XaG55 .icon-shape .label rect,#mermaid-svg-L9g4JZk2UN6XaG55 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-L9g4JZk2UN6XaG55 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-L9g4JZk2UN6XaG55 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-L9g4JZk2UN6XaG55 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Concept
vegetarian meals
Proposition
User prefers vegetarian meals
Source Episode
原始对话或轨迹
这里 concept 不是最终返回的主要内容,而是帮助路由到相关 proposition。
Procedural Graph:行动处方层
从 trajectory 中抽取可复用流程,形成 intent 和 prescription。
intent 表示目标,prescription 表示怎么做。
例如:
text
Intent: find the lowest price of an item.
Prescription: search for the item, sort results by price, then verify the minimum across variants.
结构可以理解成:
#mermaid-svg-JgT98PNOhgFvAEs9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JgT98PNOhgFvAEs9 .error-icon{fill:#552222;}#mermaid-svg-JgT98PNOhgFvAEs9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JgT98PNOhgFvAEs9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JgT98PNOhgFvAEs9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JgT98PNOhgFvAEs9 .marker.cross{stroke:#333333;}#mermaid-svg-JgT98PNOhgFvAEs9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JgT98PNOhgFvAEs9 p{margin:0;}#mermaid-svg-JgT98PNOhgFvAEs9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JgT98PNOhgFvAEs9 .cluster-label text{fill:#333;}#mermaid-svg-JgT98PNOhgFvAEs9 .cluster-label span{color:#333;}#mermaid-svg-JgT98PNOhgFvAEs9 .cluster-label span p{background-color:transparent;}#mermaid-svg-JgT98PNOhgFvAEs9 .label text,#mermaid-svg-JgT98PNOhgFvAEs9 span{fill:#333;color:#333;}#mermaid-svg-JgT98PNOhgFvAEs9 .node rect,#mermaid-svg-JgT98PNOhgFvAEs9 .node circle,#mermaid-svg-JgT98PNOhgFvAEs9 .node ellipse,#mermaid-svg-JgT98PNOhgFvAEs9 .node polygon,#mermaid-svg-JgT98PNOhgFvAEs9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JgT98PNOhgFvAEs9 .rough-node .label text,#mermaid-svg-JgT98PNOhgFvAEs9 .node .label text,#mermaid-svg-JgT98PNOhgFvAEs9 .image-shape .label,#mermaid-svg-JgT98PNOhgFvAEs9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-JgT98PNOhgFvAEs9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JgT98PNOhgFvAEs9 .rough-node .label,#mermaid-svg-JgT98PNOhgFvAEs9 .node .label,#mermaid-svg-JgT98PNOhgFvAEs9 .image-shape .label,#mermaid-svg-JgT98PNOhgFvAEs9 .icon-shape .label{text-align:center;}#mermaid-svg-JgT98PNOhgFvAEs9 .node.clickable{cursor:pointer;}#mermaid-svg-JgT98PNOhgFvAEs9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JgT98PNOhgFvAEs9 .arrowheadPath{fill:#333333;}#mermaid-svg-JgT98PNOhgFvAEs9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JgT98PNOhgFvAEs9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JgT98PNOhgFvAEs9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JgT98PNOhgFvAEs9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JgT98PNOhgFvAEs9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JgT98PNOhgFvAEs9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JgT98PNOhgFvAEs9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JgT98PNOhgFvAEs9 .cluster text{fill:#333;}#mermaid-svg-JgT98PNOhgFvAEs9 .cluster span{color:#333;}#mermaid-svg-JgT98PNOhgFvAEs9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JgT98PNOhgFvAEs9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JgT98PNOhgFvAEs9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-JgT98PNOhgFvAEs9 .icon-shape,#mermaid-svg-JgT98PNOhgFvAEs9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JgT98PNOhgFvAEs9 .icon-shape p,#mermaid-svg-JgT98PNOhgFvAEs9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JgT98PNOhgFvAEs9 .icon-shape .label rect,#mermaid-svg-JgT98PNOhgFvAEs9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JgT98PNOhgFvAEs9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JgT98PNOhgFvAEs9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JgT98PNOhgFvAEs9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Intent
find lowest price
Prescription
search, sort, verify variants
Source Episode
过去网页操作轨迹
这对 WebAgent、工具 Agent、Coding Agent 很有价值,因为很多经验不是"事实",而是"做法"。
7. 检索是怎么做的
PlugMem 的检索核心是 abstraction-aware retrieval,可以理解成"低层知识节点 + 高层抽象节点"交替使用。
一次查询大概这样跑:
- 输入当前任务或 query。
- 先判断当前更需要哪种记忆:事实、流程,还是原始经历。
- 把 query 编码成 embedding。
- 先和低层节点匹配,也就是 proposition 或 prescription。
- 生成抽象查询:对 semantic graph 来说是 concepts,对 procedural graph 来说是 intents。
- 用 concept / intent 这些高层节点扩展相邻的低层知识节点。
- 如果候选太多,就按相关性和重要性重排、剪枝。
- 重复若干 hop,直到拿到足够证据或达到 hop 上限。
它和普通向量 top-k 的区别是:
- 普通向量检索只找相似片段;
- PlugMem 先找相关知识,再借助 concept / intent 扩展到更多相关知识;
- 高层节点不一定直接返回,它们更像路由器;
- 最后主要返回可直接用的 proposition / prescription。
8. Reasoning Module:为什么还要再压缩
检索出来的知识不一定能直接给 Agent 用。
可能的问题包括:
- 多条知识重复;
- 同一任务下召回了多个相似流程;
- 某些知识太细;
- 某些知识只对证据验证有用,不该进主上下文;
- 当前任务只需要一条行动建议。
所以 PlugMem 用 reasoning module 把召回结果压成短提示。
它的作用不是重新生成答案,而是把记忆转换成当前 Agent 可消费的行动上下文。
例如,从多个网页购物轨迹里压成:
To compare item prices, first search by exact item name, then sort by price, open top candidates, and verify variants before choosing the minimum.
这样比塞入十几页网页轨迹更便宜,也更有用。
9. 实验结果怎么读
PlugMem 用同一套模块评估三类任务。
| Benchmark | 任务类型 | PlugMem 关注点 |
|---|---|---|
| LongMemEval | 长对话问答 | 从长期对话里找事实 |
| HotpotQA | 多跳知识检索 | 从知识图中找相关命题 |
| WebArena | 网页 Agent | 复用程序性操作经验 |
LongMemEval
代表结果:
| 方法 | Accuracy | 平均 memory tokens |
|---|---|---|
| All Context | 62.4 | 107K |
| Vanilla Retrieval | 63.6 | 3742.52 |
| A-Mem | 61.0 | 4225.85 |
| PlugMem | 75.1 | 362.58 |
这说明 PlugMem 在长对话问答里不是靠塞更多上下文,而是靠更高密度的知识表示。
HotpotQA
代表结果:
| 方法 | EM | F1 | 平均 memory tokens |
|---|---|---|---|
| Vanilla Retrieval | 51.7 | 62.7 | 659.2 |
| GraphRAG | 55.2 | 68.6 | - |
| HippoRAG2 | 60.0 | 73.3 | 595.1 |
| PlugMem | 61.4 | 74.1 | 81.6 |
在多跳知识检索里,PlugMem 比普通检索和若干图检索方法更省 token。
WebArena
代表结果:
| 方法 | Shopping offline SR | GitLab offline SR | 平均 memory tokens |
|---|---|---|---|
| Vanilla Retrieval | 42.3 | 41.3 | 8733 |
| A-Mem | 44.3 | 38.5 | 20516 |
| PlugMem | 58.4 | 55.2 | 301 |
WebArena 说明 procedural knowledge 很重要。Agent 不只需要事实,还需要"怎么做"的经验。
10. 信息密度指标:为什么论文强调 bits / token
PlugMem 不只报告准确率,还提出一个信息论视角:Memory Information Density。
直观说,它想衡量:
每消耗一个 memory token,给 Agent 决策带来多少有用信息?
这很适合评估 Agent Memory,因为一个 memory 系统不能只看"效果有没有涨",还要看"塞了多少 token 才涨"。
All Context 可能信息全,但成本极高。
普通 Retrieval 成本低一些,但召回噪声多。
PlugMem 的目标是:用更少 token 提供更高决策增益。
11. 消融实验说明什么
论文消融显示:
- 去掉 retrieval,性能掉得最明显;
- 去掉 structuring,检索质量变差;
- 去掉 reasoning,token 成本大幅上升;
- retrieval 决定记忆是否能被用上;
- structuring 决定什么东西能被检索;
- reasoning 决定召回知识能否高效被消费。
可以总结成一句话:
检索是瓶颈,结构决定检索上限,reasoning 决定 token 效率。
12. 和其他方案的区别
| 方案 | 主要单位 | PlugMem 的差异 |
|---|---|---|
| 普通 RAG | 文本 chunk | PlugMem 抽取命题和处方,而不是直接取 chunk |
| GraphRAG | 实体和关系 | PlugMem 的图节点是知识单元,不是实体本身 |
| Mem0 | 用户/会话记忆事实 | PlugMem 更研究化,强调跨任务知识图和 procedural memory |
| A-MEM | 原子笔记 + 链接演化 | PlugMem 更强调 propositional / prescriptive 两类知识 |
| ProcMEM | 程序性记忆 | PlugMem 不只存流程,也存事实和证据 |
| OpenViking | 上下文文件系统 | PlugMem 是插件式记忆图,不是资源/技能目录系统 |
13. 适合的场景
- 希望给现有 Agent 外挂长期记忆,而不是重写 Agent;
- 任务类型多,既有对话、知识检索,也有工具或网页操作;
- 想把经验沉淀成事实、规则、流程;
- 需要保留原始经历作为 provenance;
- 希望减少记忆注入 token;
- 想研究 task-agnostic Agent Memory。
14. 不适合的场景
- 只需要简单用户偏好存储;
- 只需要普通知识库问答;
- 不想依赖 LLM 抽取知识;
- 没有人审或清理机制,却担心错误知识污染;
- 需要成熟企业权限、多租户、审计和 UI;
- 只想用轻量 SDK,而不是研究型记忆图架构。
15. 工程落地建议
1. 保留 episode provenance
命题和处方都可能抽错。必须能回到原始 episode,否则知识图污染后很难修。
2. 区分事实和流程
不要把"用户喜欢什么"和"遇到什么问题怎么做"混在同一种记忆里。PlugMem 最值得借鉴的就是这两类知识分开组织。
3. 给知识节点加置信度和来源
每条 proposition / prescription 最好记录来源、生成模型、时间、使用次数、成功率。
4. 先接低风险任务
先在内部 QA、工具经验、网页操作 demo 上验证,不要一开始就把它用于高风险决策。
5. 配合人工编辑和删除
论文支持 create、retrieve、update、delete 的抽象操作,但企业落地还需要 UI、审计、冲突检测和过期策略。
16. 资源链接
一句话收尾:PlugMem 的价值不是让 Agent "记住更多历史",而是把历史抽象成可检索、可验证、可复用的事实和做法,让任意 Agent 都能用更少上下文拿到更有决策价值的记忆。