Agent Harness 是建立在 LLM 缺陷之上的补偿

Agent Harness 的很多设计,本质上是在补偿当前 LLM 的缺陷。看一个时代的 Harness,也是在看这个时代的模型周围还需要哪些脚手架。

适合阅读:正在设计 Agent 运行时、上下文管理或工具调用链路的工程师。

读完可以带走

  • 很多 Harness 机制是在补偿模型对格式、上下文与长期状态的处理局限。
  • 上下文管理要保留原始证据、失败记录和独立探索分支,不能只做长度压缩。
  • 部分补偿会随模型能力迁移,但鉴权、隔离与持久化仍有独立价值。

Agent Harness 的大量工程设计,本质上是在补偿当前大语言模型(LLM)的能力缺陷。

在成熟的 Agent 系统中,模型外围包裹着上下文管理(Context Management)、状态压缩(Compaction)、持久记忆(Memory)、工具运行时(Tool Runtime)、任务规划(Planning)、子智能体路由(Subagent)以及隔离沙箱(Sandbox)。其中部分机制属于操作系统的固有边界(如鉴权、持久化与隔离环境);另一大部分则属于围绕当前模型短板搭建的临时脚手架。

这些脚手架随着模型能力的升级持续发生迁移。

早年为了让模型稳定输出 JSON,工程上依赖繁复的 Prompt 规则约束、外部正则解析器与重试循环。随后 Function Calling、JSON Mode 及 Structured Outputs 相继落地,原本位于应用层的格式纠错被内化至模型训练与 Constrained Decoding 层面。工具调用的演进亦然:ReAct 早期依赖在 Prompt 中示范 Thought → Action → Observation,如今 Tool Calling 已成为模型接口标准与 Post-training 的核心组成部分。

目前这一内化进程仍在继续:早先由 Harness 负责的动态工具检索(Tool Retrieval)正在融入模型接口;早期依赖外部模型二次摘要的 Compaction,也逐步出现了服务端原生支持。

整个演进链条呈现出明确的收敛模式:

Model Deficiency→Harness Compensation→Internalization\text{Model Deficiency} \rightarrow \text{Harness Compensation} \rightarrow \text{Internalization}

上下文工程(Context Engineering)是观察此补偿机制的典型切入点。

Manus 曾总结过六条上下文工程原则:围绕 KV Cache 设计;Mask, Don’t Remove;文件系统即上下文;通过 Recitation 强化显著性;保留错误尝试;以及避免被历史 Few-shot(Don’t Get Few-Shotted)。将这些原则映射至 Agent Loop,每一条背后都对应着当前模型在状态感知与推理上的明确缺陷。


缺陷一:计算成本与 KV Cache 前缀敏感

Agent 的长程调用模式会成倍放大 Prefill 阶段的计算开销。

普通对话仅涉及有限轮次,而 Agent 需要在单次复杂任务中携带逐步膨胀的执行历史,高频触发模型推理。第 tt 轮与第 t+1t+1 轮之间,新增内容往往仅是刚执行完成的一小段工具返回(Tool Result):

Ct+1=Ct+ΔtC_{t+1}=C_t+\Delta_t

其中计算冗余主要集中在被重复处理的历史前缀 CtC_t。

因此,KV Cache 的命中率成为控制 Agent 延迟与成本的生命线。推理引擎复用缓存的前提,是上一轮 Prompt 必须与当前 Prompt 保持严格一致的精确前缀。Codex 工程团队将此前缀不变性列为 Agent Loop 的核心约束:静态指令与系统定义前置,动态变更内容后置追加。在工程实践中,任何中途变更 Tool List、模型切换、沙箱配置微调、确认模式切换或工作目录变更,都会造成全局 Cache Miss。早期 MCP(Model Context Protocol)支持甚至曾因工具枚举顺序的不稳定导致缓存大面积失效。

Manus 的前两条原则直接对应此限制:

  1. 围绕 KV Cache 设计:前缀保持严格静态;
  2. Mask, Don’t Remove:在不同执行阶段(如网页浏览与终端编码),若动态从 Tool Schema 中剔除无关工具,会导致 Prompt 顶部的工具定义发生变动,直接破坏后续全部缓存;同时使模型历史中出现的历史调用在当前 Schema 中失去定义。因此,系统需保持工具元数据定义完全静态,将“工具能力注册”与“当前动作可用性”分离,后者通过 Harness 状态机和解码约束进行屏蔽(Mask)。

