PART 5 · Harness 与自我改进

Harness 的三大设计模式

好的 Harness 不是一堆脚本拼起来——它有清晰的模式语言。三个核心模式,覆盖了当前最强 Agent 系统 90% 的架构决策。

Design Patterns for Harness Engineering

从循环到记忆,从单体到多体——Harness 的三大基础设施模式

Lilian Weng(2026.07)在 "Harness Engineering for Self-Improvement" 中提炼出三个反复出现在成功 Agent 系统中的设计模式:工作流自动化、文件系统做持久记忆、子 Agent 与后台任务。它们不是"可选优化",而是任何生产级 Agent 的结构性需求
Pattern 1
1
Workflow Automation
工作流自动化
核心思想:Agent 不是执行一次就结束的脚本,而是一个目标导向的循环
  • Plan → Execute → Observe/Test → Improve → Execute again——每一轮生成不是终点,而是下一轮优化的起点。
  • 分析自身轨迹:优秀的 Agent 会回头看自己前几轮做了什么、哪里失败了、为什么失败——然后调整策略,而不是重复同一个 Prompt。
  • 强调运行时迭代:改进发生在 Agent 执行过程中,而非依赖人类事先写好的静态模板。Agent 在每次执行中学习、适应、优化。
  • 失败是信号,不是终止:测试不通过、命令报错、输出不符合预期——这些都是 Agent 自我纠正的触发条件。
Agent 自动化循环
Agent 工作流循环:plan → execute → observe → improve → execute again(来源:OpenAI Codex Agent Loop)
设计启示
不要把 Agent 设计成"一次性回答器"。让它拥有自己审查自己的能力:看到测试失败后自动分析原因、看到 linter 报错后自动修复、看到用户反馈后调整策略。这就是工作流自动化的核心——把反馈循环内置到系统里
Pattern 2
2
File System as Persistent Memory
文件系统做持久记忆
核心问题:在长期运行的 Agent 中,制品会迅速超出上下文窗口
  • 制品种类繁多:实验日志、代码 diff、论文摘要、错误追踪记录、过去的完整执行轨迹——这些都是有价值的状态,但塞不进上下文。
  • Harness 的正确做法:不要试图把全部工作历史压入 Prompt,而是把持久状态存在文件系统中——让 Agent 学会按需读写。
  • 文件读写是 LLM 基础技能:读写文件系统不需要复杂的外部工具链,它受益于核心模型能力的提升。模型越聪明,文件管理越高效。
  • 结构化存储:好的 Agent 会自己维护 scratchpad、todo 列表、实验记录,像人类程序员一样管理工作区。
上下文 vs 文件:何时放哪里?
放上下文中:当前正在处理的任务指令、即时的工具调用结果、最近 2-3 轮对话——需要即时参考的信息。

放文件系统中:历史实验结果、累积的错误日志、已完成子任务的摘要、长期策略和规则——需要持久保存但不必时刻在视野中的信息。

关键原则:上下文是工作记忆,文件系统是长期记忆。好的 Harness 像人脑一样,在两者之间智能地搬运信息。
Pattern 3
3
Sub-agent and Backend Jobs
子 Agent 与后台任务
核心思想:一个 Agent 不够用时,生成多个子 Agent 并行执行,同时监控后台长任务。
  • 父 Agent 作为进程管理器:启动子任务、检查日志和进度、取消失败的分支、合并成功的结果——这是操作系统层面的思维。
  • 并行性必须显式且可检查:不能"发射后不管"。父 Agent 需要能查看每个子 Agent 的状态、输出和错误。
  • 子 Agent 输出持久化:每个子 Agent 的结果存为文件、日志或状态记录(而不仅是返回到父 Agent 的上下文中),这样即使中断也能恢复。
  • 容错与恢复:后台任务可能超时、崩溃或产出低质量结果。Harness 需要设计重试策略和优雅降级机制。
关键设计决策
子 Agent 模式的核心取舍:并行带来速度,但也带来复杂性。成功的实现(如 Cursor 的 Task 系统、Claude Code 的子进程)都遵循同一原则——让每个子 Agent 在独立的沙箱中工作,输出到明确的文件路径,父 Agent 通过轮询文件状态而非内存共享来协调。这极大简化了并发控制。
Case Study · 编码 Agent 的 Harness
主流编码 Agent 的核心工具接口
Claude Code、Codex、OpenCode、Cursor——当前最强的编码 Agent 都围绕相似的工具集构建 Harness。下表按功能分组对比它们的核心接口:
工具分组 核心能力 典型工具
File System 读、写、搜索、编辑文件;管理工作区状态 Read, Write, Edit, Glob, Grep, StrReplace
Shell Execution 执行终端命令、运行测试、安装依赖 Shell, BashExec, RunCommand
I/O 与用户交互、确认操作、展示结果 Ask, UserConfirm, ShowResult
External Context 获取外部信息、文档、API 响应 WebFetch, ReadURL, DocSearch
Web Search 搜索互联网获取最新信息 WebSearch, BingSearch
Artifacts 生成、管理和版本化制品 CreateFile, SaveArtifact, VersionControl
Backend Processes 后台运行长任务、监控进程状态 BackgroundShell, AwaitProcess, Monitor
Agent Delegation 生成子 Agent、分配并行任务、合并结果 Task, Subagent, Fork, ParallelRun
编码 Agent Harness 循环
编码 Agent 的 Harness 循环:从用户意图到代码交付,工具接口编排全过程(来源:Lilian Weng, 2026)
交互体验:三种架构如何运行
就绪
Plan
Execute
Observe
Improve
↩ 循环
上下文窗口
92% 溢出风险
第 4 轮就开始丢信息
所有工具返回、历史轨迹全塞进上下文,窗口很快打满。Agent 开始遗忘早期信息,输出质量骤降。
三大模式如何协同
不是三选一,而是三层叠加
工作流自动化提供了执行的"脊椎"——循环结构和反馈机制。

文件系统记忆为循环提供了"硬盘"——让每轮迭代的成果不会丢失,即使上下文被清空。

子 Agent 并行为循环提供了"多核"——当任务可分解时,不再串行等待,而是并行加速。

三者组合,一个 Agent 就具备了迭代优化 × 长期记忆 × 并行扩展的能力——这正是当前最强编码 Agent 的共同架构。
核心观点:Harness 设计不是随机拼凑工具——它遵循三个结构性模式:目标导向的自动化循环(让 Agent 能自我纠错)、文件系统做长期记忆(突破上下文窗口限制)、子 Agent 做并行扩展(把串行瓶颈变成多线程)。理解这三个模式,就掌握了构建生产级 Agent 系统的架构语言。