MemTool
Agent · 上下文工程 · arXiv 2025

MemTool:动态工具集的「短期记忆」,交给三种管理模式

工具库有 5,000 个 MCP server,平均每轮查询要调用 5 次工具,一次会话连续跑 100 轮;实验中统一的 128 工具上限很快会被撑爆。MemTool 用自治、工作流、混合三种模式决定「谁来决定删工具」:GPT-o3 自治模式的 3 轮移除率是 94.1%,Claude 3.5 Sonnet 只有 6.2%;工作流把 12 个有结果的模型(Claude 3.7 Sonnet 未报告 Workflow)的移除率全部压在 90.4% 以上,但任务完成度的上限也随之下降。

Elias Lumer、Anmol Gulati、Vamse Kumar Subbiah、Pradeep Honaganahalli Basavaraju、James A. Burke · PwC Commercial Technology and Innovation Office 原文 v1 ↗
TL;DR · 30 秒抓住核心

MemTool 把「工具上下文」当成短期记忆来管理,给出三种自主性不同的架构。Autonomous:agent 自己持有两个元工具 Search_Tools 与 Remove_Tools,在回答问题的循环里自行增删。Workflow:每轮用户查询后先做两次独立 LLM 调用——一次剪除无关工具,一次搜索新工具——之后 agent 在固定的工具集里回答,不再持有元工具。Hybrid:剪除仍由独立调用完成,但 agent 保留 Search_Tools,可以在循环里继续检索。

论文在 ScaleMCP 的 5,000 个 MCP server 上做了 100 轮连续查询,评测 13 个 LLM(Workflow 只有 12 行结果)。自治模式把模型能力差距放大:推理模型 3 轮移除率约 90–94%,中型模型只有 0–60%;工作流模式把 12 个模型全部拉到 90.4% 以上(Claude 3.7 Sonnet 未报告 Workflow),跨度只有 3.4 个点;混合模式介于两者之间,移除率 86.9–94.3%,任务完成度最高 0.88。代价是工作流和混合模式每轮要多一次(或两次)LLM 调用,而论文没有给出 token、延迟或费用的量化。

94.1%
GPT-o3 自治模式的 Avg Removal Ratio 3T;同模型工作流 92.5、混合 93.2
6.2%
Claude 3.5 Sonnet 自治模式的 3 轮移除率;混合模式升到 93.5
90.4%
工作流模式的最低移除率(GPT-4.1 Nano);Workflow 12 个模型全部 ≥ 90.4
01

工具只装不卸,上下文就会像一台没关后台的机器

读完这节你应该知道:动态工具调用为什么会把上下文撑爆,以及 128 这个数字从哪来。

论文把 LLM 比作 CPU、把上下文窗口比作 RAM:模型能调用的工具不是初始化时固定的一小组,而是按需从工具库里搜索、装载。实验用的 ScaleMCP 有 5,000 个 MCP server,平均每轮用户查询要调用 5.0 次工具;一次会话连续跑 100 轮。工具一旦装进 API 请求的 tools 字段,就会一直占着上下文,除非有人显式删除。

问题在于 LLM 的默认行为是「加」而不是「减」:它会在需要时搜索新工具,却很少主动判断哪些旧工具已经没用了。论文把工具上限统一设为 128 并作为 API error limit:Gemini 2.5 Pro、Claude Opus 4 的 API 本身支持 256–512 个工具,但为了横向比较,所有模型都按 128 计。Figure 2 里,LLaMA 3 70B 与 Claude 3.5 Sonnet 在第 20 轮左右就撞上 128;一旦撞线,再搜索新工具会返回错误,agent 只能先删再搜。

规模

5,000 个 MCP server

工具库来自 ScaleMCP,按每轮工具调用数分层抽样 100 个实例,构成 100 轮连续对话。§3.2

频率

平均每轮 5 次调用

用户查询之间可以相关,也可以完全无关;每轮平均触发 5 次工具调用,工具集跨轮持久化。§4.1

上限

128 个工具

统一设定为 128;论文注明 Gemini 2.5 Pro / Claude Opus 4 的 API 可容纳 256–512 个工具,但实验中不用满。§4.1

02

工具 RAG 只解决「找得到」,没解决「什么时候卸」

读完这节你应该知道:MemTool 与工具检索、上下文压缩、长期记忆三条线各自的分工。

路线 A

工具检索 / 动态发现

ScaleMCP 这类工作把工具或 MCP server 建成向量库,按用户查询检索 top-k 工具并注入上下文,解决的是「在成千上万个工具里找到当下要用的那几个」。它默认一次查询结束就结束,不处理工具在多轮对话里持续堆积的问题。

