高效Agents的尽头是,Harness

  • 模型是CPU:提供原始处理能力
  • 上下文窗口是RAM:有限的、易失性工作内存
  • Agent Harness是操作系统:管理上下文,处理"启动"序列(提示词、钩子),并提供标准驱动(工具处理)
  • Agent是应用程序:运行在操作系统之上的特定用户逻辑

[图示已省略]

Figure : OPENDEV的四层系统架构(Entry & UI → Agent → Tool & Context → Persistence)

核心理念:Scaffolding + Harness

传统Agent往往混淆了两个不同的阶段:

  • Scaffolding(脚手架):在第一个Prompt到达之前完成的工作——组装System Prompt、构建Tool Schema、注册Subagent。这部分应该eager construction(即时构建),确保Agent在运行时已是完全就绪状态。

[图示已省略]

Figure : Agent Harness的详细视图,展示了ReAct循环周围的七个支撑子系统

  • Harness(马具/运行时框架):第一个Prompt之后的所有工作——工具调度、上下文管理、安全强制执行、会话持久化。这是Agent的运行时编排层

关键洞察:将构建期与运行时分离开,意味着你可以独立演化每个部分。新增工具只需修改Registry,而变更压缩策略只需调整Harness。

3 Extended ReAct:不只是"思考-行动"

Agent Harness架构实现了一个扩展的ReAct循环,包含六个阶段:

  1. Pre-check & Compaction:检查注入队列,执行上下文压缩
  2. Thinking:独立的思考阶段(无工具访问),防止过早行动
  3. Self-Critique:自批判阶段(仅在HIGH级别启用)
  4. Action:主LLM调用,产生工具调用
  5. Tool Execution:并行/串行执行工具
  6. Post-processing:学习记录、会话保存 [图示已省略]

Figure 8: Extended ReAct执行循环的详细视图,展示了从Initialization()到Iteration的完整流程

特别值得注意的是Phase 0的Staged Context Management。系统监控Token使用率,在70%、80%、85%、90%、99%五个阈值采取不同策略:

[图示已省略]

Algorithm 1: Extended ReAct Loop with Five-Stage Compaction and Doom-Loop Detection

4 Context Engineering:

在长周期终端会话中,上下文管理不是优化项,而是基础性工程问题。OpenDev提出了Context Engineering Layer,包含四个关键子系统:

4.1 动态System Prompt组装

通过Priority-ordered conditional composition,根据运行时环境动态加载Prompt片段。例如,只有在Git仓库中才加载Git工作流指南,只有启用Todo跟踪时才加载任务管理指令。

[图示已省略]

Figure 10: PromptComposer的工作流程:Filter → Sort → Load → Join

4.2 自适应上下文压缩(ACC)

不同于简单的"到达阈值就总结",ACC采用渐进式策略:

  • Active State:最近的消息,完整保留
  • Faded State:较旧的消息,替换为引用指针
  • Archived State:归档到磁盘,完全移出上下文

[图示已省略]

Figure 13: 五级压缩管道(Warning → Masking → Pruning → Aggressive Masking → Full Compaction)

4.3 系统提醒(System Reminders)

解决"指令衰减"问题:随着会话变长,模型对初始System Prompt的关注度下降。OPENDEV通过事件驱动的即时提醒(Event-driven System Reminders)在关键时刻注入短小的user-role消息:

  • 检测到未完成Todo却调用task_complete时
  • 连续5次只读操作后(防止探索螺旋)
  • 工具调用失败后

[图示已省略]

Figure 11: 系统提醒如何防止过早完成任务(左:无提醒导致用户信任丧失;右:有提醒确保任务完成)

4.4 双记忆架构(Dual-Memory)

为Thinking模型设计的特殊架构:

  • Episodic Memory:LLM生成的长程对话摘要(每5条消息更新一次)
  • Working Memory:最近6条消息的原文

这既避免了长上下文超限,又保留了关键细节。

[图示已省略]

Figure 14: Agentic Context Engineering (ACE) 记忆管道,包含Bullet Selector、Reflector、Curator和Playbook

防御纵深:五层安全架构

终端Agent能执行任意Shell命令,这带来了巨大风险。OPENDEV采用五层独立的安全机制

  1. Prompt-Level Guardrails:System Prompt中的安全策略
  2. Schema-Level Tool Restrictions:通过Tool Schema过滤(如Planner Subagent只能看到只读工具)
  3. Runtime Approval System:Manual/Semi-Auto/Auto三级审批
  4. Tool-Level Validation:危险模式检测(rm -rf /等)、陈旧读取检测
  5. Lifecycle Hooks:用户自定义的Pre/Post工具钩子

[图示已省略]

Figure 3: 防御纵深安全架构的五层独立防线

关键设计:让危险工具"不可见"而非"被阻止"。当Tool Schema中根本不包含写工具时,LLM甚至不会尝试生成写操作,这比运行时权限检查更 robust。

6. 复合AI系统*()*:多模型路由

OPENDEV采用Compound AI System架构,将不同工作负载路由到不同模型:

内嵌表格

Model Role Purpose Fallback Chain
Action 主要执行模型 -
Thinking 深度推理(无工具) Action
Critique 自评估 Thinking → Action
Vision 图像处理 Action (if capable)
Compact 快速总结 Action

[图示已省略]

Figure 1: OPENDEV的并发会话架构,每个Session包含多个Subagent,各自绑定到LLM Pool中的不同模型

这种设计实现了模型无关性:切换提供商只需改配置,无需改代码。

工具系统:延迟发现与高效扩展

7.1 MCP(Model Context Protocol)延迟发现

为避免100个外部工具消耗20,000 Token的上下文,OPENDEV采用Lazy Discovery:只有在Agent调用search_tools或直接调用某个MCP工具时,该工具的Schema才被加载到上下文中。

[图示已省略]

Figure 19: ToolRegistry的延迟发现机制,将MCP集成的基线Token成本降至接近零

7.2 9-Pass模糊匹配编辑

LLM生成的代码编辑往往有微小偏差(空格、缩进、转义序列)。edit_file工具实现了9级渐进式匹配链,从精确匹配到上下文感知匹配,大幅降低了"内容未找到"的错误率。

[图示已省略]

Table D: Edit Tool的九级模糊匹配链

7.3 完整工具目录

[图示已省略]

Table 1: OPENDEV内置工具完整目录(按Handler分类)

关键经验:五个设计权衡

OpenDev总结了五个跨领域的设计张力:

[图示已省略]

最后,Harness作为新的抽象层

OpenDev的贡献不仅是又一个开源Coding Agent,而是提出了Harness这一关键抽象——将Agent的运行时编排从业务逻辑中分离出来。

在终端原生Agent的时代,我们需要的不是更聪明的Prompt,而是更健壮的Scaffolding + Harness架构:

  • Scaffolding确保Agent以正确的能力组合启动
  • Harness确保Agent在长周期、高风险的终端环境中安全、高效、持续地运行