本文经原作者授权转载,版权归原作者所有。原作者:马东锡 NLP(@dongxi_nlp)。


Harness 系列文章之 6,关于 context management。

在 coding agent的世界里,昨日的重现,就是将昨日重要的事情映射到今天。

A transcript records what happened. Context decides what matters now.
Article image

每个 coding agent 最后都会遇到同一个问题: session 会越来会长。

Model 读过文件,跑过命令,搜过日志,改过代码,收到过 validation output,也回答过旧问题。

这些 context 如何管理?

The Naive Append Loop

Article image

最直觉的做法很简单,append transcript。但其实这是 context flooding。

一开始,model 似乎更聪明,因为它能看到更多。

很快就会遇到问题:

  • 旧 tool output 会和当前 evidence 竞争
  • 巨大的 shell log 会淹没下一条 instruction
  • retry message,partial read,旧 plan,stale summary 全部挤在一个不断变大的 blob 里

The Multi-Turn Loop

Article image

比 Naive Append Loop 更成熟一点的是 5 phase loop,这部分放在文章的末尾。

The Core Split

成熟的 Harness 会把三件事分开:

Article image
  • Durable log 应该完整和简洁,它服务 resume,audit,evals 和 debugging。
  • Model-visible context 应该被选择,是 model 为下一步行动需要看到的视图。
  • app state 应该结构化。它不能依赖旧 transcript text 是否还在 prompt 里。

在此,我们定义出了projection:

Projection means to turn the full history into the small, relevant view the model needs for the next step.

这对应了这篇文章的标题:

Context Is A Projection

Projection Happens Before The Model Call

Context management 应该发生在 model call 之前。

Harness projection pipeline:

Article image
  • 先从完整 session log 开始,这是 source of truth
  • 再看 context pressure:下一轮回答,tool use,evidence 还需要多少 context 空间
  • 保留最近几轮 verbatim,因为这里通常放着当前任务
  • 大的 output 变成 preview,完整内容留在 prompt 外
  • 已完成的旧片段做显式 summary
  • 注入当前 app state:changed files,validation,goal,tasks 和 fresh evidence

Four Projection Moves

Article image

每个动作解决 context management 中面临的不同问题

Large-Result Preview

有些 tool result 太大,不适合在每个 turn 原样放进 context。

例如:

  • test logs,grep output
  • generated files, web fetches
  • dependency trees

弱 Harness 会随机截断,更强的 Harness 则会把完整结果放到别处,然后在 model-visible context 里放一个稳定 preview。

Article image

Model 得到足够继续工作的 evidence。

Harness 保留足够的 metadata,用来 resume,inspect,或者重新加载完整结果。

Idle-Gap Microcompact

有些 context 因为时间过去而变得不那么重要。

比如用户吃完午饭回来,或者 session 空闲了一夜。

最新 goal 仍然重要,最近几次 edit 仍然重要。

很久以前的重复 read 和 command output,未必重要。

microcompact 是一个小动作:

Article image

Old-Span Collapse

有时一整段 messages 已经完成使命,Harness 可以把这段折叠成 summary。但 summary 应该显式存在:

Article image

Model 知道 collapse 发生过,用户可以检查保留下来的内容。

resume 可以围绕 compact boundary 重建 conversation,而不会把 summary 当成一条随机的新 user message。

Auto-Compact Near The Limit

当 context pressure 很高时,Harness 应该在 model call 失败前 compact。

好的实现不能只写一句 "if too long, summarize"。

Article image

它需要:

  • warning thresholds:提示用户 context 还剩余多少百分比
  • hard blocking thresholds:超过限制前需要block model call,要求 compact 后再继续
  • recursion guards:防止 compact 又触发新的 compact
  • restored attachments or state blocks:compact 后重新加入attachments、file state、validation、goal 和 tasks。

auto-compact 要保护下一轮,同时保留继续工作所需的 evidence。

The Multi-Turn Loop

Article image

context 的管理,在 Multi-turn Loop 中尤其重要。

一个 Multi-turn Loop 大概如下,分为 5 个 phase:

Article image

在 loop 中,The next turn 从 committed runtime state 开始。

Phase 2 context projection 负责生成 model-visible view。

Phase 5 负责提交变化,让下一轮从真实的 runtime state 开始。

从 model call 开始,coding agent 的世界状态发生了变化,划分成了昨天和今天。

Model 不需要整个过去,它需要正确的过去、当前 state,以及足够支持下一步的 evidence。

Harness Context management 就是管理和决定 model call 看到的 selected view。