工具结果驱逐Tool-Result Eviction
也称为 Tool Clearing, Observation Pruning, Tool-Output Eviction
一旦工具的原始输出被消耗,在实时上下文窗口中用一个简短的标记替换它,回收令牌而不失去调用发生的记录。
上下文
一个使用工具的代理调用搜索、文件读取、API 查询或代码执行,每个调用都会返回一个庞大的负载——一页 JSON、一个文件的完整内容、一个堆栈跟踪。代理读取负载,提取所需内容并执行操作。后来发现,这个原始负载仍然停留在上下文窗口中,消耗令牌和注意力,即使只有它的结论仍然相关。
问题
原始工具输出是代理上下文中最大和最可丢弃的内容。逐字保留每个观察会拥挤窗口,增加成本,并掩盖代理实际推理的信号;但完全删除一个工具调用会失去记录该调用发生及其结论的记录,代理可能需要这些信息以避免重复工作或为其行为辩护。
影响因素
- 原始观察占主导地位的令牌使用,但一旦被消耗,主要是无用的负担。
- 直接删除观察会彻底消除调用发生的痕迹。
- 什么是'被消耗的'并不总是显而易见——结果可能在稍后再次需要。
- 替换标记必须携带足够的信息,以防止代理重新发出相同的调用。
- 驱逐策略与缓存竞争:一个是丢弃,另一个是保留以供重放。
示例
一个研究代理运行十个网页抓取,每个返回一整页的markdown。在从每个页面中提取所需的一个图形后,运行时用一行类似于'fetched acme.com/pricing: enterprise tier is $499/mo'的内容替换窗口中的每个抓取页面,并将完整页面卸载到一个blob存储中。窗口在接下来的二十个推理步骤中保持精简,当代理稍后需要完整页面时,它通过调用ID恢复页面,而不是重新抓取。
图表
解决方案
因此:
将工具观察视为可驱逐的。当工具结果被消耗——其所需值被提取到代理的推理或外部存储中——用一个简短的标记替换工作上下文中的原始负载,该标记记录调用、目标和一行结论('读取 config.yaml:定义了 3 个服务','搜索文档:未找到速率限制设置')。保留该标记,以便代理不重新发出调用;如果可能需要逐字再次使用,则将完整负载卸载到外部存储中。根据窗口的紧张程度,懒惰地(最旧的被消耗的优先)或急切地(提取后立即)应用驱逐。Manus 和中国的上下文工程文献将其描述为工具清理。
此模式禁止的内容。 代理在实时窗口中不得保留已被消耗的原始工具负载;已消耗的观察必须用一个保留调用及其结论的标记替换。驱逐不得删除调用发生的记录,仅删除其庞大的主体。
与之并列或对立的模式——
邻域
点击任何邻居以跟随语言。滚动以缩放,拖动以平移。