0.1 Harness 是什么:模型之外的一切


0.1 Harness 是什么:模型之外的一切

本节摘要:harness(运行环境)是 2026 年智能体工程里最热的词,也是最容易被望文生义的词。本节从 Addy Osmani 的定名之作出发,给出本书通用的定义——编码智能体 = 模型 + 围绕它的一切,harness 就是那个"一切":Agent 循环、工具系统、权限审批门、沙箱隔离、上下文工程、观测评测。用一个引擎与底盘的类比讲清它和模型的关系,用"同一模型、不同结局"讲清它为什么值得单独成书,最后用一批身边实例(Claude Code、Codex CLI、OpenClaw、OpenHands)把抽象定义落到具体产品上。

学习目标

阅读完本节,你应当能够:

  1. 准确复述 harness 的定义,并指出它包含的六类组件。
  2. 用"引擎与整辆车"的类比向非技术同事解释模型与 harness 的分工。
  3. 说出"harness 本身在沙箱之外"这句话的含义。
  4. 在常见编码智能体产品中指出哪些部分属于 harness。

一、从一个定名之作说起

2026 年 4 月,Addy Osmani 发表《Agent Harness Engineering》(官方),随后被 O'Reilly 平台转载(2026-05)。文章的核心论断只有一句:

A coding agent is the model plus everything you build around it.
(编码智能体是模型加上你围绕它构建的一切。)

这句话把行业已有的共识钉在了板上:决定编码智能体表现的,不只有模型。你给模型什么提示词、给它哪些工具、怎么管理它看到的上下文、在它执行危险操作前设几道门、出错后怎么反馈——这些"围绕模型的一切",Osmani 统称为 harness(直译"马具 / 挖矿的矿井支架",引申为"让力量安全做功的支架系统"),并主张把它当作一门独立的工程学科:harness engineering

公式 说明
编码智能体 = 模型 + harness 模型是"大脑",harness 是让大脑能干活的"整辆车"
模型负责 理解、推理、决策、生成("想")
harness 负责 循环、工具、权限、沙箱、上下文、观测("做",以及"想"之前的供料与"做"之后的刹车)

💡 一个 helpful 的误解纠正:harness 不是"套壳"。"套壳"暗示它是可有可无的包装;而 harness 恰恰相反——去掉它,模型只剩一个聊天补全接口,连"读一个文件"都做不到。它是让模型从"会说"变成"会做"的全部机械结构。

二、引擎与整辆车:一个类比

把模型想成发动机,harness 就是发动机之外的整辆车:

汽车 编码智能体 类比含义
发动机 模型 动力来源,决定理论上限
变速箱与传动 Agent 主循环 把动力转成一轮轮可控的动作
方向盘与踏板 工具系统 让动力作用到真实世界(文件、终端、网络)
刹车与安全带 权限审批门 + 沙箱 限制爆炸半径,防止动力伤人
仪表盘与导航 上下文工程 + 观测评测 告诉引擎"现在在哪、接下来去哪、刚才跑得怎么样
整辆车 编码智能体 发动机再强,没有车也是一堆铁

同一台发动机(模型),装进赛车、SUV 还是货车(不同 harness),能干的事完全不同。这就是 2026 年各家产品用着相近的模型、体验却天差地别的根本原因。

三、同一模型,不同结局

一个思想实验(示意):把同一个前沿模型分别接到两种环境里——

  • 裸 API:一个 while 循环 + 一段"你是编程助手"的提示词,没有任何工具。它只能输出"你应该先打开文件看看"之类的建议,一行真实代码都改不了。
  • 完整 harness:文件读写工具、bash 执行、权限门、上下文压缩、错误回填。同样的模型,可以自主完成"修复这个仓库里所有失败的测试"。

模型没变,结局差出一个量级。差距全部来自 harness。反过来说,harness 工程师的工作就是:让每个模型在其能力范围内,把能力稳定地兑现出来——不因上下文塞爆而降智,不因工具报错含糊而空转,不因权限缺失而卡死,也不因权限全开而闯祸。

四、"Harness 本身在沙箱之外"

Hacker News 上有一句流传很广的讨论(社区):"harness 本身在沙箱之外"——它是在沙箱外运行的那个程序:调用 LLM API、拿到模型决策、然后把工具调用派发到沙箱里执行、收集结果、再喂回模型。

这句话划出了一条关键边界:

┌────────────────── 沙箱之外(可信区)──────────────────┐ │ Harness 主循环 │ │ 组装上下文 → 调用模型 → 权限门 → 派发工具 → 回填结果 │ └──────────────┬───────────────────────────────────────┘ │ 受控接口 ┌──────────────▼───────────────┐ │ 沙箱之内(不可信区) │ │ bash、编译、测试、任意代码 │ └──────────────────────────────┘

由此得到两个推论:其一,沙箱只是 harness 的一个组件(第 6 章的主角),不是 harness 本身;其二,harness 代码自己必须可信——它拿着 API Key、握着所有权限开关,它是安全边界本身。(这条边界的完整论证见第 1.1 节的四者边界表。)

五、身边的 harness

产品 形态 harness 侧重点(官方 / 社区资料)
Claude Code 终端编码智能体 精细的工具集与权限模式(ask/allow 列表)、hooks、项目级上下文文件
Codex CLI 开源终端编码智能体 开源可读、沙箱模式分级(只读 / 工作区可写 / 全开)
OpenClaw 本地自托管个人 AI 助理 多渠道网关(WhatsApp/Discord/iMessage/Slack/Telegram 等),GitHub 史上增长最快的项目之一(约 39 万 star,社区统计,2026-09)
OpenHands / opencode 开源 Agent 平台 / 终端 agent 完整的开源 harness 实现,适合当"可阅读的参考答案"

这四个例子会在第 2 章逐一解剖。现在只需要记住:它们竞争的重心,很大程度上是 harness 的竞争

本节要点回顾

  1. 定义:编码智能体 = 模型 + harness;harness 是围绕模型的一切——循环、工具、权限、沙箱、上下文、观测(共识来自 Addy Osmani 2026-04 文章,官方)。
  2. 类比:模型是发动机,harness 是整辆车;换发动机不用换车,造车不必造发动机。
  3. 边界:harness 在沙箱之外——它是调用 LLM API 并执行工具的那个循环;沙箱是它的组件。
  4. 实例:Claude Code、Codex CLI、OpenClaw、OpenHands 的差异化主要发生在 harness 层。

概念已经就位:harness 是模型之外的一切。但"一切"到底有多大的疆域?它和模型、沙箱、框架的边界画在哪?下一章我们用一张四者边界表和一张六组件全景图,把这块疆域正式丈量出来。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U