Agent 研习舱

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 / 双环进化的工程形态——注意它自己也是一个带预算和停止条件的循环。

  1. 1L327372外环启动:预算、产物仓库、流水线选择
    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 为什么变成了这样」。(节选中以 ... 略去一段纯日志参数。)

  2. 2L406421外环收尾:报告结果与剩余预算
    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(修复循环)——对照双环进化的表:内环快而脏地干活,外环慢而严地进化,中间隔着测试与人审。

以上为 Apache-2.0 许可的 openJiuwen 源码节选,仅截取教学所需片段;完整实现见 GitHub(固定 commit)

二阶视角: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 接口之上的具体实例。

Anthropic Engineering2026-04-08

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 已答

  1. Q1「自建评估 Harness」的核心论点是?

  2. Q2「双环进化」中内环与外环的分工是?

  3. Q3Meta-Harness 的设计要点是?

  4. Q4openJiuwen auto_harness 模块的定位是?