§2.2

路线 B

上下文压缩 / 长期记忆

摘要与截断主要压缩对话历史,省的是消息 token,不会主动移除已经注入 tools 字段的工具 schema;Mem0、Zep、Letta 等长期记忆框架关注跨会话持久化,也不是「本次会话内工具集怎么增删」。

§2.1

MemTool 把这两条线之间空出来的问题定义成「短期工具记忆」:工具集 T 本身是一个需要被读写的状态,每轮都要决定保留谁、删除谁、检索谁。论文的三种模式,本质上是在「谁来执行删除」上给出三种答案:agent 自己、固定工作流、或两者各做一半。

03

三种模式:谁掌握删除权,决定了可靠性从哪来

读完这节你应该知道:三种模式的调用结构、各自能做什么与不能做什么,以及论文对「模型能力」的判断。

§3.1 的三种模式;「谁移除」「谁添加」按 Algorithm 1–3 归纳。
模式谁移除工具谁添加工具自主性主要风险
Autonomousagent 调 Remove_Toolsagent 调 Search_Tools最高不会删或忘了删,工具数撞上 128
Workflow独立的 prune LLM 调用独立的 search LLM 调用最低进入回答循环后无法再检索新工具
Hybrid独立的 prune LLM 调用agent 调 Search_Tools部分agent 看不到删除,可能加得过多;再剪除可能误删

3.1 Autonomous:两个元工具交给 agent 自己

Autonomous 模式给 agent 两个额外工具:Search_Tools(keywords) 负责向向量库检索并加入工具,Remove_Tools(tool_names) 负责把不再相关的工具从 API 调用里移除。agent 在同一个 while 循环里边回答边管理工具,删除与搜索的调用和结果都会写回消息历史。论文报告了一个关键工程细节:如果 system prompt 不注入「当前工具数量」这个动态变量,agent 的移除率会变得很差;把数量显式告诉它之后,删除行为才稳定。§3.1.1

搜索结果的检索深度是 top-5,工具上限 L=128;如果一次 Search_Tools 让工具总数超过 128,系统返回错误并提示 agent 先删除。消息历史本身可以用截断或摘要管理,但这只压缩对话,不影响工具集。Algorithm 1

3.2 Workflow:先剪除,再搜索,最后才让 agent 回答

Workflow 模式把工具管理从 agent 循环里拿出来,固定在每轮用户查询之后:第一次独立 LLM 调用读取当前消息与工具列表,决定删除哪些工具;第二次独立调用判断现有工具是否够用,不够就生成检索关键词;向量检索取 top-5 后并入工具集。之后 agent 进入与自治模式相同的回答循环,但它不再持有 Search_Tools 或 Remove_Tools,无法在循环中自行增删。Algorithm 2

这个设计的确定性最强:同一套 prune-then-search 管线约束所有模型,工具数不容易失控。代价是「进入回答循环后没有回头路」——如果第一次检索选错工具,agent 不能在循环里重新搜索;论文也明确说,限制自主性会阻止自我纠错,而把自纠错步骤塞进工作流会让流程过于复杂。§3.1.2

3.3 Hybrid:删除外部化,搜索留给 agent

论文观察到 LLM 在「搜索和添加工具」上表现较好、在「移除工具」上普遍较弱,于是把两者拆开:每轮开始先做一次独立的 prune LLM 调用,删掉不再相关的工具;随后 agent 拿到 Search_Tools(但不含 Remove_Tools),可以在回答循环里继续检索。agent 对「删除」这件事是被抽象掉的——它看不到 prune 调用,也不参与删除决策。§3.1.3

风险也随之而来:如果 agent 在循环里加得太多、越过 128,Hybrid 仍会触发一次紧急 prune;若这次 prune 找不到可删的工具,就返回错误。论文在局限里说,误删关键上下文时,一个缓解办法是临时退回 Autonomous 模式——但这又把「会不会删」的问题交还给了模型。结论后的 Limitations 段

04

工程账:13 个模型、100 轮、100 个分层样本、一个 3 轮窗口

读完这节你应该知道:实验的每个数字是怎么量出来的,哪些设置是人为固定的。

数据

ScaleMCP 的 100 个分层样本

从 5,000 个 MCP server 中按「每轮工具调用数」分层抽样 100 个实例,拼成 100 轮连续用户查询;每轮平均 5.0 次工具调用,相邻查询可以相关也可以无关。工具知识库用 text-embedding-ada-002 建索引,检索深度 top-5。§3.2

