III · Tool Use & EnvironmentEmerging

工具结果驱逐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 和中国的上下文工程文献将其描述为工具清理。

此模式禁止的内容。 代理在实时窗口中不得保留已被消耗的原始工具负载;已消耗的观察必须用一个保留调用及其结论的标记替换。驱逐不得删除调用发生的记录,仅删除其庞大的主体。

与之并列或对立的模式——

  • 补充工具结果缓存★★缓存由其参数键控的昂贵确定性工具调用的结果,以便在会话内的重复调用立即返回。
  • 补充上下文压缩当上下文窗口接近其限制时,用模型生成的摘要替换较旧的对话片段,该摘要保留决策、承诺和活动约束,同时丢弃噪声,以便代理能够继续运行而不失去线索。
  • 补充上下文窗口打包★★根据固定的令牌预算选择每次回合中适合放入上下文窗口的内容。

邻域

点击任何邻居以跟随语言。滚动以缩放,拖动以平移。