滑动窗口 上下文与记忆

别名: trimHistory

历史超过预算时,保留头部(system 与最初的用户指令)和尾部(最近的工作),裁掉中间最旧的部分。0 次 API、纯数组切片,代价是被裁掉的信息永久消失——它是「用遗忘换长度」。

它是什么

滑动窗口(trimHistory)是最朴素也最便宜的上下文管理:历史超过预算时,保留头部(system 与最初的用户指令——身份与任务定义,丢不得)和尾部(最近的工作——模型正在看的内容),裁掉中间最旧的部分。0 次 API、纯数组切片,代价是被裁掉的信息永久消失——它是「用遗忘换长度」。

配对的完整性优先于条数预算

切割点有一个 API 硬约束:tool_calls 消息和它的 tool_result 必须成对出现——把 assistant 留在头部、结果裁进中间,下一次调用直接 400。所以:

  • 头部保护:头部最后一条是带 tool_calls 的 assistant 时,把它后面的 tool 结果吞进头部;
  • 尾部保护:尾部第一条是 tool 结果时,向左扩展把它的 assistant 一起保留。

配对保护会让结果偶尔比预算多一两条——配对的完整性优先于精确的条数预算,这是「会写滑动窗口」和「写对滑动窗口」的区别。

与摘要压缩的分工

滑动窗口是「删掉」,摘要压缩是「换一种更短的表示」。生产系统两者叠用:先滑动窗口扔掉彻底没用的,再对「还有价值但太长」的部分做摘要,最后才轮到别的。完整实践见第 09 章

相关词条

出现在这些章节