模型

13 个 LLM,闭源与开源混合

GPT-o3、GPT-4o、GPT-4o Mini、GPT-4.1、GPT-4.1 Mini、GPT-4.1 Nano、Gemini 2.5 Pro、Gemini 2.5 Flash、Claude Opus 4、Claude Sonnet 4、Claude 3.7 Sonnet、Claude 3.5 Sonnet、LLaMA 3 70B。任务完成度由 GPT-4o mini 作为 judge 打分。§4.1

4.1 五个指标:移除率、残留量、正确率、完成度

论文用两个指标刻画「记忆管理」,两个指标刻画「任务做得怎么样」:

RemovalRatio = Σ Rt / Σ At ≤ 1

Rt 是第 t 轮删除的工具数,At 是第 t 轮加入的工具数。这个比值衡量「加进来的工具有多少后来被删掉」,但会被早期未清理的堆积稀释,所以论文又定义了 3 轮滚动窗口的 Avg Removal Ratio 3T:对每个连续 3 轮窗口分别算删除/加入比,再对所有窗口取平均。

AvgResidual3T = (1/K) Σk (1/3) Σi Tpk+i

Avg Residual 3T 看的是每个工具数峰值之后连续 3 轮的平均工具数(Table 2 caption:「average number of tools remaining after three turns」;§4.1:「how many tools remain shortly after each peak tool count」),直接反映「内存泄漏」有多严重。Task Completion 用 LLM-as-judge 比较 agent 最终回答与基准期望答案的对齐程度,judge 固定为 GPT-4o mini;Tool Correctness 是正确工具调用数除以总调用数。论文未提及人工复核。§4.1

4.2 一个被固定的选择:3 轮宽限期

「3 轮」是论文设定的观察窗口:残留量不是在工具加入满 3 轮后做一次统计,而是在每个工具数峰值之后连续取 3 轮的工具数求平均(Eq. 3);移除率同样按连续 3 轮窗口计算删除/加入比。这个窗口同时用于 Avg Removal Ratio 3T 和 Avg Residual 3T。论文没有报告 2 轮、5 轮或 10 轮窗口的敏感性实验;因此所有关于「谁清理得更干净」的结论,都限定在这个 3 轮口径下。推断(依据:全文只出现 3-turn / 3-window 定义,未检索到窗口大小的消融)。

05

一轮对话:查询进来,先过模式路由,再决定工具集怎么变

读完这节你应该知道:三种模式在同一轮里的调用顺序,以及 128 上限在哪里兜底。

用户查询 q 第 t 轮 模式选择 Autonomous / Workflow / Hybrid Autonomous agent 自主增删工具 Search_Tools Remove_Tools prompt 里给出工具数 增删与回答同一循环 Workflow 每轮 2 次独立调用 prune → search agent 不持有元工具 回答循环内不能重新检索 Hybrid 每轮 1 次 prune 调用 只留 Search_Tools 删除对 agent 不可见 超 128 再 prune ScaleMCP · 5,000 个 MCP server · 向量检索 top-5 工具上限 L = 128 · 历史消息可截断或摘要 工具集 T 持久化到下一轮;每轮平均 5 次工具调用
按 §3.1 与 Algorithm 1–3 重绘。三条分支的差别只在「删除与搜索由谁执行」;工具库、检索深度 top-5 与上限 128 对三种模式相同。
06

效果:自治模式把差距拉成 94.1% 对 6.2%,工作流把 12 个模型压进 3.4 个点

读完这节你应该知道:三种模式各自的强项与代价,以及「哪个模式最好」为什么没有统一答案。

6.1 三种模式的完整对照(Table 2)

正文 Table 1 只列了 11 个模型;13 个模型(去重)的完整结果在附录 A 的 Table 2(Claude 3.7 Sonnet 与 GPT-4o Mini 只在后者出现);其中 Workflow 只有 12 行——Claude 3.7 Sonnet 没有 Workflow 结果。下表按 Table 2 转录,数值是原始小数;图中的百分比是 ×100 后的显示值。

