Skip to content
Figo Blogs
Go back

Harness Engineering 深度解析笔记

Contents

Table of contents

Open Table of contents

一、背景与问题

核心问题:为什么同样的模型,效果差距悬殊?

很多团队在构建 Agent 系统时都碰到同一个令人困惑的现象——相同的底座模型、相近的提示词,不同产品的稳定性和任务成功率却天差地别。直觉上的怀疑方向往往是:

  • 模型不够强?
  • 提示词没调好?
  • RAG 没配对?

但越来越多的团队最终发现:真正决定系统能不能稳定跑起来的,往往不是模型本身,而是模型外面那套运行系统——这就是所谓的 Harness Engineering。

📡 扩展 2026 年初,OpenAI 发布工程博客,记录了一支三人团队借助 Harness Engineering 与 Codex 构建出百万行代码库的案例,每人每天产出 3.5 个 PR,且零人工键入代码。LangChain 的案例同样说明问题:仅改变包裹在同一 LLM 外的基础设施,其 Agent 在 TerminalBench 2.0 的排名便从榜单 30 名开外跃升至前 5 名,模型权重分毫未动。正如业界所说:“Harness makes or breaks an AI product”(Harness 决定 AI 产品的成败)。


二、核心概念

2.1 三代 AI 工程的演化

AI 工程经历了三个层层递进的阶段,每一步都是对”更深层问题”的响应:

阶段名称核心问题本质典型实践
第一代提示词工程模型有没有”听懂”?信息表达问题角色设定、Few-shot、格式约束
第二代上下文工程模型有没有拿到正确、足够的信息?信息供给问题RAG、长上下文、动态信息注入
第三代Harness 工程模型在真实执行中能不能”持续做对”?执行保障问题编排、状态管理、评估、约束恢复

这三者是包含关系,而非替代关系,每一代都在前者的基础上扩大了工程边界。


2.2 “Harness” 一词的本意与 OS 类比

Harness(缰绳/马具)的本意是对马匹力量的约束与引导装置。马天生强大,但没有缰绳就无法耕田;模型天生智能,但没有 Harness 就无法在生产环境中可靠工作。

📡 扩展 Anthropic 工程师提出了一个更精准的系统类比:

你可以换更好的 CPU(模型),但操作系统(Harness)才是让所有硬件真正协作、让应用稳定运行的关键。


2.3 Harness 的正式定义

LangChain 给出了目前业界最简洁的定义:

Agent=Model+Harness\text{Agent} = \text{Model} + \text{Harness} ∴Harness=Agent−Model\therefore \text{Harness} = \text{Agent} - \text{Model}

即:在一个 Agent 系统里,除了模型本身以外,几乎所有能决定其能否稳定运行的部分,都属于 Harness。

📡 扩展 Mitchell Hashimoto 于 2026 年 2 月正式将 Harness Engineering 这一名称落地,其核心哲学是:每一次 Agent 的失败,都不是偶然,而是系统设计的漏洞。不是让它”下次更努力”,而是工程化这个漏洞,让它下次不可能再以同样方式出错。 数天后 OpenAI 发布工程博客印证了这一理念,该术语由此在业界正式流通。


三、主体内容:Harness 的六层架构

视频将一个成熟的 Agent Harness 拆解为六层,由内到外、层层递进,每一层解决不同维度的工程问题:


3.1 第一层:上下文重新审视

站在 Harness 的视角,模型能否稳定发挥,很大程度取决于它看到了什么。这一层的核心职责是让模型在正确的信息边界内思考。

包含三件关键事项:

信息一旦乱掉,模型就容易丢重点,甚至出现”自我污染”(将错误推断当成事实输入到后续推理中)。

📡 扩展 上下文腐化(Context Rot)是指随着 Token 数量增加,模型准确召回早期信息的能力系统性下降,根本原因在于 Transformer 需要为 n 个 Token 建立 n² 级别的注意力关系,越长的上下文越容易稀释关键信息。Anthropic 的 Agent Skills(技能系统)是上下文工程的高级实践:不是一次性把所有工具说明塞给模型,而是只在需要时动态加载对应能力的详细说明——渐进式披露,按需给,在正确的时机给。


