零、写在前面
读这篇论文之前,读了一篇方法稍显复杂,可解释性差,故事性较强的工作,认真拜读几个小时get不到它的点,去翻 github 仓库,源码也没放,就放了模型权重和测试脚本。
搞得整个人挺累的,想了想自己最近读了这么多 memory 的文章,感觉各种牛鬼蛇神都见了,有时候都不明白为什么方法没一点泛用性,纯讲故事的文章都能中。
看到 xMemory 这篇论文突然有点释怀了的感觉~~(此处应有关羽之歌~~
这个工作的 motivation 的出发点就是,现在这么多 memory 的工作,提出那么多的记忆存储架构,实则收益极低,全是讲故事。主要也是之前的 benchmark 像 LOCOMO、LongMemEval 质量真不敢恭维,随便一个 rag 都能刷到很高,要不说 agent memory 灌水严重呢。
所以这篇论文的关注点就是检索,做了一个比较直观的记忆结构整理,以及配套的检索方式。个人感觉如果暂时找不到一种比较 work 的存储架构的话,如何做好检索也是一个不错的方向。
一、标题

作者团队来自伦敦国王学院NLP组
Beyond RAG for Agent Memory 的主张是:标准 RAG 面对长对话记忆时,有一个结构性错配。
不少 memory agent 仍是标准 RAG:chunks → 向量化 → 相似度 top-k → 拼上下文 → LLM 回答。
但“前提错位”:RAG 面向异质文档库,主要翻车是检索到不相关;而 Agent Memory 是有边界、连贯对话流,候选高度相关且近重复多。
作者提出 xMemory,遵循 decoupling before aggregation(先解耦、再聚合):
- 先从局部对话里拆出独立事实、属性、关系和状态更新;
- 再对这些细粒度证据做 group 聚合;
- 查询时先读取紧凑 group 与 component,只有 reader 仍不确定时才向下展开原始 segment 或 message。
按照《Memory in the Age of AI Agents: A Survey》的 Forms / Functions / Dynamics 框架:
- Form(形式):主要是外部 token-level memory(文本级记忆),但其结构是层级图式组织:原始 message 到 segment、component、group,并有 kNN 邻边与原文回指。
- Function(功能):以 factual / semantic memory(事实与语义)、episodic memory(情景事件) 为主,保存时间、关系、偏好和状态变化;不是 procedure 或 working memory 工作。
- Dynamics(动态):增量写入、attach、split、merge 和回溯重组。它比静态层级 RAG 更像会整理档案的 memory manager。
二、摘要
2.1 标准 RAG 为什么不适合 Agent Memory
标准 RAG 的典型问题是:能否从海量异质文档中找到相关资料。Agent Memory 的难点更细:一堆候选都相关时,如何找出真正区分答案的那条证据。
假设历史里有三段话:
- 1 月:Gina 说自己失去了 DoorDash 的工作。
- 3 月:Gina 说自己开了线上服装店。
- 4 月:Gina 说网店在做促销。
现在问:
Gina 是什么时候失去 DoorDash 工作的?
普通 RAG 会把这三段都视为和 “Gina + 工作 + 生意” 有关,top-k 可能把 3 月和 4 月的内容也一起拿回来。Reader LLM 看见大量“职业转型”信息,容易回答成“3 月左右”,或者答得含糊。
2.2 xMemory 的方案
不要直接从“整段叙事”里检索。先把叙事拆成更干净的证据单元,再找证据。
xMemory 从原始消息向上建立四层:
- Message:原始对话;
- Segment:时间和主题连续的局部事件;
- Memory component:从 segment 解耦出来的最小可复用事实、属性、约束、关系或状态更新;
- Group:相关 components 的高层聚合,用于快速进入证据区域。
检索时反向进行:先从 group / component 选出高层证据骨架,再在必要时回到其关联的 segment 和 message。
3.3 作者声称的贡献
- 提出 Agent Memory 与标准 RAG 之间的“高相关历史流”错配。
- 提出先解耦、后聚合、可修订的层级 memory structure。
- 提出两阶段检索:互补骨架选择,加上不确定性下降才展开的低层文本。
- 在 LoCoMo、PerLTQA 上同时提升回答质量与推理期 token 效率。
三、引言

3.1 相关不等于有区分度
普通向量检索追求 query 与文本块相似度。但对话记忆里多个段落常共享人名、职业、事件主题。答案却可能由微小差异决定:
- 精确日期;
- “之前”还是“之后”;
- 新偏好是否覆盖旧偏好;
- 一项数值;
- 两个同类事件的不同来源。
因此本文希望提高的不是广义 relevance,而是 evidence discrimination(证据区分) 与 evidence coverage(证据覆盖)。
3.2 层级摘要的问题
这个就比如我之前看过的 Memory OS、RGMem,记忆分层,然后向上压缩
已有层级 memory 常从原文向上逐层摘要。它们确实省 token,却容易在高层保留共同背景、模糊区别候选的细节。
作者的判断是:不能直接压缩聚合相似对话,应该先把“相似叙事中不同的事实”拆出来,再聚合这些事实。
所以作者的逻辑大概是这样的:
高度相似的长期对话历史
-> top-k 返回重复的相关片段
-> 逐层摘要会留下共同背景、模糊关键差异
-> 先解耦成单事实 evidence component
-> 再用 group 组织为紧凑且可重组的索引
-> 先选互补证据骨架,再仅在需要时展开原文
四、相关工作
4.1 RAG-style retrieval for Agent Memory
许多长期记忆系统将历史切成 chunks,再对 embedding 做 top-k。它简单且原文忠实,但在高相似对话中,top-k 容易被一个主题簇占满。xMemory 的首要改变是:主要检索对象不再是 raw chunk,而是经过解耦的 evidence component。
4.2 Hierarchical、graph-based 与 structured memory
Nemori、A-Mem、MemoryOS 等已经使用情景到语义层级、结构化 note、动态 links 或时间分层。xMemory 的区别如下:
| 方向 | 高层节点主要来自什么 | xMemory 的不同 |
|---|---|---|
| 渐进摘要层级 | 原文块或摘要逐层压缩 | 先从 segment 拆单事实 component,再聚合 component |
| Note / graph memory | 记忆条目和关联 | component 保留 segment 回指,group 会随新事件 split / merge |
| 时间分层 | 写入时间或生命周期 | 关注相似事件中的区分细节与证据覆盖 |
| xMemory | 解耦后的可复用证据单元 | 用覆盖式高层选择和熵下降展开服务检索 |
层级、动态 link、split / merge、top-down retrieval 都有前人。本文的创新应理解为:将先解耦、可回指、可重组、覆盖式骨架选择、不确定性展开整合为一条一致检索链。
4.3 Adaptive retrieval over dynamic memory
部分系统可以将新 memory 插入已有 cluster,但这和回头重组旧证据不同。xMemory 允许新 component 到来后触发 split / merge,改变既有 component 的 group 归属。
常见检索会固定 top-k 或固定邻居扩张。xMemory 特别强调:高层先选一个互补 backbone,而不是只选最相似节点;低层也不是固定加全文,而是用 reader 不确定性是否下降控制展开。
五、方法

5.1 overview
- 原始 messages
- 切为局部事件 segments
- LLM 从 segment 中提取 components
- components 聚合为 groups,维护 group / component kNN links
- 新证据进入时 attach,必要时 split / merge
- query
- Stage I:选互补 groups 和 components 作为 evidence backbone
- Stage II:segment / message 只有降低 reader 不确定性才展开
- reader LLM 基于最终 context 回答
5.2. 写入阶段:将原始对话整理成记忆
整个结构是:
原始消息 Message
↓
局部事件 Segment
↓
独立事实 Component
↓
高层主题组 Group
5.2.1 Message -> Segment

Message 是原始聊天消息。 系统先按主题、时间、意图连续性,把连续消息切成一个 segment(局部事件片段)。
比如:
1 月 20 日:
Gina:我这个月也失去了 DoorDash 的工作。
Jon:很遗憾听到这个消息……
这几轮会合成一个 segment,因为它们描述同一件局部事件。
为什么不能直接按固定长度 chunk 切?
因为固定长度切块可能把“谁、什么时候、发生什么”拆开。Segment 的任务是先尽量保住一个完整事件。
5.2.2 Segment -> Component
那么什么是解耦呢?
LLM 读一个 segment,抽出若干 memory component。每个 component 尽量只表达一条可独立使用的证据。
例如下面这段可抽成:
- 1 月:Gina 说自己失去了 DoorDash 的工作。
- 3 月:Gina 说自己开了线上服装店。
- 4 月:Gina 说网店在做促销。
Component A:
Gina previously worked at DoorDash.
Component B:
Gina lost her DoorDash job in January 2023.
Component C:
Gina opened an online clothing store in March 2023.
- Segment 是完整局部事件,保留上下文。
- Component 是从事件中拆出的、较小的“可检索事实”。
- Component 仍保留一个指针,能回到它来自哪个 segment。
所以之后查询“什么时候失业”,系统可以直接命中 Component B;如果需要核对原话,再沿指针回到 1 月的 segment 和原始消息。
5.2.2 Component -> Group
如果 component 数量很多,直接在数万个 component 中检索也不够高效。因此系统把相近 component 聚成 group(高层主题组)。
例如:
Group: Gina 的职业变化 - Component A: 曾在 DoorDash 工作 - Component B: 2023 年 1 月失去 DoorDash 工作 - Component C: 2023 年 3 月开线上服装店 - Component D: 之后为网店做促销Group 像文件夹,component 像文件夹里的索引卡,segment / message 像可回看的原始材料。
5.3 怎样决定 group 划分是否好
论文写了一个目标:
$$ f(P)=\operatorname{SparsityScore}(P)+\operatorname{SemScore}(P) $$这里 $P$ 是“所有 component 被怎样分组”的方案。
f(P) 是给不同分组方案打分的规则,用于决定是否值得 split 或 merge。
SparsityScore:不要出现巨型组
$$ \operatorname{SparsityScore}(P) = \frac{N^2}{K\sum_{k=1}^{K}n_k^2} $$其中:
- $N$:所有 component 数;
- $K$:group 数;
- $n_k$:第 $k$ 个 group 里有几个 component。
分母含 $n_k^2$,意味着某个组特别大时会被明显惩罚。
SemScore:组内要像,组间不要重复也不要完全孤立
$$ \operatorname{SemScore}(\mathcal{P})=\frac{1}{K} \sum_{k=1}^{K}\left(\frac{1}{n_{k}} \sum_{i \in C_{k}} \cos \left(\mathbf{x}_{i}, \boldsymbol{\mu}_{k}\right)\right) \cdot g\left(s_{k}\right), $$-
$x_i$:第 i 个 component 地 embedding
-
$\mu_k$:第 k 个 group 的 中心
-
$s_k=\max_{j\ne k}\cos(\boldsymbol\mu_k,\boldsymbol\mu_j)$,该 Group 的最近语义邻居相似度。
-
$$
g(s_k) = exp(-\frac{(s_k - \bar s)^2}{2\sigma^2}) \\
其中,\bar s=\operatorname{median}(\{s_k\})
$$
- 第 $k$ 个 Group 的最近邻关系,是否偏离了当前记忆结构的典型状态。
5.4 如何动态更新
每有新对话,先产生新 component,然后做三类操作。
5.4.1 Attach
新 component 到来后,找最相近的 group。
- 找余弦最相近的 group centroid,相似度高于 attachment threshold:放进已有 group。
- 不够像:新建 group。
论文默认 attachment threshold 是 0.6。
5.4.2 Split
若一个 group 过大或内部开始混杂,例如:
Group: 工作
- DoorDash 失业
- 网店创业
- Jon 的银行账户
- 买咖啡
- 健身计划
这显然已经不适合作为高层索引。
系统会在组内根据 component embedding 做局部聚类,提出几种拆法(分成两簇?三簇?),并选择让前述 $f(P)$ 增加最多的那一种。
5.4.3 Merge
如果某个 group 只有一个 component,且和邻居很接近,例如:
Group A: Gina 的网店促销
Group B: Gina 的线上服装店
单独维护 Group A 没意义,系统会尝试合并到 Group B。
论文实验中,关闭 split 和 merge 后,LoCoMo 的平均 F1 从 43.98 降到 38.59。完整系统里约 44.91% 的旧 component 会在后续写入时被重新分组。
这意味着它的“动态性”不是只追加记忆,而是:
后来的信息可以反过来改变系统如何组织之前的事实。
5.5 如何检索
这部分有两个阶段。
Stage I:先选高层证据骨架
Stage II:只有不确定时才展开低层原文
5.5.1 Stage I:high-level backbone selection
Stage I 主要在 Group / Component 层运行;
给定查询 $q$,系统先把它编码为向量 $e(q)$。
对 Group $G_k$,用其 centroid $\boldsymbol\mu_k$ 表示主题位置,则粗粒度相关性可以理解为:
$$ \operatorname{sim}(q,G_k) = \cos(e(q),\boldsymbol\mu_k) $$对 Component $c_i$,则是:
$$ \operatorname{sim}(q,c_i) = \cos(e(q),\mathbf x_i) $$候选会在 Group 层和 Component 层独立通过 embedding similarity 产生,再合并为高层候选集合:
$$ V = V_{\text{group}} \cup V_{\text{component}} $$还有一点:先命中的 Group 会带来其 kNN 邻居 Group 和关联 Component,使检索不只盯着一个“最像查询”的主题点。
论文默认的 Stage I candidate pool 是 20,kNN 邻域大小是 10。
令 $R\subseteq V$ 是当前已经被选入 backbone 的节点集合。
对每一个候选节点 $i\in V$:
- $N(i)$:节点 $i$ 在 kNN 图里的邻居;
- $w_{iu}>0$:节点 $i$ 到邻居 $u$ 的边权,通常就是它们的语义相似程度;
- $N(i)$ 代表“选了 $i$ 后,结构上能触及的相邻证据区域”。
当前 $R$ 已经覆盖到的节点是:
$$ C(R) = \left\{ u\in V \mid \exists r\in R,\ u\in \{r\}\cup N(r) \right\} $$意思是:
已选节点本身,以及它们的 kNN 邻居,都视为已经被当前 backbone 覆盖。
候选 $i$ 新带来的覆盖区域是:
$$ \Delta(i;R) = (\{i\}\cup N(i))\setminus C(R) $$即:
选 $i$ 以后,哪些节点是此前没有覆盖、现在第一次能覆盖到的?
如果 $i$ 的邻居几乎都已经被当前 backbone 覆盖,那么即便它和 query 很像,它带来的新增价值也很小。这就是 xMemory 压制近重复证据的关键。
选择公式?

其中:
| 项 | 含义 |
|---|---|
| $i$ | 当前考虑加入 backbone 的候选 Group 或 Component |
| $V\setminus R$ | 尚未被选中的候选 |
| $\Delta(i;R)$ | $i$ 能新增覆盖的节点 |
| $w_{iu}$ | $i$ 与新增覆盖节点 $u$ 的 kNN 边相似度 |
| $Z$ | 总候选覆盖权重,用于归一化 coverage 项 |
| $\tilde{s}(q,i)\in[0,1]$ | 归一化后的 query-node 相似度 |
| $i^\star$ | 本轮应加入 $R$ 的最佳节点 |
它由两部分相加:
$$ \underbrace{ \frac{\sum_{u\in\Delta(i;R)}w_{iu}}{Z} }_{\text{结构覆盖收益}} + \underbrace{ \tilde{s}(q,i) }_{\text{查询相关性}} $$第一项:选它以后,能新增覆盖多少尚未覆盖的、且语义关联较强的证据。
第二项:Query Relevance
其实可以写成伪代码:
R = ∅
重复:
对每个尚未选中的候选 i:
计算新增覆盖 Δ(i; R)
计算 coverage gain
加上 query relevance
选得分最高的 i*
R ← R ∪ {i*}
直到候选耗尽或达到检索预算
5.5.2 Stage II:adaptive text expansion.
Stage I 已找到“应该看哪里”,但 Component 是抽取后的原子陈述,可能不够支撑完整回答。
例如:
Component:
Gina 于 1 月失去 DoorDash 工作。
若问题只问“什么时候”,这可能足够;但若问题问:
“她失业后为什么决定开网店?”
就需要打开 Segment,查看时间、原因和前后对话。
Stage II 的原则是:
不要因为 Component 指向一个 Segment,就把整个 Segment 全塞进上下文。只有它真的降低 Reader 的不确定性,才展开。
不确定性 $U(C,q)$
令:
- $C$:当前已经给 Reader 的上下文;
- $q$:查询;
- $U(C,q)$:Reader 在给定 $C,q$ 后,对答案仍有多不确定。
论文实现中,若 Reader 能提供 token logits,使用下一答案 token 的预测熵:
$$ U(C,q) = H\bigl( p_\theta(\cdot\mid C,q) \bigr) $$展开为:
$$ U(C,q) = -\sum_{v\in\mathcal V} p_\theta(v\mid C,q) \log p_\theta(v\mid C,q) $$其中:
- $\mathcal V$:词表;
- $p_\theta(v\mid C,q)$:Reader 看到 query 和当前上下文后,输出下一个答案 token 为 $v$ 的概率;
- 熵越高:模型对“答案接下来该说什么”越没把握;
- 熵越低:模型的预测分布越集中。
注意,它不是让 LLM 自己说“我有 80% 把握”,而是直接使用模型 logits 算出的分布熵。
如果 最终 Reader 是不公开 logits 的 API 模型,论文会使用一个能输出 logits 的 proxy model 来估计 $U$。proxy 只负责“要不要展开这条文本”,最终答案仍由指定的 Reader 生成。
Segment 的边际不确定性下降
对候选 Segment $s$,论文定义:
$$ \Delta U(s\mid C,q) = U(C,q)-U(C\cup\{s\},q) \tag{5} $$含义非常直接:
- 先计算不给 Segment 时的困惑程度:$U(C,q)$;
- 再计算加入 Segment 后的困惑程度:$U(C\cup\{s\},q)$;
- 两者相减,得到该 Segment 带来的信息增益。
准入条件是:
$$ \Delta U(s\mid C,q)>0 $$即:
只有加入 $s$ 后,预测熵真的下降,才保留该 Segment。
若:
$$ \Delta U(s\mid C,q)\le0 $$说明该 Segment 没让模型更确定,甚至造成干扰,则不展开它。
Message 级的进一步展开
只有某个 Segment 已经被接受,其中的原始 Message 才有资格进一步被考虑。
对 Message $m$,完全使用相同规则:
$$ \Delta U(m\mid C,q) = U(C,q)-U(C\cup\{m\},q) $$准入条件同样是:$\Delta U(m\mid C,q)>0$
因此它不是:
命中 Component
→ 放入整个 Segment
→ 放入 Segment 的全部原始 Message
而是:
命中 Component
→ 测试 Segment 是否降低不确定性
→ 只对通过测试的 Segment 展开
→ 再测试其中哪些 Message 仍提供额外信息
停止条件为:$\forall s \text{ 或 } m,\quad \Delta U\le0$
也就是剩余文本不再带来正的信息增益时,停止继续扩展。
5.6 小结
这套设计的优点与局限:
优点:
- Stage I 用 coverage 防止 Top-$k$ 被相似背景反复占据;
- Stage II 不机械展开原文,减少 token 和噪声;
- Group/Component 给高效导航,Segment/Message 保留可追溯的原始证据;
局限:
- $\Delta U>0$ 只说明模型更自信,不等于模型更正确。模型可能因某段误导文本而错误地“更有把握”。
- Stage II 对每个候选 Segment/Message 都要额外做熵估计,存在额外前向计算。
- 当 Reader 没有 logits 时,proxy model 的熵不一定和最终 Reader 的真实不确定性一致。
六、实验
6.1 评测设置
-
LoCoMo:50 个多 session 对话,平均约 18K tokens、300 turns;报告 multi-hop、temporal、open-domain、single-hop 四类可回答问题。
-
PerLTQA:平均约 25K tokens 的个性化长期记忆,答案常为句子而非短 span。
-
指标:BLEU-1、token-level F1;PerLTQA 额外报告 ROUGE-L。
-
Reader / memory construction LLM:Qwen3-8B、Llama-3.1-8B-Instruct、GPT-5 nano;同一 backbone 同时做 memory construction 和回答。
-
Embedding:text-embedding-3-small;回答以 greedy decoding 生成。
-
Baseline:Full Memory、Naive RAG、LightMem、Nemori、A-Mem、MemoryOS。
6.2 LoCoMo 主结果

优势在 multi-hop 与 temporal 问题更明显,这和论文动机相符:这两类需要多条互补证据,或要在高度相似事件中识别时间差异。
6.3 PerLTQA:更长个性化记忆

Qwen3-8B 下,xMemory 的 BLEU、F1、ROUGE-L 都为表中最佳,且 token 最少。说明原则不仅适用于 LoCoMo 的多 session recall,也能迁移到更长、答案更自然的个性化 memory。
6.4 Retrieval-stage 消融

- Memory-only 已优于 Naive RAG,说明将 history 改造成 segment-component-group 结构本身有价值。
- Stage I 更善于高层选证据、压 token,但单独 F1 略低于 Memory-only,提示覆盖式骨架不能替代细节恢复。
- Stage II 靠不确定性引导展开获得更高回答质量,但单独 token 略多。
- Full 同时得到最高分、最低 token,说明两阶段互补:高层避重复,低层按需恢复细节。
6.5 Group size、动态重组与证据密度
Group size cap

作者使用 Fano-style routing argument 说明:候选集太大时,有限判别信号下路由错误增加;太小则相关事实被拆散。实证中每组 component 上限取 12 最佳,达到 34.48 BLEU、43.98 F1,实际平均每组 4.48 个 components。
Retroactive restructuring

关闭 split / merge 时,已有 components 永不重新归组:动态 reassignment ratio 为 0%,平均 F1 降至 38.59。完整系统有 44.91% 的既有 component 在后续插入中经历重新分组,平均 F1 为 43.98。
这说明可修订性不是装饰。新对话会改变旧事实应如何被高层组织。
Evidence density 与 coverage
LoCoMo 加 Qwen3-8B 中,要覆盖全部答案 evidence units,平均需要:

multi-hop 题中,xMemory 的 2-hit / multi-hit block 比例为 13.14% / 12.19%,Naive RAG 为 7.82% / 6.53%。这支持“不是只拿更少上下文,而是拿到更密集答案证据”的解释。

6.6 成本与效率

论文的 token / query 包含检索、回答和辅助调用,并且做了 memory construction 成本摊销后的 cost-performance 图。xMemory 的总体 trade-off 优于 Nemori、MemoryOS、A-Mem。
但应明确区分:
- Query-time:高层骨架和按需展开减少给 reader 的上下文。
- Construction-time:还需边界切分、LLM component 抽取、embedding、group 维护和 split / merge。
作者也承认:若记忆库建完后几乎不会被查询,简单 RAG 可能更划算。方法的收益取决于未来 query 数足以摊销整理档案成本。
七、总结
7.1 贡献
xMemory 的核心不是多做一层摘要,而是改变 Agent Memory 的主要检索单元:
不直接在相似的长叙事片段之间比谁更像 query,而是先将叙事拆成可独立比较的最小证据,再用可修订层级把它们组织和检索出来。
从 Agent Memory 角度,它形成一个比较完整的 write-organization-read 闭环:
- 写入:切 segment、抽 component;
- 组织:group、kNN、attach、split、merge;
- 读取:覆盖式骨架选择,熵下降才向原文展开。
所以它比较侧重检索,但并非单纯 retrieval trick;它把检索质量前移到记忆写入后如何被组织的问题。
7.2 Novelty
首先是值得肯定的部分;
- 抓住 Agent Memory 与普通 RAG 的真实差别:历史不是异质文档库,而是高度相关、反复更新的连续流。
- “先解耦、后聚合”是清晰且可检验的原则,案例、消融和证据密度分析彼此呼应。
- Source-linked component 同时兼顾高层索引和回原文核对,系统设计完整。
- 覆盖式骨架选择加熵引导展开,让读写两端逻辑一致。
当然也有一些局限了:
- Hierarchical memory、note 抽取、动态链接、split / merge、top-down retrieval 都有前人;亮点在于这一套组合及其 evidence-oriented 目标。
- 高层分组由 embedding 和 LLM extraction 决定,优化目标无法保证 component 事实正确、完整或无冲突。
- 熵下降只是 reader-internal proxy,不等于证据真实、答案正确或文本一定有用。
7.3 启发。?
- Conflict-aware xMemory:在 component 中加入来源、时间、置信度与冲突边,让旧偏好和新偏好可显式 belief revision。
- Learned expansion policy:将 Stage II 从 entropy heuristic 改为对 QA 效用、token cost、calibration 共同优化的 policy,处理黑盒 reader 和 proxy mismatch。
- Verified component extraction:保留原文引用、支持 / 反驳 span 和事实校验,避免优雅层级建立在错误 memory 上。
- Multi-modal and tool memory:把 component 扩到图像、网页状态、代码执行结果和工具 provenance,验证原则是否能超越对话任务。
- Cost-aware maintenance:让 split / merge 频率随预期未来 query 数、更新速率与缓存状态改变,回答何时值得为检索成本付出整理成本。

说些什么吧!