你打开 chat.anthropic.com,让 Claude 帮你改一份代码。它给你回了一段建议,让你"自己照着改一下"。
同一天你打开 Cursor,让里面的 Claude 帮你改一份代码。它直接打开了你电脑上的文件,把代码改了,还顺手跑了一下测试。
模型是同一个 Claude,结果差这么远。差在哪里?差在 Claude 身边那个"东西"不一样。这个东西,业内有个名字,叫 Harness。
前三篇科普分别讲了 谁在干活、什么是 agent、AI 为什么忘事。本文是第四篇,会把前面三篇里出现过的零件统统收编到一个名字下。
先把概念立起来
一句话先记住:
Agent = 模型 + Harness
- 模型是大脑。会说话、会推理,但只会动嘴
- Harness 是给这个大脑配的"工位"。让它从"只会动嘴"变成"手脚都能动的员工"
你前三篇里读到的"助手软件""循环""分身""上下文管理"——这些零件其实都属于 Harness。这一篇正好把它们归到一起。
模型本身其实啥都干不了
要理解 Harness 为什么必要,先看看模型自己能干啥。
把云端那个模型直接拉出来,它能做的只有一件事:你给它一段文字,它输出一段文字。
仅此而已。它不能:
- 自己点鼠标、敲键盘
- 自己读你硬盘上的文件
- 自己上网搜东西
- 自己记住上次聊过什么(每次调用都是空白起步)
- 自己决定"我要再来一步"(它只输出文字就结束了)
所以模型本身只是一个输入文字、输出文字的函数。它不是 AI 助手,它是 AI 助手里那颗会说话的脑子。
那是谁让这颗脑子变成"能干活的助手"的?是 Harness。
Harness 长什么样
Harness 不是某个软件、某个产品名。它是一套围绕模型搭起来的脚手架。这套脚手架由几个零件组成:
零件 1:循环控制器
模型说完一句话就停了,它不知道自己该再来一步。
Harness 看到模型说了"我想用搜索工具",就自己再调一次模型问"工具结果是 XXX,那你下一步呢"。再看到模型说"我想读这个网页",又再调一次模型。
第二篇文章里讲的"主 agent 跟模型来回 6 次"——这 6 次来回不是模型自己跑的,是 Harness 在反复"按"模型这个按钮。模型每被按一下,输出一段话,Harness 拿到话之后再决定按不按下一次。
循环是 Harness 的,不是模型的。
零件 2:工具的执行器
模型说"我想用搜索工具搜星巴克定价"——它只是输出了这十几个字。真去调搜索 API 的不是模型,是 Harness。
Harness 拿到这段话,识别出"哦它要调搜索",自己去调真正的搜索接口,把结果拿回来塞进对话里,再让模型看下一步。
模型那边一直只是"输出文字",从头到尾没碰过任何工具。所有"动手"的事都是 Harness 在做。
零件 3:上下文管理器
第三篇讲过,模型每次调用都是空白起步、自己记不住任何东西。要让 AI"接着上次的话题聊",得有人每次调用前把历史塞进去。
塞什么、不塞什么、塞多少、什么时候压缩、什么时候新建会话——全是 Harness 决定的。模型只是被动接收别人塞给它的那段文字。
第三篇里讲的"杯子越来越满""偷偷压缩早期对话""滑动窗口"——这些都是 Harness 在管。模型自己什么都不知道。
零件 4:系统提示和规范
你用 Cursor 时它一开口就"知道"你在写代码、知道要遵守某些规范。这不是模型自己懂,是 Harness 在每次调用前偷偷加了一段开头,比如:
你是一个谨慎的程序员。修改代码前先读相关文件,改完之后跑测试。不要写注释。如果不确定就停下来问用户。
这段话用户看不到,但每次调用模型时都被塞在最前面。模型读到之后才"知道"该怎么干活。
不同 Harness 给的开头不一样,所以同一个模型在不同产品里表现得像不同的人。
零件 5:错误恢复
模型说错了、工具报错了、网络超时了——这些情况下该怎么办?模型自己是不知道的,它只会再说一句话。
Harness 负责处理这些事:是重试、是换个工具、是让模型反思一下、还是直接告诉用户失败了。这些逻辑全都写在 Harness 里。
零件 6:分身的调度
第二篇讲的"分身",也是 Harness 的功能。模型说"我要派 3 个分身"——它只是输出了这句话。真去开三段新对话、把任务分给三个分身、最后把结果合并回来的,是 Harness。
模型自己不知道有"分身"这个概念,它只是输出了一段请求,剩下的全是 Harness 在干。
一句话归纳
Harness 就是模型周围所有"非模型"的代码。它把那颗只会输出文字的脑子,包装成一个能在你电脑上真的干活的助手。
同一个模型,不同 Harness 差多远
理解了 Harness 是什么,就能解释一个普通用户经常遇到的现象:为什么同一个 Claude,在不同地方表现差好几个量级。
| 产品 | 用的模型 | Harness 的样子 |
|---|---|---|
| chat.anthropic.com 网页 | Claude | 薄壳:只有一个对话循环,没工具、没文件读写 |
| Claude Code(命令行工具) | 同一个 Claude | 厚壳:加了 bash、文件读写、todo 列表、规范文档加载 |
| Cursor | 同一个 Claude | 另一种厚壳:加了代码索引、自动跳转定义、diff 应用 |
| Devin(AI 程序员) | 也用 Claude | 超厚壳:加了浏览器、shell、长任务记忆、多 agent 协作 |
模型一样,Harness 不一样,能干的事差好几个量级。
你以为是"Cursor 比网页版的 Claude 强"——其实更准确的说法是 "Cursor 的 Harness 把 Claude 用得更顺"。模型没换,是工位变了。
为什么 Harness 这么重要
理解了这个层级关系之后,你会发现一些反直觉但合理的事实。
升级 Harness 经常比换模型更划算
Cursor 这家公司不发模型,他们用的还是 OpenAI 和 Anthropic 的模型。但他们把 Harness 做得越来越厚——同样的模型,去年到今年的体验飞跃,全都来自 Harness 升级。
这就是为什么"AI 编程工具"这个赛道这么卷。模型大家用的都差不多,真正拉开差距的是 Harness。
厚不一定好
Harness 不是越厚越好。塞太多 SOP、限制太死、工具太多模型选起来犯晕——这些反而会让模型变笨。
像把一个聪明员工绑死在 100 页的操作手册里,他反而做不出东西。
模型决定上限,Harness 决定下限
- 一个再厚的 Harness,套在一个笨模型上,也写不出来好代码(模型决定它最多能做到什么)
- 一个再聪明的模型,套在一个薄 Harness 里,也只能给你"自己照着改一下"(Harness 决定它最少能做到什么)
两者都重要,但很多用户只关心模型,忽略了 Harness 的份量。
Benchmark 跟实际体验是两回事
排行榜上的"GPT-5 在 SWE-Bench 60%"指的是 GPT-5 套在那个 benchmark 自己定的 Harness 里、修了 60% 的 bug。
你在 Cursor 里用 GPT-5——Harness 不一样了,结果也不一样。可能更好(Cursor 的 Harness 经过精调),也可能更差(如果 Cursor 还没适配新模型)。
所以看到"模型 A 比模型 B 高 5 个点"先别太当真,看是在哪个 Harness 下测的。
几件值得说一下的事
Harness 是个工程概念,不是某个产品名。 你用的所有 AI 助手——Cursor、Claude Code、ChatGPT、豆包、元宝——背后都有一个 Harness 在跑,只是各家的 Harness 厚薄差很多。"Harness" 这个词主要是开发者圈里在用,普通用户日常不会碰到。
同一家公司可以有多个 Harness 共用一个模型。 Anthropic 自家就有好几个壳:网页 chat、Claude Code、API 直连。三个产品用的都是同一批 Claude 模型,但每个产品有自己一套 Harness,体验差得很远。
开源 Harness 已经追上闭源。 OpenHands、Aider、Cline 这些开源 Harness 现在的水平已经接近 Cursor 和 Devin。这件事的意思是:做 Harness 的难度,正在被开源社区追平——再过一两年可能任何人套个开源 Harness + 顶级模型,就能拿到接近商业产品的体验。
Harness 是 AI 时代真正的"产品力"。 模型能力大家差不多,最近一两年所有"AI 应用"层的创新——Agent、Computer Use、长任务、多模型协作——本质上都是 Harness 创新。模型公司发模型,应用公司做 Harness,分工越来越清楚。
几个容易搞错的事
Cursor 比 Claude 强。 这个说法不太对。Cursor 是壳,Claude 是脑,不是同类东西。准确说法是"Cursor 的 Harness 把 Claude 用得更顺"。Cursor 自己没有模型。
AI 在思考下一步。 不太对。模型只输出文字,输出完就停了。"做下一步"这个动作是 Harness 在执行——它看到模型输出了"我想用 X 工具"这五个字,自己去调 X 工具,再把结果塞回去让模型继续输出。模型本身不"思考"任何"下一步",它只是被反复调用。
换个更强的模型 Cursor 就更强。 不一定。Harness 是针对特定模型精调的,新模型如果还没被 Harness 适配(比如它的工具调用格式变了、思考方式变了),效果可能反而更差。这就是为什么有时候你切到"最新模型"反而觉得变蠢了。
Harness 里有 AI。 大部分情况下没有。Harness 主体是普通代码——if-else、for 循环、HTTP 请求、字符串拼接,本身不"智能"。但厚一点的 Harness 里确实会嵌一些小模型当帮工:比如让一个便宜的小模型先看一眼大模型的回答有没有跑偏、用小模型给历史对话打分决定哪些值得保留、用小模型先判断这次任务该交给谁。这些嵌进去的小模型本身仍然是"模型",外面那层调度它们的代码才是 Harness。所以更准确的说法是:Harness 自己不智能,但它可以雇一些小模型来帮它把活干得更细。
所有的 Agent 框架都叫 Harness。 不太对。这里有个层级要分清:LangChain、AutoGen、CrewAI 这些是开发框架,相当于一套搭 Harness 的"工具箱"——锯子、锤子、钉子都齐了,但本身不是椅子。用 LangChain 搭出来、跑在某个产品里的那一整套运行系统,才是 Harness。框架是原材料,落地后的成品才是 Harness。所以你说"Cursor 的 Harness 是 ..."、"Devin 的 Harness 是 ..."都对,但说"LangChain 是一个 Harness"就不准确了。
一句话
模型决定 AI 能"想到"多远,Harness 决定它能"做到"多远。
你用一款 AI 助手时,看到的"它会用工具""它会自动跑测试""它能记住前文"——这些能力大部分都不是模型自带的,而是 Harness 在背后帮模型实现的。下次再夸"这个 AI 真聪明"的时候,可以稍微想一下:聪明的可能是模型,但真正让你用得顺的,往往是它的 Harness。