Table 2(完整转录):13 个模型(去重);Autonomous / Hybrid 各 13 行,Workflow 12 行(Claude 3.7 Sonnet 未报告);Avg Residual 3T 越小越好,其余三项越大越好。
模式 / 模型Avg Removal 3TAvg Residual 3TTool CorrectnessTask Completion
Autonomous Agent
GPT-o30.9417.440.750.90
Gemini 2.5 Pro0.9246.510.810.80
Claude 3.7 Sonnet0.90514.250.860.89
Gemini 2.5 Flash0.9055.080.740.65
Claude Opus 40.87813.850.860.84
Claude Sonnet 40.84024.440.800.83
GPT-4.10.83448.120.860.88
GPT-4.1 Mini0.73358.930.780.80
GPT-4o0.71337.480.680.76
GPT-4o Mini0.449121.060.780.88
LLaMA 3 70B0.244123.330.420.72
Claude 3.5 Sonnet0.062124.000.380.59
GPT-4.1 Nano0.0000.000.130.60
Workflow
GPT-4o0.9387.190.710.70
GPT-4.10.9347.480.820.83
LLaMA 3 70B0.9328.640.510.71
Gemini 2.5 Pro0.9296.900.690.66
Gemini 2.5 Flash0.9286.600.500.60
GPT-o30.9257.590.880.84
GPT-4.1 Mini0.9227.720.720.81
Claude 3.5 Sonnet0.9177.830.820.82
Claude Opus 40.9177.920.710.78
Claude Sonnet 40.9178.000.770.81
GPT-4o Mini0.9168.430.740.72
GPT-4.1 Nano0.9048.960.640.66
Hybrid
GPT-4o0.9437.150.770.76
GPT-4.10.9417.290.820.80
LLaMA 3 70B0.9387.520.600.76
Gemini 2.5 Pro0.9386.520.740.75
Claude 3.5 Sonnet0.9357.320.810.83
GPT-4o Mini0.9347.770.810.80
GPT-o30.9329.330.820.87
Gemini 2.5 Flash0.9326.150.590.66
GPT-4.1 Mini0.9297.260.810.79
Claude 3.7 Sonnet0.9217.970.830.88
Claude Opus 40.92010.460.820.81
Claude Sonnet 40.91210.270.820.81
GPT-4.1 Nano0.8696.940.480.63

6.2 同一张表,三种读法

Avg Removal Ratio 3T(×100) Task Completion(×100)

柱高按固定上限 100 满格;数值保留一位小数。切换模式与排序只改变这张图的呈现,不改变 Table 2 的原始数值。

手算对账:三组参数 → 交互读数

Autonomous(13 行,按移除率或完成度排序,读数相同):Table 2 给 GPT-o3 的移除率 0.941,0.941 × 100 = 94.1;GPT-4.1 Nano 是 0.000,0.000 × 100 = 0.0;跨度 94.1 − 0.0 = 94.1。完成度最高是 GPT-o3 的 0.90 × 100 = 90.0。JS 输出:最高 GPT-o3 94.1,最低 GPT-4.1 Nano 0.0,跨度 94.1,完成度最高 GPT-o3 90.0。

Workflow(12 行):最高 GPT-4o 的 0.938 → 93.8;最低 GPT-4.1 Nano 的 0.904 → 90.4;跨度 93.8 − 90.4 = 3.4。完成度最高是 GPT-o3 的 0.84 → 84.0。JS 输出:最高 GPT-4o 93.8,最低 GPT-4.1 Nano 90.4,跨度 3.4,完成度最高 GPT-o3 84.0。

Hybrid(13 行):最高 GPT-4o 的 0.943 → 94.3;最低 GPT-4.1 Nano 的 0.869 → 86.9;跨度 94.3 − 86.9 = 7.4。完成度最高是 Claude 3.7 Sonnet 的 0.88 → 88.0。JS 输出:最高 GPT-4o 94.3,最低 GPT-4.1 Nano 86.9,跨度 7.4,完成度最高 Claude 3.7 Sonnet 88.0。

排序按钮只改变柱子的上下顺序;读数始终对整份模型列表取最大值与最小值,因此同一模式下两种排序的读数字段相同。

Autonomous:能力差距被放大。推理模型集中在 90–94%:GPT-o3 是 94.1%,Gemini 2.5 Pro 92.4%,Claude 3.7 Sonnet 与 Gemini 2.5 Flash 都是 90.5%。中型与小型模型掉到 0–60%:LLaMA 3 70B 只有 24.4%,Claude 3.5 Sonnet 只有 6.2%,GPT-4.1 Nano 是 0.0%。残留量把差距写得更直白:GPT-o3 的 Avg Residual 3T 是 7.44,Claude 3.5 Sonnet 是 124.00,相差 116.56 个工具。Figure 2 里,LLaMA 3 70B 与 Claude 3.5 Sonnet 在第 20 轮左右撞上 128 上限,撞线后新增工具会返回错误,需先删除。这里有一处原文冲突需要并列:Table 2 给 GPT-4.1 Nano 的移除率 0.000、残留 0.00(几乎不删),Figure 2 图注却把 GPT-4.1 Nano 与 Claude 3.5 Sonnet、LLaMA 3 70B 并列为 “fail to remove unused tools, exceeding the 128-tool API limit”;两处说法不一致,页面并列,不替原文取舍。

