chapter 06 / 评估与进化层
Harness 工程深入
评估、进化与二阶控制:让 Harness 自己变好
前五章把 Harness 的部件装齐了。这一章回答一个更难的问题:怎么知道这台 Harness 好不好?怎么让它随时间变得更好? 这是 Harness 工程从「搭起来」走向「工程化」的分水岭。
评估:不可外包的那一环
直觉上评估应该交给通用 evals 平台,但自建评估 Harness 给出了相反的结论:Eval 与 AI Harness 耦合太高,无法外包给通用原语。
- 原始单元问题:所有通用平台都败在「测试用例」这个抽象上——单轮问答、多 Agent、决策树架构无法共用同一 schema。押注 single-turn schema 的平台,用户一要 multi-agent 就扩不出去。
- 该用平台的地方:可观测性(Langfuse、Grafana)继续用现成的;封闭问题域的垂直平台(如 coding-agent 专用)有意义。
- 第一性原则:Harness 必须从第一天就为可测设计——可分解、可检视、可单元测试。先糙后补 evals 必败。
配套的方法论是回归集与迭代集:回归集守住「以前能做对的别退化」,迭代集推进「现在做不对的逐个攻克」——和软件测试的回归/开发分工同构。
第 2 章讲过停止条件里最有效的是确定性判据(通过的测试数、分数阈值)。评估与停止条件在这里合流:你为 Harness 建的每一个可自动计算的判据,既是评估指标,也可以直接变成循环的停止条件。
进化:让 Harness 自己变好
评估解决「知道好坏」,下一步是「自动变好」。双环进化是目前最完整的工程范式:
| 维度 | 内环(runtime) | 外环(offline) |
|---|---|---|
| 节奏 | 秒–分钟级 | 小时级 |
| 动作 | Agent 边干活边改写 skill / memory | 进化算法 + 评估集迭代 |
| 验证 | 零验证,快但脏 | 五层闸门 + benchmark gate |
| 人的位置 | 不在环内 | 强制 PR review 合入 |
两个值得抄的工程决策:benchmark 作为 gate 而非 fitness(防止进化算法朝指标过拟合);OOS 红线清单(凭证、用户数据、工具签名、直接 commit main——禁止自动进化触碰)。在弱反馈环境下,PR review 是把「人」放回 loop 的最后一道闸门。
源码走读:优化 Harness 的 Harness
openJiuwen 的 auto_harness 模块就是一个工程化的外环:
source walkthrough
AutoHarnessOrchestrator:当 Harness 开始优化 Harness 自己
openJiuwen-ai/agent-core @ 1e3a5c7a3d · openjiuwen/auto_harness/orchestrator.py:327-421 · 提取于 2026-07-18
openJiuwen 有一个专门的 auto_harness 模块:它接收「优化任务」,选择流水线,在预算内跑实验、沉淀经验(ExperienceStore)、过 CI 闸门(CIGateRunner)。这正是 Meta-Harness / 双环进化的工程形态——注意它自己也是一个带预算和停止条件的循环。
- 段 1L327–372外环启动:预算、产物仓库、流水线选择
async def _stream_session_pipeline( self, tasks: Optional[List[OptimizationTask]] = None, ) -> AsyncIterator[Any]: """Run the session pipeline, yielding OutputSchema chunks.""" started_at = time.monotonic() self._results = [] self._last_cycle_result = CycleResult() self.artifacts = ArtifactStore() self._cancelled = False # Reset cancellation state for new session self.budget.start() yield self._msg("会话启动") logger.info( "[AutoHarnessOrchestrator] session started: local_repo=%s " "repo_url=%s pipeline_preference=%s task_timeout=%.1fs " "model_timeout=%.1fs session_budget=%.1fs tasks=%s", ... ) selected_pipeline = self._select_session_pipeline( tasks ) self.runtime.selected_pipeline = ( selected_pipeline.pipeline_name ) logger.info( "[AutoHarnessOrchestrator] pipeline selected: pipeline=%s reason=%s confidence=%s", selected_pipeline.pipeline_name, getattr(selected_pipeline, "reason", ""), getattr(selected_pipeline, "confidence", ""), ) self.artifacts.put( "pipeline_selection", selected_pipeline, )熟悉的配方又来了:SessionBudgetController(预算)、ArtifactStore(产物)、可取消(cancellation)——第 2、3 章讲的循环组件在「优化 Harness」这个外环里原样复现。流水线选择还带 reason 和 confidence 并存档:优化过程自身要可追溯,否则你无法审计「Harness 为什么变成了这样」。(节选中以 ... 略去一段纯日志参数。)
- 段 2L406–421外环收尾:报告结果与剩余预算
logger.info( "[AutoHarnessOrchestrator] session finished: results=%d elapsed=%.1fs budget_remaining=%.1fs", len(self._results), time.monotonic() - started_at, self.budget.remaining_secs, ) yield OutputSchema( type="harness_session_finished", index=0, payload={ "pipeline": pipeline_name, "status": "success", "results_count": len(self._results), "is_terminal": True, }, )结束事件带 is_terminal 标记与结果计数,日志里如实报告花掉的时间和剩余预算。auto_harness 模块里还有 ExperienceStore(经验沉淀)、CIGateRunner(合入闸门)、FixLoopController(修复循环)——对照双环进化的表:内环快而脏地干活,外环慢而严地进化,中间隔着测试与人审。
二阶视角:Meta-Harness
把镜头再拉远一层。模型每次大版本演进,Harness 里都有一批组件的假设失效——为旧模型设计的上下文重置策略,在新模型上变成累赘(dead weight)。怎么让系统在这种持续冲击下存活?
Meta-Harness 的答案:对「接口形状」有观点,对「接口背后的实现」中立。 平台只定义一组足够通用的稳定接口——execute(name, input)、getSession(id)、wake(sessionId)、provision({resources})——允许底下的具体 harness 随模型演进自由替换。这是操作系统「把硬件虚拟化为进程/文件」思路在 Agent 时代的对应物。
Anthropic 的 Managed Agents 明确以此自我定位:Claude Code 这样的专门 harness 和任务特化 harness,都是可运行在同一套 session/sandbox 接口之上的具体实例。
Scaling Managed Agents: Decoupling the brain from the hands ↗
把推理层(脑)与执行基础设施(手)解耦,通过稳定接口独立扩缩与故障恢复——Meta-Harness 思想的官方工程实践。
观察这套体系是否健康,核心可观测变量是接口折旧速度:接口越稳定、实现折旧越快,说明抽象切在了正确的位置——双环进化、Harness 协同进化都依赖这一点。
本章能力在 Harness 中处于什么位置?
harness positioning
本章能力在 Harness 中处于什么位置?
评估与进化层俯瞰其他所有层:rails 挂在循环的关键事件上做检查与快照,评估器为停止条件提供判据,auto_harness 这样的外环则把整台 Harness 当作被优化对象。它是 Harness 的「免疫系统 + 进化引擎」。
本章概念清单 / 点击进入概念卡片
章末测验
chapter quiz
0/4 已答
Q1「自建评估 Harness」的核心论点是?
Q2「双环进化」中内环与外环的分工是?
Q3Meta-Harness 的设计要点是?
Q4openJiuwen auto_harness 模块的定位是?