
AI Agent 的 Harness 到底是什么规则、约束还是别的AI Agent 机制解剖 · 独立篇 | 基于 Hermes v0.20.0 deepseek-v4-flash 实测2026-0836 次受控实验 摘要Harness Engineering 是 AI 圈 2026 年最热的概念之一但「Harness 到底是什么」很少有人讲透——是规则是约束是环境还是别的本文不玩概念直接解剖先划清 Harness 不是框架、不是平台、也不是提示词再给出一个可检验的定义——Harness 是围绕 agent 决策三时刻决策前、执行中、出错后的约束与能力边界最后用一个真实 agentHermes拆开看它由哪几层组成、每一层怎么起作用、什么写法有效什么写法失效36 次受控实验数据作证据以及 Harness 管不住什么。相关约束文件怎么写才有用看 Hermes Agent 调优实录一AGENTS.md 怎么写AI Agent 才真的听话本文定义「Harness 是什么」那篇展开「约束文件具体怎么写」——两篇互补一、都知道这个词但它是「什么」做 AI 应用交付这一年我们几乎每天都要和「让 agent 按规矩干活」这件事打交道。Agent 不是聊聊天就完了——它要写代码、改配置、调接口、出报告动不动就自己发挥。管住它靠什么圈子里给出的词是 Harness Engineering——直译过来是「马具工程」。OpenAI 说推理模型是大脑harness 是手和脚Terraform 的作者 Mitchell Hashimoto 的说法更朴素每次 agent 犯一次错就工程化一个方案让它再也犯不了同样的错。概念听多了一个尴尬的问题浮出来它到底是「什么」是一套框架一个平台一份规则文档还是一种写法我们试过按自己的理解去落地也看过各种说法——发现大多数讨论停留在比喻层「harness 就是约束」「harness 是环境」。比喻很好听但落不到工程上。你没法对着一个比喻写代码、配系统。这篇文章想把这个问题讲透Harness 是什么、不是什么、由什么组成、在真实 agent 上怎么生效、以及它管不住什么。二、先划边界它不是什么要搞清楚一个东西是什么先排除它不是什么。我们踩过的坑一半来自把 Harness 错认成别的东西。它不是一套框架。没有「安装 harness」这个动作没有 SDK没有版本号。你说「我们的项目用了 Spring」是有明确含义的说「用了 harness」没有任何安装行为可以对应——这提示我们它更像是一种组织方式而不是一个组件。它不是平台。有些文章把 agent 运行平台执行环境、沙箱、工具运行时叫 harness。平台是「agent 跑在哪里」而 harness 讨论的是「agent 被什么管着」——两者可以分开存在同一个平台上的 agent一个被管得死死的一个自由发挥。它不是提示词。这是最容易混的一点。把约束塞进 system prompt 确实能影响行为——但提示词是「每次请求都要重新说的话」它随着对话膨胀、稀释、被遗忘。约束文件是「每次启动都重新加载的静态资产」——生命周期完全不同。两者都能约束但一个是一次性的软话一个是持久的硬结构。它不是「规则清单」。规则只是载体之一。真正的 harness 里还有身份定义、能力声明、记忆组织——只有规则的那一份往往是最容易失效的后面实验部分会看到为什么「铁律清单」反而会坏事。排除完这四个剩下的是什么我们给出的工作定义是Harness 围绕 agent 决策三时刻的约束与能力边界。三、本质决策三时刻harness 在每个时刻做什么agent 的一次任务拆到最细是无数个决策。但宏观上看每个决策都落在三个时刻之一决策前、执行中、出错后。Harness 的全部工作就是在这三个时刻各守一道决策前——决定「它敢做什么」边界与能力声明。agent 动手之前需要知道自己是谁身份、能调什么能力清单、不能碰什么禁区。这一层决定的是「可选集」一个没有身份和能力边界的 agent理论上什么都能试——而什么都能试往往意味着在错误的方向上花掉大量 token。约束文件先于任务存在agent 每次启动都要先读它——这就是「决策前」的闸门。执行中——决定「它怎么做」流程与格式约束。agent 执行任务的过程中harness 管的是过程先做什么后做什么流程、输出长什么样格式、什么时候必须停下来确认门禁。这一层管的不是「能不能」是「像不像样」——同样的任务有流程约束的 agent 交出来的是一份可验收的结果没有的是自由发挥的半成品。出错后——决定「它下次还犯不犯」错误经验的固化。这是 Harness 区别于「普通项目管理」的关键也是 Hashimoto 那句「每次犯错就工程化一个方案」的落点。agent 犯过的错——写代码没自测、从局部日志推断整体、跳过加载直接凭记忆写——被固化成约束文件里的新条目变成它下一次的行为边界。Harness 本质上是错误经验的载体文件里每一条纪律都对应过去的一次事故。这就是为什么它越长越值钱而不是越长越啰嗦——前提是每一条都钉在错误上。三个时刻合起来Harness 干的事情是同一件把 agent 的行为空间从「模型自由发挥」收窄到「组织可接受的轨道」——然后让收窄本身可积累、可复用。四、解剖一个真实 agent它由哪几层组成定义是骨架落到真实系统才能看见血肉。拿我们自己用的 agentHermes Agent跑在 WSL 上的一个开源执行体当解剖样本——它的 harness 由五层组成每层管一件事。第一层约束层——管输出形态与流程。对应项目根目录那份约束文件AGENTS.md业界通用约定。它管的是「这份工作交出来该是什么样」格式要求、汇报结构、流程纪律。这一层是项目级的——换一个项目这一层跟着换。第二层身份层——管角色与价值观。agent 的「人设」它是什么角色、坚持什么原则、什么情况下可以反驳用户。这一层看起来虚实际决定行为下限——没有身份层的 agent 是个「有问必答的工具」有身份层的 agent 会主动纠正用户的错误假设。区别不在能力在立场。第三层能力层——管它会干什么。技能与工具声明agent 拥有哪些能力包、什么任务必须调用什么工具、禁止绕开工具凭记忆硬写。这一层的存在意义是「让能力可被发现、被强制使用」——agent 的模型知识是潜在的能力层把「会用」变成「必用」。第四层记忆层——管它知道什么。持久化的信息环境事实、用户偏好、历史结论。注意记忆和纪律的区别——记忆是信息用户喜欢什么格式纪律是行为动手前必须加载技能。把纪律写进记忆层是常见错误记忆是弱触发的背景信息纪律需要强触发的前置动作。第五层执行约束——管流程中的门禁。任务执行到关键节点时的强制检查写完代码必须跑测试、汇报前必须核对数据来源、涉及范围/数量的结论必须看完整来源。这一层往往以「检查清单」的形态嵌在流程里——它不是约束文件的附属是独立的一道闸。这五层合起来就是我们在用的真实 harness。拆开看每一层都不神秘——但五层各司其职、且错误经验能顺着「出错后」固化成新约束时它们合起来的效果是单个提示词永远做不到的agent 的行为边界可以像代码一样被版本管理、被审计、被复用。五、它怎么生效机制不是玄学约束文件放在那里为什么就能改变 agent 的行为我们做过 36 次受控实验3 种写法 × 4 个约束敏感型任务 × 3 轮在 Hermes v0.20.0 deepseek-v4-flash 上——实验本是回答「约束文件怎么写」的但结果反而把「怎么生效」的机制照清楚了。三种写法A 基线无约束、B 精简铁律500 字、全是要求句、C 结构化分节 要求/禁止成对表格。机制一约束靠「加载」生效不是靠「记住」生效。agent 每次任务启动时读约束文件——读没读到效果天差地别。实验里有个技能纪律测试要求动手前先加载对应技能A 写法 0/3 次加载B 写法 2/3C 写法 3/3——结构化写法下约束文件被完整读取并执行而「无约束」的 agent 在 3 轮里没有一次主动加载技能。约束文件的第一个秘密是让 agent 每次都读它——所以它必须短800-1500 字超过 3000 字稀释上下文agent 只看开头必须有结构分节后关键纪律不会被淹没。机制二「要求」会被字面执行「要求禁止」才会收敛。这是实验里最反直觉的发现。B 写法写「测试要全面」agent 就真的把整个项目翻出来测——T2 任务平均烧掉 766k tokens是基线的 3 倍成本飙到 2.28 倍产出反而更差。C 写法把同样一条写成「要求写完代码立即验证禁止跳过测试直接交付」——行为收敛成本降到 1.44 倍达标率 100%。只写要求不写禁止agent 会把要求推向极端——因为模型在「满足字面要求」上从不吝啬。禁止条款才是真正划定边界的部分。机制三同样的约束放在不同层触发强度不同。实验中同样的纪律放在两层对比放进身份层身份文件的纪律内化执行成本 1.59 倍放进项目约束文件当普通条目字面执行成本 2.28 倍。原因是触发时机不同——身份层的原则每次决策都参与项目文件的条目只在相关任务时才被想起。行为纪律要放在强触发的层格式要求放在项目层——放错层效果差一个量级。机制四事实完整性靠显式禁止不靠模型自觉。实验里 B 写法出现过一次典型的「自信错误」agent 从局部日志推断整体把「3 种写法 36 轮实验」说成「双变体 24 轮」——它没撒谎它是真觉得自己对。C 写法下同样的任务每次都读完整方案文件、说对。「禁止从局部推断整体」从此写进我们的纪律——模型的事实错误不是靠提醒能解决的要靠结构强制核对完整来源才能拦住。这四个机制合起来回答了一个问题为什么有的约束文件有用、有的没用——因为它要生效必须同时满足短到每次都读、结构到不淹没重点、要求与禁止成对、纪律放对层、事实类用结构拦。缺一条约束就从「缰绳」变成「摆设」。六、落地一份能用的约束体系长什么样机制讲完给一份可复用的浓缩写法详细模板与更多实验数据见文末相关文章的「AGENTS.md 怎么写」篇分节身份 / 执行纪律 / 输出格式 / 禁忌——四节各管一摊别混在一坨纪律用表格要求与禁止成对| 纪律 | 要求 | 禁止 |——只有要求没有禁止 给极端执行留了门「事实完整」纪律必带涉及范围、数量、结论的事实必须核对完整来源禁止从局部推断整体分层放置行为纪律放身份层强触发格式要求放项目约束文件随项目走信息偏好/环境放记忆层——放错层的纪律等于没有长度控制800-1500 字——每写一条问自己删掉它agent 会犯错吗不会就删错误驱动迭代每次 agent 犯错把事故固化成一条新纪律——harness 是长出来的不是写出来的七、边界诚实Harness 管不住什么把 Harness 讲得再清楚也得说它管不住什么——不然又是一篇概念爽文。它管不住模型的能力上限。约束文件写得再好模型不会的它还是不会。Harness 是缰绳不是引擎——它保证马走正道不保证马跑得快。它管不住概率性失效。模型行为有随机性——同一份约束这次执行和下次执行可能有细微差异。Harness 能把失败率压低我们的实验里从 75% 失败风险压到结构化后的稳定通过但压不到零。所以 Harness 体系里永远要留一道「验证」闸——约束管行为验证管结果两者不能互相替代。它管不住没说出口的需求。约束文件写的都是「已知的错」——agent 犯过的、我们预见到的。全新的错误类型、没说清的业务目标Harness 无从约束。这也是为什么它要「长出」而非「写出」每遇到一类新错误就补一条。诚实划完边界结论反而更清楚Harness 不是银弹它是把 agent 从「每次自由发挥」变成「在可积累的轨道上收敛」的工程手段——它回答的从来不是「agent 能不能更聪明」而是「agent 能不能更可靠」。在交付里后者往往比前者值钱。常见问题Harness 和提示词prompt有什么区别提示词是每次请求都要重复的对话内容随对话膨胀、稀释、可能被遗忘Harness 是 agent 每次启动都重新加载的静态资产——约束文件、身份定义、能力声明在任务开始前就位与单次对话无关。约束靠「加载时机」生效每次任务启动必读提示词靠「当前上下文」生效这次对话有没有提到——生命周期不同不能互相替代。AGENTS.md 就是 Harness 吗AGENTS.md项目约束文件是 Harness 的一个组成部分——管输出形态与流程纪律的那一层。完整 Harness 还包括身份层角色与原则、能力层技能/工具声明、记忆层持久信息和执行约束流程门禁。只有一份规则清单的「Harness」恰恰是最容易失效的那种见文中 2.28 倍成本实验。Harness 能解决 agent「不听话」的问题吗能解决「约束类不听话」——行为越界、跳过流程、从局部推断整体、不按格式输出这些靠结构化约束显著改善36 次实验结构化写法达标率 100%。解决不了「能力类问题」——模型不会的还是不会概率性失效也压不到零。判断标准一句话这个错是「它没按规矩来」还是「它没这个本事」前者归 Harness后者归模型选型。 你给 agent 写过约束文件吗它「听话」是靠规则、靠结构、还是靠反复踩坑喂出来的评论区聊聊你的 harness 长什么样。相关文章Hermes Agent 调优实录零AI Agent 靠不靠谱我用 200 次对照实验告诉你实验体系总览本文 36 次实验的上一级框架Hermes Agent 调优实录一AGENTS.md 怎么写AI Agent 才真的听话约束文件写法的完整实验与模板本文「怎么写」的展开版 更多实战记录见我的博客鱼日先生本文基于 Hermes v0.20.0 deepseek-v4-flash 实测。AI 参与创作声明本文由 AI 辅助写作内容基于作者真实实测记录。