Claude Code和Codex并不是AI模型,而是“harness”(运行框架):包裹在模型外面的一层软件,让模型能够读取文件、执行命令、记住做过的事并检查自己的结果。这一区别比听上去更重要。把同一个模型放进两个不同的harness,在完全相同的任务上可能得到截然不同的结果。过去大约六个月里,编程和智能体基准测试上的许多大幅跃升,似乎更多来自更好的harness,而不是更聪明的底层模型。如果你在工作中选择、配置或依赖AI工具,harness与包装盒上的模型名称同样值得关注。
模型单独无法做到的事
大语言模型本身只是一个文本预测器。它接收文本,预测下一个最可能出现的token(模型读写文本的小单位)。经过海量文本训练,它学会了“The sky is”后面接“blue”的可能性远远高于“pterodactyl”。这种能力很强大,但裸模型有四个硬性局限。
| 局限 | 裸模型的表现 |
|---|---|
| 没有记忆 | 每次新对话都从零开始,不知道之前的会话 |
| 看不见 | 除非有人粘贴进来,否则看不到你的屏幕、文件或文件夹 |
| 不能行动 | 无法运行代码,只能描述人应该做什么 |
| 无法检查 | 没有办法测试自己建议的代码是否真的能运行 |
常见的比喻是“罐子里的大脑”:拥有大量原始智能,却无法开口说话,也无法对世界采取行动。另一个比喻是一匹没有马鞍和缰绳的烈马。它的输出可能在精彩与离谱之间摇摆。harness就是把这股力量引向目标的马鞍和缰绳。
在实践中,这意味着一个精心打造的harness可以让普通甚至低一档的模型交出出人意料的好结果,而顶级模型如果困在糟糕的harness里,可能发挥不出实力。最简单的harness就是大多数人已经在用的聊天窗口。但真正的工作需要复杂得多的东西。

▲ AI harness的五个组成部分
现代harness的五个组成部分
现代harness建立在五个组成部分之上。
- 上下文告诉模型在做什么、为什么做。
- 记忆在长时间会话中延续工作进度。
- 工具让模型采取实际行动,例如编辑文件和运行程序。
- 验证自动检查工作是否成功。
- 权限设定安全护栏和停止条件。
上下文:模型在开始时知道什么
每个会话开始时,模型对你、你的业务或你的项目一无所知。对裸模型输入“hello”,它无法叫出你的名字,也无法问你的项目进展如何。harness的解决办法是悄悄注入一段隐藏的开场提示词,其中包含项目概况、文件结构、近期改动和可用工具。
在Claude Code和Codex中,这类上下文很多来自CLAUDE.md或AGENTS.md等项目规则文件。这些Markdown文件可以写上“使用我们的代码风格”“不要编辑这个文件夹”“始终运行测试”之类的规则。由于harness每次启动都会自动读取,你不必在每条提示词里重复同样的指令。再加上一份代码地图,即auth.ts、cart.ts、api.ts这类文件的索引,模型就能直接找到所需文件,而不必扫描整个代码仓库。
记忆:让长时间会话保持正轨
随着会话推进,上下文窗口(模型一次能处理的文本量)会被对话、指令和工具输出填满。窗口大小是模型本身的属性,而不是harness的属性。当其中积累了数百万个token,相当于20到50本书的内容时,相互冲突的指令越堆越多,模型性能会明显下降。
harness用“压缩”来应对,即把冗长的历史浓缩成简明的摘要。压缩会保留最重要的内容:最初的目标、整体计划和已修改文件列表。中间步骤被浓缩成一段简短的摘要,失败的尝试和冗长的错误记录则被删除,以腾出空间。Claude Code在接近token上限时会自动执行这一流程。
现代harness也避免在每次编辑后保存每个文件的完整副本,而是像Git版本控制那样,保留一份只记录编辑内容的轻量变更日志。这样,智能体仍能还原之前的状态,而不会让重复文本挤满上下文。
工具:把文本变成行动
由于模型只输出文本,harness会用解析器把模型包裹起来,将特定的结构化文本识别为行动请求。模型发出这类请求后,harness会将其截获,与读取文件、搜索文件、运行程序或编辑代码等工具定义进行匹配,执行后再把结果返回给模型。请求遵循严格的schema(固定格式),因此参数总是有效的,可以直接执行。
有两项改进尤为突出。第一,模型现在只修改需要改动的那几行,而不是重写整个文件,从而减少了token消耗和语法错误。第二,由Anthropic创建、OpenAI也在使用的开放标准Model Context Protocol(MCP),已成为把智能体连接到外部软件的通用方式。借助MCP服务器,模型可以连接Slack、GitHub、日历、数据库或设计工具。你甚至可以让编程智能体为你自己的内部工具或数据库搭建MCP服务器。
验证:不要相信模型的自我审查
问模型自己的输出看起来对不对,它几乎总会回答是。模型没有内置计算器,也没有基本的合理性检查,因此可能给出错误答案并坚持己见。问它17乘以3,它可能回答48并坚称正确,只有借助外部计算工具才能确认答案是51。
因此,优秀的harness会在受控环境中运行模型的输出,再把真实结果反馈到提示词中。大部分工作由三类自动检查完成。
| 检查 | 作用 |
|---|---|
| 测试 | 给出明确的通过或失败结果,不靠猜测 |
| Linter | 找出代码中的错误 |
| 格式化工具 | 每次都统一为一致的代码风格 |
信号往往简单到只是一个退出码:0表示成功,其他值表示出错。有了这样的反馈,模型就能根据实际发生的情况自我修正。
权限:护栏、hook与沙箱
安全层会在执行前检查每一次工具调用以及每一串调用。编辑文件这类无害操作会自动放行。删除文件、删除已保存的工作、更改系统设置或向未知网站发送数据等风险操作,则会被拦截或需要你明确批准,人们熟悉的“是否允许?”确认就来自这里。如果智能体试图把项目数据发送到一个可疑的未验证域名,拦下它的正是权限层。
hook会加入在固定时间点自动触发的规则,例如“每次编辑后运行测试”或“永远不允许这条命令”。比如,电商开发者可以在每次代码变更后运行性能测试套件,以保障页面加载速度。执行前的防护机制还可以把新的外发请求与项目过去两周联系过的域名进行比对。
沙箱(如虚拟容器这样的隔离环境)是最后一道防线。一旦出现大量删除文件、覆盖文件或更改系统设置等问题,损害会被限制在内部。harness还会限制运行时间、内存使用和互联网访问。例如,Codex会为每个任务启动一个全新的隔离云环境。沙箱防范的不只是意外,它还能抑制对齐偏差,即能力较强的模型为追求效率而走不该走的捷径,例如下载外部数据或导出自身权重。
一种新兴模式是用第二个专用AI模型充当把关者,审查主模型的行动。这一思路很有前景,但似乎需要谨慎校准,而且目前大多数权限检查仍是程序性的。
各部分如何协同:ReAct循环
这五个部分在同一个循环中运转。自主智能体的标准模式是ReAct循环,即Reason(推理)加Act(行动)。
- 思考:模型查看上下文,决定下一步。
- 行动:请求一个具体行动,通常是结构化的工具调用。
- 权限:harness检查该行动是否被允许,或是否需要人工批准。
- 运行:获批的行动在沙箱内执行。
- 裁剪:删去臃肿的日志和无关输出,节省上下文空间。
- 读取:智能体查看裁剪后的结果,弄清发生了什么以及原因。
循环会一直重复,直到达成目标,随后智能体报告它改动了什么。