Hermes 在长期记忆管理中也采用了类似设计:MEMORY.md 与 USER.md 会在会话初始建立静态快照并注入系统提示词。执行过程中 Agent 对记忆的修改实时落盘,但会话内的 System Prompt 不做动态同步,以避免破坏 LLM Prefix Cache。

Context 对模型而言不仅是语义输入,更是物理计算实体。


缺陷二:信息存在性不等于注意力可及(Lost in the Middle)

长上下文窗口的扩大容易带来误解,认为只要未发生硬性截断,模型就能无损感知全部历史信息。

在实际执行中,随着搜索结果、终端流水、代码片段与工具返回不断注入,会话初始定义的用户目标、全局约束与验收条件会逐步被挤压至上下文的中段位置。

尽管文本物理存在,但模型对其中细节的注意力权重与利用效率会出现非线性衰减。这一现象在学术界被称为“Lost in the Middle”。

Information exists⇏Information remains accessible\text{Information exists} \quad\not\Rightarrow\quad \text{Information remains accessible}

Manus 提出的 Recitation(朗诵/重述) 原则正是用于弥补注意力衰减:系统维护独立的 todo.md,并在工作流中强制 Agent 周期性地读取并重写该文件。虽然任务清单已存在于历史上下文中,但周期性的显式读写操作能够强制将当前阶段目标、剩余任务与核心约束重新拉回模型的近端生成窗口。

Anthropic 在构建长期运行 Agent 时提出了类似建议:维持持久化的项目规范文件(如 CLAUDE.md),并通过结构化压缩(Compaction)、工作备忘与子任务委派,避免关键状态在冗长历史中被冲淡。

Codex 则在 API 层内化了上下文压缩逻辑:早期用户通过手动执行 /compact 调用模型生成历史摘要;如今其 Responses API 提供了原生的 /responses/compact 端点,返回包含 compaction 标识的紧凑项,供后续继续任务。

这些工程实践均指向同一事实:上下文中的信息存在显著的层次与生命周期差异,核心策略必须周期性在模型近端重现。


缺陷三:工作区无持久层与有损压缩不可逆

LLM 的上下文窗口类似于无持久化存储的内存工作台:置于窗口内的数据即时可用,一旦滑出窗口则彻底脱离模型的感知边界。

若直接将历史全部交给模型做实时摘要压缩,极易引发有损压缩的信息链断裂:

Raw Evidence⟶Summary\text{Raw Evidence} \longrightarrow \text{Summary}

如果在第 10 步抓取网页时,模型判定仅有部分字段有用并将其压缩为摘要;当执行推进至第 40 步,新出现的证据表明此前被舍弃的字段才是关键决策依据时,原始证据已不可逆丢失。

Manus 提出的 File System as Context 将文件系统作为上下文的持久化底座:

Raw Evidence⟶External Storage / File System\text{Raw Evidence} \longrightarrow \text{External Storage / File System}

当前模型上下文仅保留结构化索引、摘要与文件路径引用。原始页面、抓取结果与编译日志完整驻留在文件系统或对象存储中,当后续推理需要深挖细节时,再按需检索载入。

现代 Agent 运行时在架构上普遍实现了该分离:

  • OpenClaw:显式解耦 Session Transcript(全量磁盘事件)与 Model-visible Context(当前提示词视图),Pruning 仅剔除内存中的冗余工具输出而不修改磁盘历史,Compaction 仅向 Transcript 追加摘要标记;
  • DeepSeek Harness(DSH):将会话完全建模为持久化事件流(Durable Event Stream),模型可见的会话历史是基于底层事件流动态渲染派生的临时视图;
  • Pi:使用 JSONL 对会话进行树状持久化(Session Tree),官方建议关键状态优先写入文件,以防会话有损压缩导致上下文丢失。

History 是 Agent 经历过的真实世界;Context 仅是当前轮次允许模型观测的局部切片。


缺陷四:缺乏排除路径的负证据维护

当 Agent 执行命令发生异常时,直觉上的工程优化往往是清洗掉长达数百行的报错堆栈,保持上下文整洁。

但这种擦除会抹去关键的“排除路径”:系统已经确认了该分支在当前边界下不可行。一旦彻底丢弃失败记录,下一轮推理由于世界模型的认知回到原点,极大概率会重复提出完全相同的错误操作。

Manus 的 Keep the Wrong Stuff In 强调了错误的价值:错误是缩小搜索空间的负证据。

