夜雨聆风学习资料网

ARTICLE · 1290041

每天一个AI知识点——Harness,同一个模型,为什么你和别人差 20 分

每天一个AI知识点——Harness,同一个模型,为什么你和别人差 20 分

做第 7 篇的时候,有一张图我怎么看都不顺眼。

一张四层的塔形图,四层都堆在最上面,下面空出九十五个像素,像一句话没说完就咽回去了。

按直觉,这时候该做的是换一个更会画图的模型。

我没有。我打开组件源码,找到那个外层容器,把 height: 400 改成 justifyContent: center。

重新渲染,图好了。

整个过程两分钟,模型一个参数都没动。

问题从来不在那个会思考的东西身上,而在包着它的那层壳。

这层壳有个名字:Harness。

 

一、模型只是循环里的一个函数

先看一张最不浪漫的图。

你以为 AI 干活是这样的:你说一句话,它想明白了,事情办完了。

实际上是这样:

装料 → 发问 → 执行 → 收账 → 判停 → 再绕回来。

五个步骤里,模型只出现在第二步。

步骤
谁在做
在做什么
装料
壳
把文件、历史、工具返回塞进窗口
发问
模型
吐一段话,或者一个动作
执行
壳
真的去跑命令、改文件、发请求
收账
壳
成功还是报错,原样收下
判停
壳
够了停,不够再来一轮
 

模型只会做一件事:根据你递给它的东西,猜下一个词。

它没有手。它不能读文件,不能跑代码,不能点按钮。它唯一能做的,是把「我想调用这个工具」写成一段文字。

真正去执行的,是壳。

真正决定这一轮该塞什么进去、上一轮的报错要不要原样回灌、跑到第几轮该放弃的,也是壳。

所以有个公式,2026 年被引用得最多:

agent = model + harness

LangChain 的说法更直接,几乎是甩出来的:harness 就是所有不是模型的东西。

系统提示、工具定义、执行循环、上下文裁剪、权限审批、状态存盘,还有那些写在仓库根目录的约定文件(CLAUDE.md、AGENTS.md),全都算。

 

有个细节能说明这件事有多彻底。

模型是无状态的。每一次调用,它都像刚睡醒,除了你递过去的那一叠纸,什么都不记得。

你觉得它「记得我们刚才聊过」,是因为壳每一轮都把之前的对话重新塞了一遍。

你觉得它「知道自己上次试过这个方案失败了」,是因为壳把失败的记录写进了下一轮的输入。

它的记忆不是记忆,是有人一直在替它复述。

二、它跟「框架」不是一回事

这是最容易混的地方,我拆开说。

这里说的「壳」,就是 harness。

  • 模型
    :权重,只会猜下一个词。比如 Claude、GPT、Qwen
  • 壳
    :已经跑起来的那个。比如 Claude Code、Codex
  • 框架
    :用来造壳的积木库。比如 LangGraph、Agents SDK
  • 沙箱
    :壳跑在里面的环境。比如 Docker、E2B

一句话分清:框架是你搭壳用的砖,harness 是搭好之后真正在跑的房子。

同一个 LangGraph,能搭出几十种壳,能力天差地别。所以「我们用了 LangGraph」这句话,信息量约等于零——就像说「我们家是用砖盖的」。

Anthropic 自己写得很清楚:Claude Code 就是 Claude 外面的那个 harness,而 Agent SDK 是把同一套 harness 打包成库,让你塞进自己的产品里。同一套东西,一种是给你用,一种是给你改。

这也是为什么同一个模型,在 Copilot 里、在 Cursor 里、在 Claude 自己的 App 里,手感完全不同。

模型是同一个,壳不是。

 

三、这个差别,是能测出来的

如果只是「手感不同」,那还是玄学。

但从 2026 年年初到年尾,好几组独立实验都在做同一件事:把模型焊死,只换壳。

结果比想象中暴力。

实验
改了什么
结果
Cline 对 SWE
整个壳
43.2%→59.8%
五壳对比
只换壳
38.6%→66.0%
裸壳对完整
壳的完整度
19.1%→73.4%

三组实验分别焊死的是 Sonnet 4.5、Qwen3.6-flash、GLM 5.1。一个参数都没重训。

最后一行最扎眼。同一个模型,配上简单适配器只解出 19.1%,配上完整的一套壳解出 73.4%。

顺带说一句,那个实验里还有个数字:补丁应用失败率从 69.1% 掉到 1.5%。

也就是说,之前大部分失败根本不是「它不会做」,是它做对了,但改动的格式没人接得住。