3.2 第二层:工具系统

没有工具,大模型本质上只是一个文本预测器。工具赋予了模型真正的”手”:搜索网页、读取文档、执行代码、调用 API……

但 Harness 在这一层要解决的绝不是简单地”把工具挂上去”,而是三个具体的工程问题:

📡 扩展 OpenAI SDK 实现了三级 Guardrail(护栏)机制:输入护栏(作用于首个 Agent)、输出护栏(作用于最终输出)、工具护栏(每次工具调用时触发),并通过”熔断机制(Tripwire)“在触发时立即中止 Agent。Anthropic 则在架构层面将权限执行与模型推理完全分离:模型决定”要做什么”,工具层独立判断”是否被允许”。Claude Code 对约 40 项工具能力独立设权,采用三阶段流程:项目加载时建立信任、每次工具调用前做权限检查、高风险操作前要求用户显式确认。


3.3 第三层:执行编排

这一层解决的核心问题是:模型下一步该做什么?

很多 Agent 的问题不是某一步不会,而是不会把所有步骤串联成完整链路——它会搜索、会总结、会写代码,但整个过程想到哪做到哪,最终交付一堆半成品。

一个成熟的执行编排,应当驱动 Agent 形成如下的完整反馈闭环:

这个循环在结构上已经非常接近人类工作时的思维闭环。区别在于:人靠经验来做判断,Agent 靠 Harness 提供的运行环境来驱动这一轨迹。

📡 扩展 这一模式在学术上称为 ReAct 循环(Thought-Action-Observation,简称 TAO 循环):组装提示词 → 调用 LLM → 解析输出 → 执行工具调用 → 将结果反馈 → 重复直到完成。Anthropic 将其运行时描述为”愚蠢的循环”——循环本身机械简单,所有智能都在模型内;但循环管理的上下文、状态和错误处理,正是 Harness 工程的价值所在。


3.4 第四层:记忆与状态

没有状态的 Agent 每一轮都像失忆了一样——不知道自己做了什么、哪些结论已经确认、哪些问题还没解决。

Harness 必须清晰管理三类状态,且三者不能混在一起:

📡 扩展 Anthropic 在长时运行 Agent 研究中,将状态管理问题类比为”换班的软件工程师”——每个新班次的工程师到来时,对前一班做的事毫无记忆。其解决方案是双 Agent 架构 + 状态外化:Initializer Agent 在首次会话建立结构化环境(功能清单文件、进度日志 claude-progress.txt、Git 基线、init.sh 启动脚本),后续 Coding Agent 每次会话从这套外化记忆中读取状态、推进一小步、提交进度。状态不住在模型记忆里,而住在文件系统和 Git 历史中。


3.5 第五层:评估与观测

这是最容易被团队忽视的一层。 很多系统不是生成不出来,而是生成完之后根本不知道自己做得好不好,从而长期处于”自我感觉良好”的状态。

这一层通常包括以下能力:

系统不仅要会做,还要知道自己有没有真的做对。

📡 扩展 Anthropic 发现了一个普遍存在的问题:自评失真(Self-Evaluation Bias)。当模型被要求评估自己刚刚生成的内容时,它倾向于给出偏乐观的正面评价,即便输出质量在人类看来明显一般——在设计体验、产品完整度等没有标准答案的领域,偏差尤为显著。根本原因在于:生成者与评估者使用的是同一套参数和推理路径,天然存在”自我辩护”的倾向。解决方案是生产与验收分离,引入独立的 Evaluator Agent,使用 Playwright 等工具真实操作页面、执行测试用例、检查实际交互结果,而非仅做代码审查。


3.6 第六层:约束、校验与恢复

这往往才是真正决定一个系统能不能上线的关键环节。

真实环境里,失败不是例外,而是常态:搜索不准、API 超时、文档格式混乱、模型误解任务……没有恢复机制,Agent 每次出错只能从头再来。