▲ 驱动AI智能体的ReAct循环
harness同样会影响思考环节。推理型harness会让模型先写出初步推理,并在任何工具调用或回答之前把它反馈给模型。开发者可以在这段初步推理后面加上“but”“however”或“yet”之类的词,促使模型审视自身假设中的漏洞和边界情况,从而对自己提出质疑。随后,harness会把模型的输出分为三个通道:内部思考、工具请求和发给你的消息。
harness能改变什么,不能改变什么
harness不会让模型更聪明,但会让它有用得多。这也是解读基准测试新闻的一个有用视角:分数突然上涨时,功劳可能很大一部分在harness。而且,与用数千块GPU训练前沿模型不同,构建harness就是普通的软件工程,独立开发者同样可以参与。
有四个方向可能塑造下一代harness。
- MCP无处不在:包括日历、邮件和文件系统在内,越来越多的应用通过MCP与智能体相连。
- 智能体团队:不同的智能体分别负责规划、构建、审查和测试,智能体之间相互通信并共享上下文。
- 并行尝试:一个任务同时在比如三个沙箱中运行,如果两个失败、一个通过,就由验证选出胜者。
- 自我改进的harness:harness研究过去的错误和失败的工具调用,并改写自己的规则。例如,发现某个智能体因读取整个目录而浪费token,就强制执行“先搜索”规则,可将token用量降到约十分之一。
现在该做什么
比较AI工具时,不要只看模型名称,还要问它运行在什么harness里。如果你在用Claude Code或Codex,以下几项改动就能带来很大不同:
- 在项目根目录放一个CLAUDE.md或AGENTS.md文件,写明代码风格、测试命令以及智能体不得触碰的文件夹。
- 不要问模型“这样对吗?”,而是让它的输出经过测试、Linter和格式化工具。
- 添加每次编辑后运行测试的hook,并要求删除和系统更改必须经过批准。
- 在设有时间和内存上限的沙箱中运行不受信任的智能体任务。
- 如果需要连接内部工具,就让智能体为它搭建一个MCP服务器。
想从AI获得更多,并不需要换一个新模型。只要收紧harness的这五个部分,就能从现有模型中挖掘出更多价值。