这不是模型的智力问题,是接口的工程问题。

还有一组更细的实验,只改一件事:改代码的格式。整块替换还是 diff 补丁?

同一批任务,16 个模型里有 14 个明显偏好其中一种。分数从 6.7% 到 68.3%。

连「改动怎么写」这种细节,都在壳的职责范围里。

 

四、最反直觉的一条:预算一宽,它就不值钱了

上面那些数字容易让人上头,觉得「壳决定一切」。

但同一份研究里,有一个对照组特别值得看。

固定壳,换九个模型,差距 29.4 点。

固定模型,换五个壳,差距 27.4 点。

同量级。

换壳很值钱,但没有比换模型更值钱。它们是一样大的两个变量。

真正有意思的是下面这个。

有一份研究把壳的改进拆开,只做两件很小的事:把过期的工具输出机械地截短,再识别出「在原地打转」然后插一句干预。

在 20k 窗口下,解决了 43 题变成 72 题(169 题里),分数从 28.0% 到 49.1%。

多解了 21 个百分点。

同一个改进,放到 262k 窗口下:

68.7% → 69.0%。

多解了 0.3 个百分点。

 

这个对比几乎是这件事的题眼。

harness 治的是「资源不够」,不是「脑子不灵」。

窗口小的时候,每一轮塞什么、丢什么,是生死问题。窗口大到随便塞,那点裁剪技巧就变成了挠痒痒。

所以别信「壳决定一切」这种标题。准确的说法是:约束越紧,壳越是瓶颈。

什么时候约束最紧?

长任务。 跑几十轮、跨好几个会话、中间还可能断掉重来的那种。

这也是为什么 Anthropic 专门写了一篇《Effective harnesses for long-running agents》——短任务用个轻壳就够了,跑一整天的任务不行,它会忘、会超窗、会自认为做完了。

五、出问题先查六样,别急着换模型

我现在的习惯是:AI 干得不好,先别动模型,按这六项过一遍。

查什么
症状
怎么修
看见什么
答非所问
三份相关文件,赢过四十份
怎么回灌
反复犯同一个错
别扔原始 traceback,说清哪一行失败
何时停
无限打转,或者早早放弃
重试和放弃的规则要写死
谁验收
明明没做完却说做完了
跑测试,别让它审自己
记在哪
换个会话全忘
进度写盘,别只留在上下文里
谁批准
危险动作直接执行
不可逆的操作必须先问人

前五条基本都是壳的活。第六条是底线。

判断标准其实只有一句:

丢进度、爆窗口、原地重复同一个失败动作——这是壳的病。

计划本身就烂、需求理解错了、方案在方向上就不对——这才是模型的病。

两种病的治法完全不同,价钱也差着一个量级。

 

六、但也别把壳造得太重

说完壳多重要,得泼一盆冷水。

最近有个倾向:不管干什么,先搭一套带子代理、带记忆、带审批的重型框架。

给一次性任务配一套重型壳,是最贵的错误。

判断标准只有一条:这活会不会跑很多轮?

跑一轮就完事的,壳越薄越好。写个脚本,调一次接口,完事。

要跑几十轮、跨会话、中途有人接手的,才值得投资壳。

还有三种白费力气:

做法
后果
所有活塞进同一个壳
每个活都别扭
报错不解释直接回灌
它蒙着眼重试十次
不可逆动作没有闸门
一次失误要赔钱

壳的成本在维护,不在写。

写一个壳可能是一下午的事,维护它是往后每一天的事。多一行逻辑,就多一处会坏的地方。

 

七、九篇串起来,是一整条链路

写到这里,这个系列其实已经闭环了。

篇
讲的是
在整条链路里
01
API
怎么接上
02
Token
怎么算账
03
提示词
怎么说话
04
Agent 记忆
怎么记事
05
RAG
怎么查资料
06
工具调用
怎么动手
07
MCP
手从哪来
08
Skill
按谁家规矩动手
09
Harness
谁决定什么时候动手

前八篇讲的都是零件。第九篇讲的是把它们装在一起的那个东西。

零件可以买,壳只能自己调。

因为壳里装的全是「你们家的情况」:你的工具、你的权限、你的验收标准、你踩过的坑。

模型是租来的,壳是自己盖的。

这大概也是这一年最实在的一个结论:与其等下一代模型,不如先把壳修一修。

最后留个问题。

你最近一次觉得「AI 怎么这么笨」,是在它答错的时候,还是在它明明能做、却没做完的时候?

如果是后者——那多半不是它笨。

是有人没告诉它什么时候该停。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料