📡 扩展 LangGraph 将运行时错误细分为四类,并对应不同处理策略:短暂性错误(指数退避后重试)、LLM 可恢复错误(作为 ToolMessage 返回,让模型自行调整)、用户可修复错误(中断执行,请求人工输入)、意外错误(冒泡至调试系统,禁止自动重试)。Anthropic 的做法是将工具调用失败作为错误结果返回给 Agent,保持主循环继续运行而非崩溃退出。Stripe 的生产 Harness 将自动重试上限定为两次。


四、实践案例

4.1 Anthropic 的实践:两大工程难题与解法

问题一:上下文焦虑(Context Anxiety)

任务越长,上下文越撑满,模型开始丢细节、丢重点,甚至出现一种有趣的现象:它好像感知到自己”快装不下了”,于是着急草草收尾。

Anthropic 的解决路径是分层递进的:

📡 扩展 Anthropic 在测试中发现,Claude Sonnet 4.5 的上下文焦虑严重到仅靠压缩无法解决,上下文重置成为当时 Harness 设计的必要环节。但当将同一套 Harness 迁移至 Claude Opus 4.5 后,这一行为几乎完全消失,上下文重置也随之从 Harness 中移除。这揭示了一个重要原则:Harness 是对当前模型局限性的编码,这些假设必须随模型迭代而持续重新审视,而不是一次性固化下来。 Claude Opus 4.6 引入 100 万 Token 上下文窗口后,上下文焦虑作为一个实际问题已基本消除。


问题二:自评失真(Self-Evaluation Bias)

让干活的人给自己打分,结果必然偏乐观。Anthropic 的解决方案是引入三角色分离架构:

关键原则:Evaluator 不只看代码,而是真实操作页面,检查具体交互和实际结果。 这是工程原则”生产与验收必须分离”在 Agent 系统中的直接映射,确保系统形成真正有效的生成—检查—修复闭环。


4.2 OpenAI 的实践:重新定义工程师的角色

OpenAI 提出了一个颠覆性的工作方式:人类工程师在环境中不需要写一行代码,只需要负责设计环境。

工程师的工作浓缩为三件事:

OpenAI 还将大量资深工程师的经验直接编码为系统规则,内嵌到 Harness 中自动执行:

  • 模块怎么划分?哪一层不能依赖哪一层?
  • 什么情况必须拦截?发现问题后该按哪个流程修复?

重点是:这些规则不只是报警,还会把”怎么修”一起反馈给 Agent,进入下一轮上下文。

📡 扩展 这已经不是传统意义上的代码规范,而是一套可运行的自动治理系统(Automated Governance System)。Anthropic 将其进一步产品化为 Claude Managed Agents 服务(2026 年 4 月进入公测),通过三层抽象将 Harness 基础设施从开发者身上剥离:Session(追加写入的完整事件日志)、Harness(调用 Claude 并路由工具调用的主循环)、Sandbox(安全隔离的执行环境)。这一设计类比操作系统对硬件的虚拟化——接口保持稳定,底层实现随模型进化自由演进。


五、核心结论

5.1 三层工程的边界与包含关系

工程层级解决的问题代表工具/实践适用场景
提示词工程怎么把任务讲清楚角色设定、CoT、Few-shot简单单轮生成
上下文工程怎么把信息给对RAG、记忆管理、动态注入依赖外部知识的任务
Harness 工程怎么让模型持续做对编排、状态、评估、约束恢复长链路、低容错生产 Agent

5.2 五条关键洞察


5.3 场景适用建议

你的场景建议层级核心投入方向
简单 Q&A / 单次内容生成提示词工程提示词设计,Harness 是过度设计
需要外部知识、实时信息上下文工程RAG 管道、上下文裁剪与排序
多步骤任务、工具调用上下文工程 + 工具系统工具选型、调用时机、结果处理
长链路 Agent、生产环境完整 Harness六层架构全量设计
自动化代码生成 / 复杂工作流完整 Harness + 独立评估三角色分离 + Playwright 验收

参考资源


📌 查看说明: 本笔记所有图表均使用 Mermaid 语法编写。 推荐使用 VSCode + Markdown Preview Enhanced 插件 查看,可完整渲染所有流程图与时序图。 在线渲染可访问 mermaid.live。


Share this post:

Next Post
Claude Code 泄露背后的真正信号:从代码泄露到常驻代理平台