Workflow:可靠性来自结构,不来自模型。12 个有 Workflow 结果的模型移除率全部 ≥ 90.4%(Claude 3.7 Sonnet 未报告 Workflow),最高 GPT-4o 93.8%,跨度只有 3.4 个点。LLaMA 3 70B 从自治的 24.4% 拉到 93.2%(+68.8 点),Claude 3.5 Sonnet 从 6.2% 拉到 91.7%(+85.5 点)。工具调用正确率最高的是 GPT-o3 的 0.88;任务完成度最高的是 GPT-o3 的 0.84,仍低于它自治模式的 0.90——确定性管线压住了工具数,也压住了 agent 在循环里补救的机会推断(由 Table 2 的完成度对比归纳)。

Hybrid:折中的收益与代价都写在表里。移除率在 86.9–94.3% 之间,跨度 7.4 个点;GPT-4o 最高 94.3%,GPT-4.1 Nano 最低 86.9%。任务完成度最高的是 Claude 3.7 Sonnet 0.88,GPT-o3 是 0.87,低于它自治模式的 0.90。Claude 3.5 Sonnet 是混合模式的最大受益者:移除率从 6.2% 到 93.5%(+87.3 点),任务完成度从 0.59 到 0.83(+24 点)。但对强模型,Hybrid 并不免费推断(由 Table 2 完成度对比归纳):GPT-4.1 的完成度从自治的 0.88 降到 0.80,Claude Opus 4 从 0.84 降到 0.81。

把三张视图放在一起,论文的推荐就可以读成条件句:追求最高任务完成度、且手里有推理模型,用 Autonomous;追求稳定可控、模型能力参差,用 Workflow;想在两者之间取平衡,用 Hybrid。没有哪个模式在四个指标上同时占优。

07

边界:移除率很高,不等于这套记忆管理已经能上生产

读完这节你应该知道:论文没有回答哪些问题,以及这些空白会怎样影响模式选择。

成本

没有 token / 延迟账

Workflow 每轮多 2 次 LLM 调用,Hybrid 多 1 次(超限时再加 1 次);论文在 §4.3.2 只按成本效率给出定性建议,没有报告额外调用的 token 数、延迟或费用推断(依据:全文未检索到相关量化)。在线场景里,这可能是比移除率更硬的约束。§4.3.2

相关性

「无关」由另一个 LLM 判断

剪除依据是当前查询与工具的相关性,判断者仍是 LLM;一个当下无关、但几轮后要用的工具可能被提前删掉。论文没有给出相关性的形式化定义,也没有测「误删后恢复」的代价。§3.1.2

泛化

只有 ScaleMCP 一个 benchmark

100 个样本全部来自 ScaleMCP 这一个 benchmark,模型也只在这个 benchmark 上评测;换到工具依赖复杂、或需要创意联想的域,三种模式的排序是否保持,论文没有回答。§3.2

另外三点值得单独记下。第一,任务完成度由 GPT-4o mini 作为 judge 打分,论文没有报告与人类评分的一致性;更换 judge 后,0.90 与 0.88 这类接近的数值是否仍能分开,未知。第二,Hybrid 的「删除对 agent 不可见」是一把双刃剑:它避免了模型不擅长删除的问题,也让 agent 无法判断自己是否刚被剪掉了关键工具;论文建议在误删时临时退回 Autonomous,但这就重新引入了「模型会不会删」的依赖。第三,3 轮窗口是固定设定,没有敏感性分析;如果业务允许工具在上下文里多留几轮,残留量的绝对值会整体上移,模式之间的相对排序未必不变。推断(依据:§4.1 只定义 3 轮口径;§4.4.2 未报告窗口消融)。

论文自己的定位也是「短期记忆」:它不处理跨会话的长期记忆,也不处理工具之间的依赖关系推断(依据:全文没有讨论工具依赖图或调用顺序约束)。把 MemTool 与长期记忆框架拼接,是论文在结论里留下的下一步;而「用低成本模型专职做 prune、更强的模型面向用户」是 §4.3.2 的部署建议(原文举例 GPT-4.1 Mini、Gemini 2.5 Flash 充当 memory controller),不是已经验证的结果。