跳至正文
教程 / Step 11

管理上下文:压缩、会话与 Fork

在长任务中保留决定性事实,减少噪声,并用新会话或 Fork 隔离不同工作方向。

简要结论

在长任务中保留决定性事实,减少噪声,并用新会话或 Fork 隔离不同工作方向。

上下文不是越多越好。重复日志、旧方案和超长工具结果会挤占模型真正需要的任务契约、代码证据和未完成事项。目标不是保存每个字符,而是让关键事实可恢复、可追溯。

三种信息不要混在一起

信息放在哪里示例
会话事实Session Event用户消息、工具调用、工具结果
当前任务状态结构化检查点已完成、决定、下一步、阻塞
长期项目知识项目文档或 Skill架构约定、发布流程、常见故障

把长期知识反复粘贴进每次会话会浪费上下文;只把任务状态放在聊天末尾又容易在长日志中丢失。

DeepSeek Harness 的压缩语义

压缩是可选能力,不是 Agent Loop 的必经主干。它可以在压力或上下文溢出时运行,也可以由空闲会话手动触发。一次成功压缩会选择安全范围,用一条摘要替换可见表层中的旧内容,同时在 Session Log 中保留开始、摘要和结束等记账事件。

需要注意:

  • 压缩摘要是新的可见检查点,不等于删除原始事件;
  • 范围边界必须保持工具调用与结果配对;
  • 工具结果可先被确定性剪枝,再决定是否生成摘要;
  • 中途失败会留下可诊断的尝试记录,而不是假装成功。

写一个抗压缩检查点

每完成一个里程碑,生成:

任务目标:
不可变约束:
已确认事实(含证据位置):
已完成及验证:
当前修改:
待办顺序:
未解决风险:

摘要中不要保留已经否定的方案细节;但要保留“为什么否定”的关键证据,避免后续重复走弯路。

何时开新会话

以下情况适合新会话,而不是继续追加:

  • 目标已经改变;
  • 旧任务完成,新任务只共享项目背景;
  • 历史包含大量与新问题无关的日志;
  • 需要不受实现者推断影响的独立审阅。

新会话的首条消息应带最小交接包:目标、范围、当前状态、关键文件、验证结果和未决问题。

何时使用 Fork

Fork 适合从同一已知状态探索不同方案,例如:

  1. 一个分支尝试最小修复;
  2. 另一个分支评估接口重构;
  3. 两边使用相同基线与验收;
  4. 汇总时比较 diff、证据、风险和迁移成本。

不要让两个分支同时改同一工作区文件却没有隔离策略。会话分叉不自动等于 Git 分支或独立文件系统。

上下文预算练习

选择一个有长日志的任务:

  1. 标出任务契约、已验证事实和未决项。
  2. 删除重复解释与完整成功日志,只保留证据摘要。
  3. 写一个不超过 300 字的交接检查点。
  4. 在新会话中仅使用该检查点继续,让 Agent 先复述范围。
  5. 比较是否遗漏关键约束,并修订模板。

下一篇把可复用知识放进Skills 与项目记忆

一手来源