在实践中,保留负证据不意味着在上下文中无休止地堆积底层堆栈,而是对失败经验进行结构化提炼:

Attempt:
npm install foo@2

Result:
Dependency resolution failed.

Learned constraint:
foo@2 conflicts with the current React version.

Evidence:
logs/install-182.txt

原始堆栈由文件系统持久化存储,上下文中保留由失败提炼出的约束边界,防止系统陷入无效重试循环。


缺陷五:自生成轨迹引发的语义收缩(Contextual Semantic Contraction)

在持续推进的长程 Agent Loop 中,模型生成的动作与环境观察会持续追加回输入窗口:

Ct+1=Ct+At+OtC_{t+1}=C_t+A_t+O_t

当执行超过数十轮后,上下文内积累了大量由模型自身生成的 Action-Observation 对。这些历史记录构成了极强的 In-Context Demonstration(上下文少样本示范)。

若模型在前几轮中频繁使用特定的工具调用节奏,后续步骤会高度倾向于复现该行为模式。Manus 将此称为 Don’t Get Few-Shotted,并在提示词和序列化输出中主动打破机械对称性。

在开放式探索、方案头脑风暴或架构推演任务中,该现象更为显著:

当第一轮探索给出了基于向量检索、图谱检索与摘要检索的三种方案后,即便明确要求模型在下一轮给出“完全不同”的思路,模型往往仅在现有语义空间附近进行微调,产出多模态向量、自适应图谱等衍生项。模型参数并未变化,但在当前历史上下文条件的强烈约束下:

P(A∣C)P(A \mid C)

其输出分布发生了收敛,大量原本具备的备选模式因历史上下文强烈的示例效应而难以被激活。这一现象可称为上下文语义收缩(Contextual Semantic Contraction)。

因此,上下文管理不仅涉及长度控制,更关乎探索拓扑的隔离:

  • Pi 支持从会话树历史节点直接 Fork 新分支,派生任务继承分支前状态而剥离后续历史包袱;
  • OpenClaw 在 Subagent 编排中提供 isolated 与 fork 上下文模式,防止父级冗余轨迹污染子任务执行空间;
  • Anthropic Multi-agent Research 架构将探索分支下派至相互隔离的子智能体,各子代理在独立上下文窗口内探索并仅向主控交付压缩摘要,阻断各路径间的提前互相锚定。

上下文装配即执行策略

结合成熟系统的工程实践,单次模型调用的完整链路可形式化表达为:

St→HCt→πθAtS_t \xrightarrow{H} C_t \xrightarrow{\pi_\theta} A_t
  • StS_t:Agent 运行时所拥有的全量真实状态(包含事件日志、文件存储、外部数据库与环境变量);
  • HH:Harness 上下文投影引擎;
  • CtC_t:该轮次组装并交付给模型观察的工作上下文;
  • πθ\pi_\theta:具备参数 θ\theta 的基座模型;
  • AtA_t:当前轮次输出的决策动作。

模型最终生成的 Action 不仅取决于底座参数,同样高度取决于 Harness 投影策略:

  • KV Cache 约束:决定了上下文静态与动态内容的编排顺序;
  • Lost in the Middle 防御:决定了哪些核心目标需要周期性在近端重述;
  • 持久化隔离:决定了底层证据如何落盘并在上下文中仅保留句柄引用;
  • 负证据维护:防止系统重复踏入已证伪的路径分支;
  • 上下文分支与隔离:决定了多任务探索是否能免受历史自生成示例的锚定干扰。

脚手架的动态迁移与内化边界

回顾 Agent 脚手架的演进路径:

Model Deficiency→Harness Compensation→Internalization\text{Model Deficiency} \rightarrow \text{Harness Compensation} \rightarrow \text{Internalization}

随着底座模型在超长上下文理解、原生工具使用、结构化约束解码以及自动状态摘要方面的能力提升,外围 Harness 中部分认知属性的脚手架会被逐步内化或精简。

但这一趋势不会导致 Harness 的彻底消亡。

沙箱隔离、细粒度鉴权、持久化审计、物理文件系统读写以及外部副作用中介等机制,属于计算机系统架构与安全边界的固有层级,其存在独立于模型本身的推理水平。

看一个时代的 Agent Harness,核心是观察该阶段模型能力的短板分布。围绕模型搭建的外围机制,精准映射了当前概率推理系统在确定性计算环境中所依赖的约束与补偿。

参考资料