就在今年的二月五日啊,在 gigahub 上广受欢迎,拥有五点二万四大的开源中端 ghosting 开发者米奇尔乔本,他发表了一篇叫 my ai adoption journey 的 博文啊,讲他自己使用 ai 的 心路历程。你可能没听过乔本这个人,但你一定知道,现在不少人使用 cologne 呢,都是在 ghosting 这个终端模拟器上用的。 主要原因呢,是因为界面酷美好看,比如这个彩虹桥,还有就是 cloud code, 完成任务后能主动发出通知,而不用你时不时打开查看镜果。 构思的作者描述了自己用 ai 工具的六个阶段,从最开始的放弃聊天界面,到自己用 agent 付钱手头的工作,到每天工作结束前都会去跑一个 agent, 让他利用下班时间去做点事,再到能把外包的任务呢,就全部都外包给 ai, 写的非常的坦诚啊,包括他自己一开始也觉得 agent 没什么用, 也觉得不如自己做。然后在第五阶段,他说他开始搞一件事,他把它叫做 engineer the harness。 他的原话大致是这样,每次当你发现 ai 犯了一个错误, 你就花时间设计一个解决方案,让他永远不再犯那个错误。我不知道业界是不是已经有一个统一的术语了,但我开始管这件事,叫 harness engineering, 就是 这篇看似朴素的文章,第一次扔出了 harness engineering 这个说法。 然后 harness engineering 呢,在技术圈里就流传开了。五天后啊,二月十一日, openai 前沿技术研究团队的负责人 瑞安洛波波洛发表了一篇关于 harness engineering 的 文章,讲他们团队呢,如何落地 harness engineering 的 文中有一句话揭示了 harness 的 观念, human steel agents execute, 也就是人类驾驭 agent 执行。接下来两个月, 全球技术咨询公司斯特沃克的首席工程师比尔基塔伯克勒,在重构这本书的作者,也就是被誉为软件开发教父的马丁福勒的扑克上,发表了正式定义 harness engineering 的 文章,叫 harness engineering for coding agent users。 这里面有三个直接 harley's, 本质却很简单的概念,我们等会儿都会提到。接着呢,是全球企业级开源软件公司啊, redhead, 也就是红帽的首席软件工程师马可里奇。 他写了一篇关于 harley's engineering 的 文章,介绍在 a f 辅助的开发场景下面,如何使用结构化的工作流来提升 agent 的 效果。他在文章里提了一个让我印象很深的观念,用一句话概括就是 wake in wake out, structure in structure out。 也就是输入越模糊,输出就越不可控。而给的结构越清晰呢,出来的东西就越靠谱。比如你让 agent 呢,给你装修一套房子, 不能只说帮我装修,至少得先给他一个结构和风格背景。比如我有三室一厅,主卧、次卧、厨房、厕所、客厅,分别偏好什么样的风格。就这样,一个新的 agent 的 工程观念诞生了, agent 等于 model 加 harness, 那 harness 到底指什么呢? harness 这个词啊,原来的意思是婉拒,就是马干活时身上套的那个东西,用来控制马跟泥、跟车之间的写作关系的装备,确保马能高效、稳定、安全地完成任务。 这个比喻呢,真的是很妙。很多人一提 ai agent, 脑子里想的还是怎么把提示词写漂亮。比如,呃, prop engineering 啊,怎么给模型更好上下文,比如 context engineering。 但 harley's engineering 讨论的是怎么给模型配环境、配工具、配约束、配反馈,配一整套能让它稳定干活的 工作台。所以, agent 等于 model 这匹马,加上 harness 这套玩具这句公式,是不是感觉一下就出来了? model 呢,是那个会推、你会深沉、会瞎编,也会灵光一现的大脑。而 harness, 是 模型以外的一切 系统题词, skill、 m c p 约定、 memory 测试、 link 验收标准、任务拆分方式,甚至你决定在 cloud code 的 一个窗口里应承半小时,还是做完一轮就开一个新的窗口,这些都算。那 harness 为什么突然重要起来了呢? 因为 ai 写代码的速度啊,已经快到人类肉眼审察跟不上了。根据谷歌 devops 团队的观察报告显示, ai 渗透率越高,软件吞吐量和交付不稳定性往往一起上升。 而应用安全太水管理公司的 piro 在 二零二五年九月给出的数据也很惊人,截至二零二五年六月, ai 生成代码每月新增的安全风险已经超过了一万项,这比二零二四年十二月提高了十倍。 我当时看到这个数字的时候有点愣住,但想想也合理,以前的工程瓶颈是任务做的太慢,现在呢,越来越是做的太快了,快到你根本看不过来。在 ai 产出速度方面,人类平整速度硬追是追不上的,看不过来,所以经常就不看了。但 bug 率、安全风险不断增高,也不能不管。怎么办呢? 是的,这才是 harley's 被正式提出来引起广泛重视的本质原因。我们必须通过预判 agent 的 预判,来提升 agent 一 次执行成功的概率,从而弥补人工审查不足导致的产品问题。 这就要提到 harley's 两个目标,一个是提高首次正确率,就是他第一次出手就别那么离谱。第二个是建立反馈回路,让很多问题呢,在抛到你眼前之前啊,先被 agent 自己揪出来,自己去修复一轮。 这两件事听起来平平无奇,但是我是真的觉得,几乎所有用过 agent 的 人的烦恼到头来都能落回到这两个点上,要么他第一次就偏了,要么他错了以后没有一个像样的机制把他拉回来,导致还得扣人工。为了实现这两个目标呢, 斯特沃克的首席工程师啊,比尔基塔伯克勒在正式定义哈里斯三零零零年的那篇文章里啊,把对 agent 的 驾驭分成了两类,盖子和 censor 斯。 guess 呢,是 agent 的 引导器,又叫前馈控制器。而 sensors 呢,是 agent 的 传感器,又叫反馈控制器。 guess 呢,在任务开始前就介入,告诉 agent 应该怎么思考,哪些东西别碰。像 agent 点 m d 啊, clock 点 m d 啊,这些都属于盖子。 而 sensors 呢,则是在 agent 做完之后开始审查,告诉 agent 什么算成功,什么不算,像单元测试啊, int 啊,这些都算 sensors。 接着,伯克勒还提出了 steering loop 的 概念, 用来表达在发现 agent 犯错后更新 guides 和 sensors, 从而让 agent 下次不再犯同样的错误的这个回路,因此叫引导回路。我是真的觉得这些我好像平时也或多或少这么做过,但是讲不出来自己是在做一件什么样的事情。 而 harness engineering 呢,一下就把很多零碎的技巧装进了一个体系里。你以前可能觉得自己只是在写一个 cloud 点 m d, 或者是让 cloud code 呢?每次先列计划再写代码,或者是每次把 agent 成功完成任务后,你会让他把过程中犯的错记录到 memory 呃,避免下次再犯。 现在你会发现,这些动作全都属于 harness engineering, 只是落在不同的时机而已。然后呢,伯克勒把盖子和 sensors 这两类控制器横切一刀, 又分出了推理型和计算型。计算型很好理解啊,就是用脚本代码去做预处理和判断,它的确定性很强,快不花 token, 像格式清理啊,单元测试啊, int 这些都属于计算型。而推理型呢,是交给模型去做于理解 和判断。像原则啊,风格啊,规范啊这类更灵活,需要模型参与,但也更慢更贵更不稳定的方式呢,就属于推理型。有些要求啊,与其在 prop 里面耳听面面八百遍,不如让 agent 写一个代码,脚本每次直接运行脚本来处理,或者做检查,又快又稳定,还不骄傲 toker。 所以伯克勒对这个问题的态度呢,很直接。能用计算型就别用推理型,比如让模型检查一百万字的文章里是不是有不符合标点规范的地方,可能要等几十分钟啊,还不稳定。而让脚本来检查呢,可能只要几秒钟,又快又稳定。 说到这个,还有一个我以前没太意识到,但是看完 harley s 之后觉得很重要的一个词叫 harley s ability, 也就是可 harley s 信。什么意思呢?你可以把它理解成我们给 agent 选的技术站,在驾驭 agent 的 方面构不起来。 如果你做个 web coding 呢,一定深有感触。同一个大模型,写 type script 往往比写 javascript 稳得多。写 next 连 js 这种约定化的框架呢,远比裸写一堆零散的前端脚本来就顺畅。写 supreme 这类强范式的框架呢,也比随手去拼凑一些松散的 javascript 项目靠谱很多。 大家通常只会归结为,呃,框架和静态语言的训练数据更充足。这当然是一部分原因啊。但从 harness ability 的 这个视角来看,还有一个更核心的底层逻辑。这些成熟的技术栈呢,本身就自带一套完美的类制软件 强类型系统,是软件标准化陈述框架,是软件约定俗成的目录结构与工程规范,是软件完善的 int 生态 skill 教育统一编码范式,通通都是软件。 我越发觉得,从这个视角来看,就能解释绝大多数的 code 项目为什么写到后面越写越失控的原因。很多时候,不是你的 prop 写的不好,也不是模型突然抽风了,而是从一开始你就给 agent 这匹马配了一套 过于松散、不确定性极高的晚句。所以啊,选择凡事越严谨,约束越完备、架构越固化的圆和框架, hardest ability 就 会越强, agent 发挥呢,就会越稳定, web 的 落地效果自然就越好。 redhead, 也就是红帽的首席软件工程师马克里基的那句 wake in wake out, structure in structure out 说的也是这个意思。那 harness engineering 这东西它能做到什么程度?它目前的上限在哪里呢? openai 前沿技术研究团队负责人瑞安洛博部落说,他们在五个月的时间里,靠三个工程师做出了一个大约一百万行代码的内部 bug 产品。 人工编解代码呢,是零,人工评选也几乎是零 p r, 也就是 per request, 大 约是一千五百个,日均 token 消耗大约在十个亿左右。 我第一次看到这组数字的时候,老师讲,我不想继续再看了,日均十亿的投款,别说个人,就是大部分企业也承担不了。这个就先不谈不谈了。不过文中有一个对我们普通人有借鉴价值的理念值得提一下。 ovi 的 团队啊,发现搞一个巨无霸型的 agent 点 m t 呢,根本不行,信息太密,太容易腐烂,模型也抓不住重点。后来呢,改成一个大概一百行的入口文件,像目录一样,把 agent 引导到真正的 dos 目录下的知识库里,按需获取信息, 先给地图,再给分支路线,这叫渐进式批录。他们不将 agent 点 m d 视为百科全书,而是将其视为内容目录。这让我想到前 openai 创始人团队成员安德烈卡哈西提出的 l m wiki 的 个人知识库的理念,把 wiki 的 目录呢作为知识库的入口文件, agent 需要什么知识呢?就看目录去按需获取。 看我那期视频呢,应该能秒懂。我现在再回头看 prop engineering, context engineering, harness engineering 这几个词啊,感觉层级一下清楚了很多。 professor engineering 呢,更多是在研究怎么跟大模型这匹马把话讲清楚,而 context engineering 呢,更多是在研究怎么给大模型这匹马提供准确的背景信息。 harness engineering 呢,则更上一层,他关心的是这匹马怎么干活,怎么使用工具,怎么不罢工,怎么自我改正错误,怎么给跑着跑着 掉到悬崖下面去了,怎么不两次踏入同一条河流?所以这三个概念呢?它是层层递进的,从局部的单点控制到整体的一个系统控制。所以,如果你是一个工程师,不妨回头看看你平时的工作,自己更注重的是哪一层。 越靠近 harley s, 你 的竞争力就越强。没错, harley s 就是 agent 时代的软件工程。虽然说软件工程,但是我觉得这件事对我们普通人也很重要。 你可能不是软件工程师啊,只是用 cloud code 啊, code x 啊, cursor 去 web coding 自己的业务项目,或者做一点自动化研究啊,写作啊,梳理整点事情。我非常理解那种感觉,你并不想打造一个什么未来工厂,你只是想让这个 a 证呢,少出点风,少反几次工,少在关键地方给你整出一些幺蛾子。好消息是, harvest 这东西啊,完全可以从很小的地方开始。 说实话,我自己还是在摸索以下这五件事情呢,都不是什么惊天动地的操作。第一次看可能还觉得有点麻烦,但我现在是真的感觉这几件事情值得养成习惯。再说这个之前呢,有些人可能有些疑惑,为什么 pro engineering, context engineering, harness and these 这些概念都起源于国外的文章,为什么不是国内提出的呢? 说实话,这个问题呢,很复杂,一两句话说不清楚也不好说。我掌握国内关于 harley s 还是六二零文章,基本都是后来研究学习国外的文章的解读,包括我这篇,也是带有神奇的事情。就在二零二六年二月,几乎是和国外第一篇提出 harley s 的 文章同一时期,一本叫 agent 的 设计模式的中文书悄悄出版。 我是看到有人推荐,才翻开来看,看了有点震撼,因为这本书整个在讲的事情,就是怎么在一个不确定的 ai 上构建出一个你能信任的系统, 而且写的不只是面向工程师,是面向所有想用 age 能稳定干活的普通人。这不就是 harley s engineering 吗?一本全书都在讲 harley s engineering, 却没提到一次 harley s 的 书,作者可能压根不知道有这个词,但他把这件事情呢,想清楚了,而且提前想清楚了 很多的手绘图啊,经典故事啊和案例啊,就是对着你讲 agent 这匹野马到底该怎么去驾驭中文书能把这件事认真想清楚,再写成普通人能读进去的文字,有点难得。这种心思我是真的有点感动了。就算你暂时没空翻这本书呢,接下来我要讲的这五件事,你也可以直接拿去用。 思路啊,是一脉相承的。第一件,认真写一个 cloud 点 md 或是 agent 的 点 md, 别写空话,别写愿景,专门写那些 agent 真的 会犯错的地方,哪些事情始终去做,哪些事情先问我,哪些事情绝对别做,越去提越好。如果你想做完 q 点,但实在不知道这些 md 该写些什么,你可以到这个地址去下载这份 cloud 点 md。 这个 md 文件呢,是由一位国外小哥从前 open 创始人团队成员安德烈卡西的推文里整理出来的,目前已经超过十万颗 star, 硅谷的很多工程师都在用,你可以放到你的项目跟目录直接去使用,它能提升你的 agent 首次完成任务成功率,减少你人工审查和代码返工的次数,帮你降低使用 agent 的 时间和投肯成本。第二点,给 agent 提要求的时候,不要直接说让他实现,而是让他先出 plan 再动手。包括哪几个文件会改,验收标准是什么,测试怎么跑,失败了怎么回退,这些让 agent 在 前面讲清楚,后面呢,会少掉很多莫名其妙的错误。 如果你不知道怎么写,就把上面这段话复制给 agent, 让他自己把这个要求写下来。第三件,让 agent 帮你准备计算型的 sensor, 比如你在让 agent 帮你润色文章之后呢,为了避免出现敏感词或者你不喜欢的措辞,可以先用一个词库脚本来检查,发现问题直接输出有问题的词, 提示 agent 自动修正。这比每次让大模型帮你检查要快十倍,也更稳定。这个做法呢,也很简单,你把敏感词库准备好,让 agent 帮你检查要快十倍,也更稳定。这个做法呢,也很简单,你把 m d 或者 agent 点 m d 里增加一句话, 每次写完文章后,运行敏感词库检查脚本,直到通过。第四件,每当 agent 重复犯错,不要只修输出,要回头去修你的 harness。 把经验写进规则文件,从坑里提炼出测试脚本。因为为了避免同一个坑里掉两次啊,这个经验呢,就应该固化到系统里面,而不是只活在你的记忆。第五件是拉尔夫循环,不要等到一个窗口聊到上下文都发嗖了才开心的窗口。 二维循环的理念就是每次做一件事持续做,直到它成功。做法呢,也很简单,比如你要 whitaker 一个视频字母翻译的 skill, 那 么你先写好这个 skill。 开发任务需要的上下文背景信息,包括把任务分解成下载视频,生成 s r t 字幕,翻译 s r t 字幕 这些内容呢,放到一个 cloud md, 然后从这个 md 文件的同一目打开 cloud code 的 窗口。关键在这里,这个窗口你只要求 a 着它做一件事,就是实现下载视频这个子任务, 把产出的成果呢保存下来,完成之后重开一个新的窗口,基于上一步的成果去实现,生成 s r t 字幕,然后再重新开新的窗口,实现翻译 s r t 字幕。 纳尔夫循环的理念已经被 cloud code 的 借鉴,做成了官方插件,所以更简单的方式呢,是安装这个纳尔夫循环插件来使用。安装方法也很简单,直接和 cloud code 说,帮我安装这个插件,然后把这个插件的 github 地址直接粘贴进去就可以了。使用方法呢,也很简单,直接输入这段内容, 比如 prop 呢,可以这样写,然后这个命令呢,就变成了这样。纳尔夫循环就是一个简单的 hardest 工程,包含了乾坤引导, prop, 也包含了反馈控制, test, completion, promise。 比如这几个东西啊,可以提升 agent 首次执行就成功的概率。上面这五件事听起来可能并不酷,甚至呢,让人觉得有些烦。说实话,我也不确定所有人上来都会喜欢这套做法,因为它确实会让你在前街做不少准备。写规则、补测试、拆任务、收拾文档,有时花的时间比你自己撸一把还要久, 尤其是项目刚开始的时候,这种感觉特别明显。我自己呢,也在这个阶段经历过,觉得写这些干什么,直接让他做不就好。但反过来想,这恰恰就是工程。 工程很多时候呢,都不炫,他只是把本来会一次次返工、一次次踩坑、一次次靠经验救火的东西,默默变成一个可以重复、可以扩展、可以交给别人,也能跑起来的系统。 harness and loren 打动我的地方也在这里。他没有把人降格成审查机器了,反而把人的位置抬高了。人不再需要盯着每一行代码去当质检员,而是去决定方向,决定边界,决定哪些错误值得被永久消灭,决定哪些规范要变成系统的硬性约束。人类驾驭 agent 的 执行, 我觉得这可能是在很长一段时间里,人和 ai 之间最合理的分工模式。我们再看这个公式, agent 对 model 加 harness 模型给了 agent 的 上限, harris 决定了 agent 能多大程度接近他的上限。越接近这个上限,终端交付物的编辑成本就越趋近于零。而那些定义规则、搭建系统设计流程的 harris, 能力会慢慢变成真正稀缺的东西。说真的,就在不久的将来,那些你觉得值钱的结果会很快变得廉价。 而那些你平时觉得无聊的过程呢,会悄悄替代,结果变得值钱起来。代码会廉价,架构文档和编码流水线会变得值钱。 文章会廉价产出文章的方法论和工作流会变得值钱。你想想看,是车贵,还是车的图纸、模具和整车的制造产线贵? ok, 这就是我想要和你分享的 harley s 的 全部思想和使用技巧。能看到这里,你对 harley s 的 理解已经超过了百分之九十的。 如果你想试试 harley s, 我 的建议是从一个很小的地方开始,比如先试试卡帕西的 color 点 m d code code 的 拉尔夫循环插件。甚至呢,只是在 a 卷的完成任务后加一句,记住你犯过的错,以免下次再犯。用用用,找找题感,看看效果,如果觉得有用,再慢慢扩展 好了,就这样,你的 hardest 看呢?欢迎来评论区分享你的看法,让更多人看见人与人之间的交流互动啊,永远是 ai 无法代替的体验。我是邓秋水,用技术生存,用哲学生活。我们下期再见。
粉丝3316获赞1.6万

最近 ai 圈子非常火爆的哈尼斯到底是什么?它要怎么用?为什么它变得这么重要?今天就一条视频给大家讲透,保证新手也能听得懂。首先它是什么?哈尼斯是今年二月份 由 open ai 提出的一个全新的概念,全称叫做哈尼斯 engineering, 也就是驾驭工程,说白了就是一整套管理 ai 的 操作系统。哈尼斯这个单词啊,有马鞍子江省的意思, 那我就来打个比方,假如 ai 是 一匹野马,优点是力气超级大,能跑,能帮我们干很多活儿。但是缺点啊,就是不听话, 要么一动不动,要么一触即发。那么哈尼斯呢,就是要给这匹马套上江绳马鞍,再设计好围栏,圈定马场。核心呢,就是约束好这匹野马,让它在圈定的范围 内活动,不要乱跑。所以啊,当哈尼斯这个架构搭建好以后, ai 不 仅能够跑得飞快,还能够做到服从指令,不会乱写垃圾代码,浪费。托肯。接下来啊,我们就讲一讲哈尼斯这个架构,它到底包含了哪些内容。这套架构的核心啊,一共有四个层次,其中第三层啊,是 灵魂,第一层呢,就是上下文层,说白了就是要把前因后果,架构规矩要做成什么样,一次性的给 ai 讲透,不要让他瞎猜,不让他乱写,先把背景信息给全了,这是打底子。第二是执行层,就是给 ai 啊,装上手和脚,让他自己能够新建文档,写代码, 删文档,调命令,不用你人工执行, ai 自己动手干活。第三层啊,就是反馈灵魂,这层啊,才是灵魂,代码跑失败了,报错了,先别着急上手去改,让 ai 啊,自己看报错,自己定位问题,自己改代码,再重新跑一遍不行两遍,两遍不行三遍,直到跑通为止, 完全不用人插手改 bug, 真正实现自动化。第四层啊,就是可观测性,就是给人啊,开一个监控视角, ai 每一步干了啥,写了啥,卡在哪,出了什么问题,你看哪,一清二楚,全程监控,想看哪里看哪里,想点哪里点哪里, 完全不用自己下场。那我们了解完哈尼斯之后,再来看看哈尼斯它到底有多强。根据 openai 的 文章显示啊,它们只用了三个工程师,花了五个月的时间用 kodex, 哈尼斯就完成了一百万行的生产级代码。更夸张的是,这一百万行代码, 这三个工程师自己是一行也没写,全都是指挥 ai 去生成的。现在有一个流行的词啊,叫做古法编程,也就是手缩代码。那在手缩代码的时代啊,三个工程师完成一百万行生产级代码,至少也得需要十年的时间吧。现在来看, ai 只需要 五个月。 lanchen 在 上个月仅仅是给同一个大元模型换上了 hines 的 架构,其他部分呢,都没有改变。它在聪明人奔驰上的通过率排行啊,从三十几名一路飙升到第五名, 这样惊人的战绩啊,使得哈尼斯这个全新的概念啊,火爆出圈。看到这里啊,就有人要问了,哈尼斯到底在哪啊?咋用啊?如果你的任务是一次性的,也比较简单和清晰,用不用哈尼斯啊,都行,其实基础的 对话和工作流啊,也都能搞定。但是如果你要处理的是一个复杂的系统工程,比如任务需要跨越多个阶段状态,需要跨回合延续,涉及到大量的上下文记忆,基本上绝大多数的 企业级的需求啊,今后都会涉及到。 hans 阶阶段的大模型有个短板就是记忆能力有限,你的任务越复杂,就越容易暴露大模型的这个短板,这个时候啊,就越需要 hans 帮你约束和管理好你的 ai。 当 hans 良性运转之后,就会建立起 数据飞轮,当它积累了越来越多的知识和数据之后,它就从一个工具开始,慢慢变得越来越像人,变得越来越好用,变得越来越懂你。其实现在的小龙虾就是哈尼斯思想的一个非常好的实践。有不少评论者说啊,现在 prom 的 时代已经结束了,哈尼斯时代 已经到来啦。那为什么哈尼斯这么重要呢?因为它代表着从 ai 到 a g i 已经进化到了第三个阶段。那第一个阶段就是大家比较熟悉的 prompt engineering 的 阶段,这个时候重点是你跟 ai 说些什么, 所以啊,大家都在学提示词怎么写。第二个阶段啊,就是进化到了 context engineering 的 阶段,也就是说上下文工程的阶段。 这个阶段的重点是给 ai 为哪些信息作为决策依据,需要系统性的编排上下文窗口之间的内容,不是展示的信息量越大越好,而是信息的相关性越强越好。第三阶段就是轮到现在异常火爆的 harness engineering 的 阶段,重点啊就是对 ai 实行系统管控。其实 prompt, context, harness 这三者之间的关系啊,并不是相互替代的关系, 而是构成了 ai 工程化的三层递进。一开始,不同的大模型之间产出质量的差距是比较大的,现在呢,各个大模型之间的差距在逐渐缩小。光靠大模型本身啊,已经很难有质的提升。所以啊,哈尼斯就 变得很重要。如果你想更深入地了解 hines engineering, 仔细阅读这两篇核心文档吧。 openai 二零二六年的新文章,还有 astropica 公司的那篇关于 agent 的 必读经典。需要这两份文档的朋友可在评论区扣 hines, 我 来安排。

二零二六年 ai 圈最火的概念莫过于 harness engineering 了,但从二月份 open ai 发文到现在,我翻遍了全网的讲解,发现几乎都是在讲概念, 怎么落地,怎么实操,竟然没有人说。所以今天我就从原理到代码实践给大家讲明白 harness 是 什么。并且你听完后啊,可能会发现自己的智能体已经在往 harness 这个方向发展了。 先说一个你很有可能的误解,很多人看到 harness engineering, 第一反应就会把它和题日词工程还有上下文工程挂上关系。 这个理解不能说是错,但并不是 harness 的 本意。题日词工程解决的是你对模型说什么,指定写的有多精准,角色设的有多么的清晰。上下文工程解决的呢,是模型能看到什么,记忆怎么存,长,文档怎么切,历史怎么压缩。 而哈尼斯工程解决的是模型在什么环境里工作,去调用哪些工具,怎么调度,权限怎么控制,出了异常怎么兜底,三件事情,三个层面同步引进,不存在谁取代谁。就好像写程序,你需要好的算法,好的数据结构,好的内存管理,少了哪个,你的程序都跑不通。 那 harness 到底是什么最直接的公式啊? agent 等于 model, 加上 harness, 模型是大脑, harness 是 它的工作环境。打个比方, java 代码是跑在 j b m 上面的, python 呢,是跑在解释器里面,模型呢是跑在 harness 上面, 那 harness 就 决定了模型能调用哪些工具,调用怎么被安排和调度,上下文快满了,怎么压缩用户没授权的操作,怎么拦截这些东西啊,模型自己不会负责,也不应该负责,这是基础设施该干的事。 还有一个很常见的误区,很多人啊,会把 longchain、 spring ai 这类框架直接当成 harness, 这是不对的。这些框架呢,是脚手架, 它帮你把工具调用、模型接入这些东西,封装好,让你少写很多的代码。但它本身不是 harness, 它只是让你更容易的去搭出一个 harness。 真正的 harness 呢,是跟着业务走的,不同场景长得完全不一样。拿两个极端的例子来对比, cloud code codex 这类 agent, 面向的是 c 端,用户,跑在操作系统上,工具呢,基本是文件的读写,终端命令,这些场景很开放。 而你自己做的业务 agent 呢,面向的可能是 b 端,跑在数据库和内部的服务上,场景是有边界的,对权限的控制和稳定性的要求完全不在一个量级。同一套模型,哈密斯不同,能干的事啊,和能信任的边界就完全不一样。那接下来我就从 cloud code 的 源码中带你了解什么是哈密斯。 我们先看一下 c c 的 主流程编排层,也就是 query engine 这个类,里面有一个叫 submit message 的 函数,所有你跟 c c 的 对话都是从这里进和出的。阅读这段代码后啊,你会发现,前面的三百多行代码全是在准备工作,没有任何大模型的调用, 那里面包含了环境的准备处理,用户的输入、落盘、系统出式化消息等操作。其中我挑选了两处最能体现 harvest 这个函数, 他把 kusu 啊包装了一层,做了一件事,每当一次工具的调用被拒绝,不管是用户手动拒的,不可拦截的,还是 classify 判定不安全的,这个包装啊,都会把记录压入一个叫 permission denies 的 数据库, 记录下来。哪个工具哪一次调用的 id 传了什么参数,那模型在整个执行过程中啊,使用者对此是无感的。那记录这些的意义是什么呢?为什么能体现出 harsh? 其实这份记录是给 sdk 调用方用的,像审计 a 技能的行为调优,权限策略啊,都靠它。 每次任务跑完,你就有一份清单, agent 在 这次绘画里面总共碰壁了多少次?异常的点在哪里?如果某个工具被高频的拒绝,说明 agent 的 行为啊,和你的权限配置之间有异常,你得回来调。 但最关键的一点是啊,模型知道这次被拒绝,但不知道自己这次绘画总共被拒绝了多少次。而 harness 帮他统计了这份清单,并且汇总专门给外部系统用不进模型的上下文。所以 harness 不 只是在控制 agent, 他 同时也在观测 agent。 第二个是 record transcript 的 这个函数。这个啊,在模型调用之前,他做的事就先把你这条消息落盘注示解释了。为什么 如果说进程在 api 响应回来之前被强制终止,比如说机器断电,用户按了 stop, 那 绘画可以从这个断点恢复。如果等模型回来再存,中途断掉,那这条消息就丢了, resume 就 找不到记录了。 用户几乎感知不到这件事情正在发生,但他一直在保护用户。那这一点我相信很多大模型开发的同学都会这么去做,不可能傻傻的等到大模型的结果回来之后,再把用户的消息去进行持久化。所以这两个位置合起来说明一件事情,模型在开口之前, paris 已经在旁边做了很多用户看不见的事情。 接着我们看一下 cc 的 指定装配层。这边我要对比的是两处都在构建系统提示词这个函数里面。 第一处没错,就是这三行代码。在这个判断中,如果 override 存在函数,直接 return 后面所有的 prompt, 不 管你是在 cloud 的 md 里面写的规则,还是你定义的 agent 的 指令,全部都跳过一行都不跑。 那什么场景会触发这个呢?当 cloud code 被当成一个子 agent 嵌进自动化的流水线,副 agent 开这个子实体的时候,就会通过 override system prompt 给它指定一个完全受控的身份。 比如说你只做代码审查,只输出 jason, 那 cloud code 就 会把所有的默认配置全部架空,你可以认为是 sub agent 的 概念。 注意啊,这里的替换是什么力度?不是优先级更高,是其他的根本不跑。三行代码中,模型对自己是谁的认知完全被替换,这给刁永芳一个干净的白板,没有任何底层默认值泄露进来。 第二处, proactive 模式同样是 agent 的 定义,普通模式下, agent prompt 直接切换 default prompt 模型变成了个 agent。 但在 proactive 模式下,它是这样做的。 在这段代码中的注示中有说明, proactive 啊,不是换了一个人,而是给这个人增加了新的技能。同一个 agent 的 定义文件会有两种执行模式,模型的身份啊,完全不同,普通模式是换人, proactive 模式是加技能。当然了,这个决策也不会在你的 prompt 里面体现,而是 harness 自己帮你做的。 然后我们再看一下 c c 的 工具调度层。这边啊,我选了同一个文件中的两处代码。第一处,我们先看一下 is currency safe 这个函数, 在 c c 中啊,每个工具会自己声明并发安不安全,那 harness 则会调用这个函数来进行提问。那如果这个方法本身抛了异常,不管是什么原因,比如说解析 share 参数失败啊,工具里面有 bug 啊,那捕获了这个异常之后啊,就会直接 return false。 按照常规的软件工程来说,捕获异常我们会向上抛,抛到上层,进行统一的管理,但这边的报错,它并不会抛给上层,而是降级到串行。那为什么会这么做呢? c c 认为啊,病发出错付出的代价,比如说数据损坏,文件冲突要远大于花一点时间进行串行。 harness 的 默认哲学是,不确定的时候选安全的那条路。 第二处, run to 函数里面对病发败局的处理,当一批工具都是病发安全的,它们是同时跑的,但是注意里面有个 map 结构, key 是 工具调用的 id, 工具跑完之后啊,它对执行环境的状态修改。 比如说我刚才写了哪个文件,但这个操作并不是立刻应用的,先是被压入这个 map, 等整个并发的半局完全完成之后,再按照顺序一个一个的把修改应用上去。 也就是说,工具的执行是并发的,但状态的更新是串行的,有顺序的。那听到这里,如果有开发同学应该会比较熟悉,其实跟我们平时使用的现成池差不多的原理。 所以说如果不这样做,两个并发工具同时改同一份上下文,谁厚写谁覆盖谁状态就乱了。这个问题啊,被 harness 在 基础设施层解决掉了,模型那边发出工具调用,收到结果,完全不需要关心这件事情。 接着我们再看一下上下文。治理层在 to use context 这个文件中有两个字段, set app stat 和 set app stat for tasks。 普通的 set app stat 在 sub agent 里面是一个空的操作,不做任何的事情,这是有意设计的。此 agent 不 应该直接改副 agent 的 全剧状态,否则嵌套会越深越乱。但是第二个字段就不一样,注示里面写得很清楚, 不管 agent 嵌套了多少层,它都能写到最外层的绘画状态,而且专门用于比单次绘画活的时间更长的东西,比如说 background, task, clean up, hook, session 级别的注册等等。 那实际的含义是什么呢?一个嵌套了三层的 sub agent, 可以 通过这个接口在最外层注册一个清理任务,在整个绘画结束时执行。这个能力啊,不在模型身上。在 harness 上第二处 agent id 字段,这个字段只有 sub agent 才会被赋值,主线称没有,这个字段是 undefined。 注示里面说,你可以在户客的逻辑里面这样判断,如果 agent 的 id 存在,说明这次工具调用来自某个子 agent, 如果不存在,说明是主线程。根据这个啊,你可以给子 agent 的 工具调用,增加额外的审批步骤,或者完全不同的权限规则, 同一个工具,主线程来的直接放行, seven agent 来的要多问一句,那这条逻辑不在模型里,也不在工具里,而是在 harness 里。 如果说你想对谁发出的调用有不同的应对方式,那不用改模型,也不用改工具,改的是 harness 对 不同调度来源的响应。 好了,关于源码,我们先分享到这,现在把四段源码串起来,你就能看到 harness 的 真实面貌。模型调用之前,有一层系统在为他准备好一切认知框架、工具、权限、调度策略。这些东西啊,不在提示词里,也不在上下文里,但没有它,提示词写的再好,上下文管的再精, a j 呢?还是跑不稳。 所以记住这一句,模型决定了 agent 的 上限,但 harness 决定了 agent 的 下限。最后我想说的是, ai 时代下,做好智能体往往不是选对了什么框架,而是你要把智能体想要成人的大脑去模仿,大脑会做什么事,哪些地方需要记下来,哪些地方可以忽略, 哪些地方需要较验,那又有哪些地方需要被约束?这些判断才是真正决定智能体上线和下线的关键。所以,正如我前几期视频所说的一样,产品思维和架构思维在智能体时代显得尤为重要。 ok, 那 以上就是本期关于 honeyse engineering 的 全部分享。不得不说啊,在 ai 浪潮下,保持清醒的认知最重要,不要人云亦云,我是布鲁,你的 ai 好 搭子,我们下期再见!

hello, 大家好,欢迎来到 agent 这系列的第十九期,到今天为止啊,我们用了整整五期的实战拜爱马仕工程,也就是所谓的 harness and nero 的 实战,那从头到尾的讲清楚了,并且搭建了一个有 harness 的 agent, 那 如果你一路跟过来了,想必你应该知道了, ai 圈目前为止没有什么新东西啊,所谓的新概念都是换汤不换药啊。那所谓的 harness 所谓的驾驭工程到底是什么呢?它本质上就是让 ai 不 乱说话的一套 对应的企业级的安全生产指南。怎么理解呢?驾驭工程啊,它就是给 ai 装上桅绳和围栏,来约束 ai 在 我们约束的限定的范围之内进行稳定安全的干活,仅此而已了。 那么这整个 harness 驾驭工程大概有哪些东西呢?那整个 harness engineering 啊,大概有以下三个东西,那分别是分层上下,架构因素和主动垃圾回收,而异度分流和 skill 分 装啊,它是 agent 城里面的核心模块,不属于驾驭系统。 但是呢,如果我们要搭建一个有 harness 的 agent, 那 么这五个模块都是其中的重中之重,怎么理解呢?我们先看第一个模块,而第一个模块呢,就是所谓的分层上下文。怎么理解对应的分层上下文 呢?分层上下文啊,其实本质上就是让 ai 啊,一定要看到对应的实时信息,为什么呢?因为 ai 啊,它可以参考对应的你给他的信息来进行回答的,但是呢,也可以不参考,它也能够回答。而 分层上下文,它的升级是什么呢?它的升级是必须让 ai 强制性的参考我们查到的信息,且强制性的参考一些查到的是信息,如果不参考的话,则 ai 不 能够进行相关的回答,并且呢它把上下文进行了分成相关的优先级。如果是一些重要的人物,则需要去看到一些实时的信息, 如果是一些相对简单的任务,那么可能去看对应的常规知识库,或者是 ai 自主判断进行回答则就好了。那么第二个核心能力是什么呢?第二核心能力是架构应约束,这个怎么理解呢? 本质上其实就是在管控 ai 的 权限,也就是说建立一个对应的防火墙,它本质上是用来约束什么呢?它既是用来约束 ai 的, 也是用来约束我们的,为什么说它也是用来约束我们的呢?它本质上是去做一个对应的 sop 的 流程,那就是说把怎么搭建一个 agent, 怎么让这个 agent 不 闯祸等等一个相关的系统和相关的流程给全部的写清楚, 写好,那写出来一个对应的权限手册,风控手册和对应的流程手册。而这个风控和权限和流程手册是用来约束什么呢?本质上是用来约束我们的,那我们参考这整个的流程,把整个的模型的 ai 的 权限给约束住,那这就是所谓的价格样 约束,而这个主动垃圾回收又是什么呢?主动垃圾回收的话,其实说白了就是要去清理这种长对话的溶液和垃圾,因为对话异常的话,模型可能就会忘记你之前的一个问题,或者说是模型回答的质量就会下降,那 这个时候怎么办呢?这个时候应该要主动清理这些相关的信息,而意图分流又是一个什么东西呢?意图分流啊,它本质上是所谓的路由器,它是负责来进行相关的分类,对应用户的问题,并且规划接下来该怎么样相关的处理呢?这个是整个 a j 城里面最核心的一个模块,但只不过有一些团队和老板并不是特别的在乎这件事情,但是没有关系啊,从整个 a j 城系统里面, 他还是最重要的,他的目标啊,是要去识别出用户的一个精准的问题,并且确保每个问题啊都能进入到一个正确的处理的炼炉。可以想象啊,如果说他进入错了以后,那我们显然连路径都走错了,那后面的处理自然就错了,所以这是最基础也是最重要的。 那所谓的 skill 封装又是什么呢?所谓的 skill 封装啊,它本质上就是把一些常规的,高频的,复杂的业务逻辑啊,可以进行模块化的封装啊,来实现标准化的调用,也就是说把它做成一个所谓的微型的,可调用的,可附用的对应的工作流就可以理解了,我们可以粗浅地把 skill 理解为一个微型的工作流。 那么好,我们讲完了以上五点之后啊,那么大家可能会问一个问题啊,就这些东西我都听懂了,但它们拼在一起,那到底是什么呢?拼在一起之后,一个不翻车的能上线的 agent 有 harness agent, 到底长什么样呢?我们来演示一下。 如果大家有跟前面的流程啊,想必大家对这个工作流,或者说对这个 agent 并不陌生,没错,这个 agent 啊,我们反复的演示过很多次了,我们就以淘宝客服为例啊,那它是一个整个的客服流程的 agent, 这个流程啊,大家可能不能直接拿来急用啊,但是用来理解什么是 agent, 以及是有 harlan's agent 到底什么样子的已经绰绰有余了。在真正的工作之中啊,我们肯定要根据自己的各自的业务场景来进行微调的。那么好,我们叠完 buff, 叠完甲之后啊,我们来正式开始吧。这工作流从用户的问题进来了之后呢,那比 说用户会问很多不同的问题啊,这个手机有什么参数,以及是我的快递到了哪里和我要退货等等的,那我们首先肯定是要去做一个所谓的意图识别和分流,那这就是我们刚才讲的第四个模块,那这个意图分流怎么理解呢?也就是说不同的用户问题肯定是进不同的流程。 如果说用户的问题是查物流啊,那这个时候怎么办呢?我们肯定是进行相关的调用物流进接口,然后去查询用户的物流情况,看一下到了哪里, 如果查到了以后,哎,则进行相关的回复,用户如果没有查到怎么办呢?则进行转人工。而这个流程是什么呢?这个流程我们就可以把它理解为是一个 skill 的 封装,而如果用户的问题他不是对应的查物流,而是商品咨询,那这个时候怎么办呢?那显然他如果是只咨询这个商品本身的一些相关的信息,比如说这个手机的参数等等, 或者说这个咖喱酸我到底能不能吃?那显然我们是需要去查一些常规的知识,而查到了知识之后,则返回给大模型进行相关的回复。那大家可以发现啊,这一块其实本质上就是在做一个东西,叫做分层上下文。用户的问题啊,有一些呢是可以用知识库来进行解的,比如说商品咨询,而有一些的话,则必须要去查一些实时的信息,比如说 物流的信息,那这个时候的话,那显然不同的问题要用不同的知识来进行相关的回答,那这也就是所谓的分层上下文。那分层上下文我们把所有的信息假设啊,那都已经返回给了大模型,大模型这个时候要进行相关的回复了,那怎么办呢?模型生成了一些相关的回答了之后,我们这个时候做了一个对应的所谓的质检, 而质检如果通过了呢,那我们进行相关的回复,如果不通过呢,则进行相关的转人工。我们假设整个的质检是通过了的,那这个质检到底怎么理解? 那本质上其实就是来进行向下纹的压缩的,那也就是说模型的回复可能会很长啊。亲,我查到你的物流了吧吧吧,物流是什么样子的?或者说这个商品的参数是怎样怎样的?他可能会回复 很长很长的内容,但这个很长的内容呢,确实可以返回给用户,但不是我们需要存下来的,我们存下来的其实只是一些关键的信息就行了,比如说用户的问题是什么?我们回复了一个怎样的答案,那这个答案最精简的情况是什么?比如说用户问物流,那我们可以存的信息是用户的问题是查物流,那我们查到了物流,物流在途中, 那只要存这些信息,这就可以了。那大家可以发现啊,这个质检和所谓的招标模块,也就是我们刚才演示的对应的园丁系统。 那怎么理解这个园丁系统呢?这个园丁系统也就是说是把我们每一轮对应的回复进行相关的压缩,这个压缩呢就是对应的招标而进行相关的质检呢,也就说园丁系统也需要去检查用户的,或者说是我们大模型的回复的。那这个时候怎么办呢?那也就是所谓的质检模块,看啊,所谓的园丁系统,其实就是把它拆解成一个质检模块和一个对应的 燃料模块。那么好,讲完了这些之后啊,我们发现我们刚才讲的以上五个能力,分别是一坨分流、分层、上下稳 skill 和主动的垃圾回收,也就是园丁系统,其实都讲到了,但还有一点没有讲到是什么呢?是所谓的架构应约束。这个架构应约束是什么呢?哦,这个押应约束其实可以理解为就是这个整体, 怎么理解呢?这个架构应约束本质上就是来最初设计的时候,我们去设计出来模型能做什么,不能做什么,哪些权限要开放,哪些权限不开放,以及对应的不同的流程该走什么样的路。所以大家可以发现,所谓的架构应约束,本质上是用来指导我们来去把这四个能力给进行相关的实现的。 那么这个演示完了之后,我们就已经知道了这整个的流程了,那这整个的流程我们再回过头来创一遍,如果用户的问题是咨询这个商品的参数,则进行调用对应的知识库,然后大模型进行回, 如果通过质检的话,那我们则进行进一步的摘药,然后返回给模型,再进一步的相关的回答用户。而如果他没有通过对应的质检,或者说是不是对应的这个商品,咨询的问题该怎么办呢?我们通通的进行转人工治理,比如说如果用户问的是物流,那查到了物流信息之后,然后再进一步的相关的答案聚合返回给用户 就可以了,所以整个 harness 的 agent 大 概就是这样的,那么演示完了之后,想必大家就已经知道了哦,整个 harness agent 大 概是什么样子的?最后呢,我们来做一个简单的总结,那所谓的 harness agent, 它没有所谓的前言学和黑科技的,也没有什么新东西, 它本质上就是把我们过往的时间给全部的串在了一起而已。那过往的时间里面,比如说那该用实施信息的肯定是用实施信息,那不该用实施信息的肯定用普通知识库或者模型自主的处理。分层上下文, 我们要有一些相关的规则和流程来约束我们搭建对应的 agent 架构,并约束以及是相关的垃圾进行相关的处理,那主动垃圾回收和做相关的招标和质检,同时要做好对应的意图分流和 skill 的 封装。那大家可以看到啊,真正让 ai 落地的,其实并不是所谓的让 ai 无所不能,而是让 ai 听你的话进行稳定的干活, 那讲到这里,我们整个 hines agent 的 实战核心内容就基本上已经结束了,从原理到实战到风控到全面路的打通已经基本上全部讲完了。但还有一个问题非常的重要, 经百里者办酒席了,我们确实是把这个流程给全部的搭出来了,我们确实是已经有了一个 harnessed agent 者,那这个时候我们该怎么评估这个流程能否上线呢?这个流程上线了之后又该怎么办呢?下一期我们来聊一下,记得点个关注哦,我们下次见。

近日, deepseek 连续发布了两个 agent harness 相关的岗位, agent harness 产品经理和 agent harness 研发工程师。那时我发现很多人还分不清大模型 lrm agent harness 的 概念,一分钟给你讲清楚,你就把 ai 当成普通职场人看就懂了。 大模型就是公司里那种知识特别渊博的顾问,你问什么他都能给你讲得头头是道,能帮你查资料、翻译文档、润色代码。但是他也就只会动嘴, 被关在聊天框里出不来。不能用联网搜索最新的信息,不能操作你电脑上的软件。你让他整个复杂的竞品报告,他最多给你列个大纲,剩下的活还是得你自己干。 agent 就 不一样了,相当于给这个顾问配了手和脚,他自己会用工具。你就说一句,帮我做一份最近三个月的竞品分析报告,他自己知道。先拆步骤,打开浏览器,搜索各家的最新数据,爬完网页自己提取关键点, 整理完结构,自动给你存,存成 word, 全程不用你插手,干完直接给你教成品。举个例子, cloud 是 大模型, cloud code 是 agent, gpd 五点五是大模型, openclaw 是 agent。 至于 hales, 你 别把它想成什么复杂的技术名词, 说白了,它就是 agent 的 执行控制器。所以你让 agent 干的事情,都得靠它把指令拆解成实际能跑的步骤。比如你让 agent 帮你做用户调研, 要是没有 harness agent 呢?可能搜完数据就停了,根本就不知道要把数据分类,还要生成格式化表格,最后同步到你的聊天工具框里。有了 harness, 它会先定好调研的先后顺序, 搜数据的时候遇到网页反爬,它会自己调代理工具,分类的时候发现数据对不上会自动回去重搜, 每一步做完都检查有没有符合你一开始提的要求,不会干到一半跑偏。最后留个问题给大家思考一下, chat gpt 是 大模型还是 agent 和 miss agent 算不算 hannis 呢?

三月 ai 方向项目太多了,但这个月我真正花时间去研究,自己动手做的只有一件事, harness engineering carpathia 在 做, shopify 在 做, ospec 在 做,独立开发者也在做。我自己做视频,大部分生产流程已经自动化了,但 tts 配音是最不稳定的环节,每次花最多时间的就是反复调发音调语速调停顿。 这是一个典型的 l m 输出不可控的问题。我用 harness 的 思路重新设计了整条配音流水线。这期先用一个最小代码讲清楚 harness 是 什么,再用这个真实项目讲它怎么落地。 先用一个最小的例子讲清楚 harness 是 什么。我给 agent 一个问题,先有鸡还是先有蛋,让他自循环改进自己的回答,六个文件,零代码依赖路普周围有四件事, 操作对象, agent, 每轮置改 solution 文档,评估函数 criteria 文档,定义了五个维度,每轮打分约束系统 rules 文档写死了规则,跨轮记忆 memory 文件,每轮追加 loop 式发动机。这四件事是方向盘、刹车和安全带合在一起就叫 harness。 但跑起来问题就来了,评估函数是挨剑,自己给自己打分,分数一路涨,但后面十几轮全在改错词,实质没变化。挨剑次既是运动员又是裁判,他当然觉得自己越来越好,没有收敛,检测分数在四十到四十二之间反复震荡,路普还在跑,纯粹浪费头肯约束说每轮最多改三处,但什么算一处? agent 自己定义,自己执行,自己检查,等于没有约束。开放性问题,没有确定性的评估指标, harness 就 很难真正闭环 概念清楚了。看真实场景。我做视频,每期要用 t t s 生成配音,听起来简单三个痛点,第一,发音错误, carp c 被读成 carp d, 六三零被读成行六万秒 tars 被读成秒 tars。 t t s 引擎是黑盒,你不知道它什么时候会读错。第二,改一个词要重做整条,一句话里改了一个发音,整段音频要重新生成,重新转写,重新对齐字幕。第三,字幕对齐每条音频的时间戳要精确到毫秒级,手动一条条对很繁琐。 用 harsh 的 思路重新设计,先解决改一个词要重做整条的问题,操作对象不是整条音频,是 chang 脚本先按句子切成小段,每段两百字以内,每个 chang 独立走完整条流水线,生成语音转写校验。对齐字幕,改一个词,只重做那个 chang, 其他的不动 约束系统用如此。文档定义了一套 tts 规则,英文品牌名前加句号隔断,防止连读数字转中文读法,连字母转空格。这些规则在生成语音之前就把文本规范划好,从源头减少发音错误。 自动修复,最多三轮,超过了标记,人工处理不无限循环,跨轮记忆,用 normalize patches 文件,每次修复发现的新规则写进去,下一期自动加载 karpati 读错了一次,修复成卡帕西以后每期都不会再错。 最难的是评估函数 demo 里的问题是 i 真的 自己评自己,没有外部教验。 t t s 场景好一点。语音生成后,可以用 whisper x 转写回文字,拿转写结果和原文比对,这就有了外部信号,但同音字替换语气词增减不算错,真正的发音错误需要语义理解,所以评估分了两层, 第一层,确定性预检文件是否存在时长、语速转写字数差异,不调 api, 不 花钱拦掉明显问题。第二层,克隆的语义效验,原文规范文本转写结果三方比对区分,发音错误和无害替换,拦不住的还有人工兜底。 现在 prompt engineering, skill 各种 a 阵框架发展都很快,很多方案在优化单词输出的质量,但 l m 的 输出本质上是不确定节点就会产生分支,节点越多,最终结果就越随机。 提示词和 skill 能提高单次质量,但控制不了不确定性的极连放大 harness 在 每个不确定节点加上评估约束和记忆,让输出趋向收敛,说白了就是测量结果和预期比对不对就纠偏循环直到收敛。这其实就是控制论的思想。 t t s 项目里,语音生成是一个不确定节点,外面套一层校验加修复循环让它收敛。整条流水线本身也是一个大的 harness 链,这些层是全局状态机,复杂项目里就是大 harness 套小 harness, 工作量不小,偷啃消耗也不小。我这个项目用 cloud code 辅助做了将近一整天,但这是让 a 针的系统可靠产出的代价。 demo 和 t t s 项目的链接都在评论区, lupl 谁都能写一行就够,但 lupl 周围这四件事怎么设计,我觉得才是真正要花时间想的。关注工具人研究所,我们下期见。

什么是 agent 的 henzhen engineering? 总结, henzhen engineering 就是 为 ai agent 设计的一整套工作环境、工具、权限、状态、记忆、验证、反馈和治理规则, 让大模型可以持续、可靠、安全地完成真实任务。你有没有发现,让 cloud code 或者 context 写代码的时候,经常出现做到一半忘记了自己在干什么,修了一个 bug, 又引入了三个 bug, 明明项目没有过去完成,他却跟你说已经完成了。 但是为什么我们看到其他的大神在 rap 扣点时都能用的很好呢?并且都没有遇到这样的问题呢?这时候问题可能不在于模型不够聪明,而在于你只是给他了一个任务,却没有给他一个真正能工作的系统。 那么这个系统就是我们今天要了解的 he news in the new year。 我 们现在来讲解一下 he news 这个词旨意有约束、牵引装备的意思, 那么放在 agent 里,他指的是模型外面那一套让模型能够干活的框架设计和工具之类的东西。模型本身主要负责推理和决策,但但他不能天然访问你的文件运行代码,以及知道任务有没有真的完成。 所以 and 这个词在 html 中的意思就是给 ai html 搭建一个可执行、可观察、可验证以及可持续改进的工作系统,不是让模型更努力,而是把模型放在一个更适合完成任务的环境里面。简单的举一个例子, 同样一个 ai, 只发给他一句帮我做一个 ppt, 他 可能就给你一堆文字,但是如果你给他模板、品牌 规范、过往案例、素材库等等这些信息,它就能够给你交付一套更加接近可用层比的 ppt, 或者八到九成可用的 ppt 文件,那么我们给他提供的这一套内容就是个人版的 html。 为什么有了 permit, contest, mcp skill 还要和 news? 很多人问,我们不是已经有了 permit engineering, contest engineering, mcp, aids skill 了吗? 为什么还要再来一个 henness in the new year? 答案是,它们不是互相替代的关系,而是处于不同的层级。我们可以来简单讲一下每一个层级所解决的问题, prompt in the new year 解决的是怎么说, context in the new year 解决的是给他看什么,这里的他就是大模型。 m c p 解决的是怎么连接工具和外部系统。 skill 是 解决了怎么按需加载一套技能,而 harness in the new year 解决的是更大的问题。怎么样上述这些工具或者技能组成一个闭环,让 agent 能持续工作,遇到问题回退, 做完问题会验证经验,还能沉淀下来。你完全可以简单地把 hunnews 理解成 ai 的 操作系统, prompt, context, mcp skill 都是里面的重要组建或者技术。 hunnews 就是 在系统运行的时候负责把它们组织起来,什么时候加载上下文,什么时候调用工具, 在哪个沙箱里面运行失败后怎么从事,什么情况下要人类进行审批,哪些经验要写回知识库里面?我们在这里用一个循环来概括 her news and new in 这项技术的底层原理,目标、上下文、计划、行动、观察、验证、记忆、治理。 我们在这里把这八点拆成四个步骤来看,每一步到底是在干什么事情。第一步,目标和上下文我们平常在 cloud code 或者 open curl 来写代码时,经常会把一个复杂的需求使使用简单的语言描述出来,往往这样子, ai 对 我们需求的理解会 非常的费解,并且经常出现你描述的是 a, 但 ai 理解成了 c 或者 d, 那 么我们究竟要给他 什么内容呢?答案就在这里。 ai 需要明确的验收标准,也需要能找到相关知识,比如 agents, md 文档,项目文档、资库、历史决策、业务规则。但这些并不是越多越好,而是要像一个地图一样, 随着开发的进度按需展开。第二步,行动环境。在 agent 的 执行任务时,要能读文件,写文件,跑命令,开浏览器,查日记, 调接口,但这些动作最好在沙箱里面完成,并且有权限边界,免得 ai 哪一天抽风把我们电脑上面的数据给全部给删掉。在这里, m c p 和 skill 就 很重要了,因为 m c p 负责连接外部工具, skill 负责按需加载方法、规则和资源。他们让 agent 可以 在沙箱环境中 标准化的连接浏览器,数据库, of stand, 飞书,还有 github 等外部工具。第三步,验证反馈。 即使一个好的 html 框架不会只让 html 输出结果,还会让它去验证生成出来的结果是否正确,这一步可以称之为验证反馈。我们来举个例子,比如跑测试,看类型检查,打开真实网页,点一遍截图,对比,查询日历指标。在 mountainfall 的 那篇文章中,把 这些叫做 sensors, 也就是传感器,他们告诉 agent 你 现在做的对不对。第四步,记忆和治理。可以简单来讲,每次错误都不应该只是被修掉,而是应该变成规则文档,测试 skill 或知识目录。真正厉害的 harness 并不是快速修复了一个 bug, 而是在下一次代码生成或者软件迭代时,不再写同样类型的错误。那么普通人要不要系统学习这项技术呢?屏幕前的你,如果是普通用户或者新手小白,平常也 就是用用豆包或者 kimi、 dipstick 这些 ai 工具的话,我的建议是不要着急学复杂框架,而是学一些 hnu si, 也就是给 ai 搭建工作台的思维。 简单来讲,就是懂得把问题描述给大家听,给多一些参考资料,再让他按标准自检。那么怎么做呢?其实你可以从以下这三个动作开始,第一,把常做的任务写成 s o p, 而不是每次重新解释。第二,把你的知识沉淀到一个 a n 浓度的地方,比如 overstand orson markdown 文件夹。第三,给每个任务设计验收标准,让 ai 做完后自检。我们以自媒体人员举例,平常不要只说帮我写脚本,你应该构建出你自己一个选 题库,然后把爆款结构、口播风格、禁用词分进脚本,或者说分进模板,包括检查清单,这几个内容都变成 skill, 写到 agent 的 技能包中,然后 agent 就 能够利用这些内容来给你写出你的视频脚本, 学习你的创作风格,让 agent 变得越来越懂你的一个创作系统。那么这样技术,什么样的人最需要学呢?简单来讲,真正需要系统学习和 news engineering 的是四类人,第一类,正在用 ai code 的 开发者和架构师。第二类,想把 ai 接近真实业务流程的产品、运营、数据和自动化团队。第三类,做企业落地的人。第四类是想构建自己长期知识财产的创作者或者研究者。因为这些人都存在一个共同问题, 不是 ai 会不会为他,而是 ai 能不能接住复杂上下文,按流程执行失败后修正,并且把经验留下来。这就是亨利斯 in the new york 的 主场。这项技术带来什么样的影响?我们分两点来看。 短期来看, pro news in the new year 会让 ai 从聊天效率工具变成工作流程员,他帮你跨绘画、推进任务、夜里跑验证、自动整理知识,让多个 agent 分 工协助一起推进整个项目。在 open ai 的 content 实践里, 人类工程师的重点已经从手写代码转为如何设计环境约束和反馈回路。长期来看,真正稀缺的能力会从我会不会写提示词变成我能不能把我的工作方法、领域知识和判断标准变成 ai 可以 读取、执行、验证和改进的系统。一个人在未来的竞争优势,很很可能不只是指挥 ai 写代码的能力,而是谁的思维知识更干净,谁的 反馈壁还更强,谁能把工作内容转成一套工作框架,让 agent 在 里面跑。所以, and the new york 最重要的启发是,不要只把 ai 当成一个更聪明的回答器, 你要开始思考怎么给他一个可持续工作的环境。最后用一段话说呗, permit 让 ai 听懂你, context 让 ai 了解你 m c p skill 让 ai 调用能力 啊和 news in the new year 让 ai 真正进入你的工作系统。以后我们评价一个 agent, 不 能只看他用了什么摩羯,更要看他被放进了什么和 news 中,这或许也是未来一个 ai 领域从业者的一个重要考核指标。如果你是新手,从今天开始最值得做的一件事 不是追下一个模型,而是把你经常做的一个任务整理成一套 ai 可执行的检查流程,这样你就拥有了自己第一个和你。

继续我们 harness engineering 系列第二期。上一期我们搞懂了什么是 ai 驾驭工程,知道它是靠系统规则管控 ai, 而不是靠改提示词哄 ai。 这期直接讲它支撑整个体系的四大核心骨架, 所有稳定靠谱的 ai 智能体底层全是这套逻辑。第一,约束边界,提前给 ai 划好红线,明确规定它能干什么,不能干什么,哪些文件能碰,哪些命令不能执行,哪些高危操作直接禁止,从源头限制权限, 杜绝越权乱搞,泄露隐私,破坏系统。第二,流程门控,不给 ai 自由发挥的空间,强制固定工作流程,必须按需求梳理方案、设计 任务、拆解、执行、开发、教验凭证,一步步来设置、观察、准入,不走完上一步,绝对不能进下一步,从流程上防止跑偏。第三,反馈回路。 ai 干完活不算结束, 系统会自动校验结果,核对需求,检查完整性,自动给 ai 反馈,让它自己调整,自己修正,形成闭环。第四, 错误字语防复发。这是最精髓的一点,普通用法是 ai 犯错了,我们手动改提示词。而驾驭工程的思路是, 只要他犯一次错,就把这个漏洞做成固定规则,固定教业门槛,永久封死,以后再也不会犯同类错误。这四大模块组合在一起,就构成了完整的 ai 驾驭控制系统。 不过很多人还是分不清 harness 和提示词、 skill, 还有我们之前讲的 superpowers, 到底有什么关联,怎么选怎么用。最后一期我们做清晰对比,再讲普通人怎么落地,学以制用,彻底把这套高阶思维吃透。

今天想把一件事说清楚, ai agent 到底是怎么工作的?有一个公式可以直接点提, agent 等于 model 加 harness。 model 就是 模型本身,只负责推理除此之外的一切工具,执行上下文管理、安全约束、错误恢复、状态持久化,全部属于 harness 的 工作。 理解这个分工是理解 agent 工程的起点。 harness 这个词介字,软件测试领域,只把被测代码套进一套固定装置里,统一驱动和检测。 在 ai agent 的 语境里,它的含义扩展了只包裹模型的整套运行时基础设施。公式很简单, agent 等于 model 加 harness, 模型只负责推理其余的全规 harness 管工具的调用与执行、上下文的组织与传递、安全边界的约束,出错后的恢复逻辑以及跨轮次的状态持久化。换句话说,模型是大脑, harness 是 让这个大脑能在真实环境里持续运转的一切支撑结构。 harness 控制 agent 行为的方式分两类,第一类叫盖茨,属于前馈控制,在 agent 采取行动之前介入,通过 agents md、 规则文件架构文档、技能文件这类材料提前告诉 agent 该怎么做,目标是提高第一次就做对的概率。 第二类叫 sensors, 属于反馈控制,在 agent 行动之后,检测结果触发自我纠正。典型工具包括 e s link 类型检查器、测试套件以及 ai 代码审查。 agent 两类控制一前一后,构成完整的闭环。 guides 负责预防, sensors 负责兜底。 前馈控制最核心的落地形式是几类规则文件和工具, agents md 或 cloud md 是 最直接的一种,把项目约定、禁止行为代码风格写进去, agent 每次启动都会读取 skills 文件,更犀利度。针对特定任务类型给出分布指令,比如如何新增一个 a p i 端点或如何写测试。 kolmas 则是可执行的代码变换脚本,直接对代码库做结构性修改,不依赖 agent 自己推断怎么改。 这三类工具的共同目标只有一个,让 agent 第一次就做对,而不是靠后续反馈、反复纠错反馈实现从清到重。大概分这几层,最基础的是 linter, 比如 e s lint 或 sgrp, 运行在毫秒级捕获风格违规和结构性问题。 往上一层是类型检查器和测试套件覆盖逻辑性问题网上一层是类型检查器和测试套件覆盖逻辑方向有没有漂移。 最顶层是 ai 代码审查, agent 处理需要语义判断的问题。这里有个关键细节, linter 的 报错消息本身应该针对 llm 消费来设计,直接在消息里嵌入纠正指令,让 agent 读到错误的同时就知道怎么改,形成正向提示。注入两种空 过渡工程,代价是速度慢,结果非确定性成本高,不适合每次提交都触发。两者覆盖的失败模式几乎不重叠, 只用计算型与一层的问题会漏掉,只用推理型,结构性问题的检测成本会高得不现实。把两者组合进同一个 harness 才能覆盖 agent 在 实际工程中遇到的大多数失败模式来看,一组 中手写的是临行,整个过程处理了大约一千五百个 pr, 人均每天处理三点五个,折算下来效率大概是传统开发的十倍。 团队后来扩展到七人,吞吐量还在继续增长,这直接违反了布鲁克斯法则,原因并不神秘。工程师之间的代码层面藕合被消除了,每个人只需要关注自己负责的 harness 环境。设计 agent 在 工程师睡觉时持续运行,单任务超过六小时是常态。 这组数字背后,支撑它运转的正是一套完整的 harness 基础设施。 harness 有 三个调节维度, 第一个是可维护性,也就是代码质量层面的约束。这个方向工具链最成熟, linter 类型、检查圈、复杂度分析都有现成方案。第二个是架构适配性,通过 fitness functions 来定义和持续检查架构特征,比如层间依赖方向、模块边界 c i 自动验证 agent, 不 过就改。 第三个是行为正确性,这是目前最难解决的维度,主要靠 a a 生成测试套件加人工测试兜底。对 a a 生成测试的信任度还不够,是整个领域待解决的核心问题。 我倾向于把 agents md 控制在一百行以内,让它只充当目录。具体的设计文档、架构说明、执行计划、产品规格全部分散放在 dax 的 结构化子目录里, agent 需要哪块知识就去取哪块,不需要一次性把所有规则都塞进上下文。 这种渐近式批漏的方式,既避免了超长文件挤占 talk, 也让每份文档的职责更单一,更容易维护。 模型是引擎, harness 是 轨道,两者缺一不可。光有强大的模型,没有工具执行上下文管理错误恢复这套基础设施, agent 跑不远。 真正决定 agent 能走多远的,是你在模型外面搭建的那套 harness。 从现在开始把 harness engineering 当做和模型选型同等重要的事来做。

今天和大家去聊一下 starbucks 在 上周发布的一篇文章,关于大项目里边实际去使用 cologne 的 一个最佳实践。那这篇文章里边其实大概讲了 cologne 怎么来用,然后后边呢?其实主要去讲 harness 为什么重要? harness 工程怎么来去做? 这里面其实我认为有很多东西的话,我们之间已经讲过很多遍了,那这里面非常关键的一个点呢?我认为是有两张图的,那一张图呢,其实是关于 colaco 的 这个 harnis 的 一个 session 里边,不同的这些组件在整个 session 里边占的一个周期和量级是什么样的?那第二个呢,就是这些组件 有很多地方其实是被我们误用的,那误用的地方呢?是有哪些?那所以我认为这两张图是非常关键的,我跟大家先讲一下整个的一个流程和这篇文章的主 主要的骨干,然后我们去主要介绍这两张图非常有价值,非常有收获。其实整个文章啊去讲 cologoth 在 一个大型编码中的一个最佳时间,实际他去讲的其实是 harnes 的 一个最佳时间。这边在说为什么我们使用 cologoth 的 时候,我们再用本地的代码去剪辑啊?因为这个 public 呢,其实它是有一定的一个时间周期的, 那这个时间周期下的一个处理呢,其实会让我们误读很多文件,所以会导致代码的不实时性,所以呢他就直接去使用读代码这个 grab 的 方式去读取。 那如果我使用直接读的一个方式呢?那其实我更希望的话是他能知道我现在的代码呢,到底的结构是什么样的?那这个呢,就是我们多次去提到这个 cloud 点 md 的 一个文件,它就隐身出了一个 harness, 那 harness 它的核心的组成呢?其实是有五大部分的,那 这五大部分呢?就是一个是 cloud 点 md, 我 们知道整个的这个目录的信息和需要注意的关键点是在哪些,还有呢就是在整个 a 阵生命周期里边的 hook 我 们怎么来做?然后能做哪些功能? 还有一些呢?我们认为是一些流程性的一些东西, work flow 的 东西,我们把它变成一个 skills, 然后这些 skills 是 人来去使用也好,是给 ai harness 去用也好,这也是非常关键的一部分。 还有呢就是我们要把这些搭建好的东西进行一个组织和团队的一个传承,那就用到一个 plagis, 把它进行一个打包和一个分发。 还有呢有一些工具呢,我们需要把它进行一个结构化,暴露出来之后呢形成一个服务,那这个服务呢通过 m、 c、 p 的 一个协议呢接入进来,那除此之外呢, l、 s, p 呢,也就说我们知道整个代码里边的关键定位是怎么样的,而不是说通过整个的字母串呢,就去读这些代码的 l、 s、 p, 然后和里边的 sub agents, 这两个呢,又把上面的整个能力呢,又给它进行了一步的增强。那所以呢,这就到了我们非常关键的两个对照表了。那第一个对照表呢,我们就讲这些组件儿,它其实误用的地方是在哪儿?我认为这个其实是非常关键的,你比如说 cologold 啊,它最常 见的一些误区呢,就是我们把所有东西都放在 cologold, 那 这个不其实是不对的,我们应该把一些 skills 这些东西呢,我们应该放在相关的一个技能里边,比如说它是一个 workflow 型的一个东西,我们应该把这些东西拆出来,而不是说全都放在 colog 点 m d 中。所以对于 cloud 点 m d 的 误区呢,就是我们把 skills 的 一些东西其实也放在 cloud 里边儿,那我们 cloud 点 m d 里边儿应该保证它非常简洁。那 第二块儿呢,就是关于 hux, hux 里边儿其实最适用的其实是在固定的一个生命周期里边儿,我们触发一些事情,比如说 commit 啊,或者固定的 t d d, 固定的 review, 那 这些是比较适合于整个生命周期的一个触发的。那对于一些提示型脚本,比如说提示词的一些东西的话,其实我们不需要去放在 hux 里边儿,我们更多的话是把它放在一些 一致性的一些检查呀,然后还有一些固定化的一个,嗯,陷入到生命周期这种调用我们才使用 hux。 那 skills 呢,就是我们保证专业的东西呢,可以让它专业化的这些东西呢,我们就放在不同的这个 skills, 而不是说把它全都放在 collab 里边,这个跟我们上面说那点是一样的。 然后 plugins 呢,我们就发现啊,有很多我们自己用的已经很好的东西,但是如果你要让它去呃团队扩扩展起来去用的话,其实你最好的方式是把它进行了一个打包,然后团队呢都有相同的一个环境,那这是 plugins 的 一个应用,那很多时候我们其实是放在呃本地的一个环境里面,大家其实是无法进行复制的。 那对于 lsp 呢,其实我们最多误解呢,是以为这是 coloclo 自带的一个一个方式,其实并不是,它更多的话是基于现有的一个环境,然后我们可以通过伏尔级的东西去固定的呃,去准确的定位到相关的目录里边,所以呢,这类能力其实不是模型本身的一个能力。 那对于 mcp 的 这个 server 来讲的话,就是我们的 harnis 其实还没有搭建好的时候,其实我们就着急去建很多的 mcp servers, 其实我就见过很多企业,他们在做一个东西,就是 呃,我现在要把所有的接口都进行 m c p 化,其实这个呢,对应这一条来讲,它其实也是错误的,就没有必要把所有东西都建成 m c p, 你 需要把它的基础设施啊,然后它的约束啊,它的 hux 啊,生物周期的侵入,把这些东西先做好,然后慢慢呢,我们一步一步再结合 m c p servers 来做。对于整个 seven ages 啊, 我们最大误区呢,就是我们不见 sam 一 阵子,我们把所有的这里边的探索,呃目录啊,探索项目啊,然后呢,包括改 bug 呀,包括主流程的一些设计思考和编码工作,我们都放在一个对话中了,那这个其实是错误的,其实更多的时候,比如说我们再探寻一个项目也好,我们再写一个测试用力也好, 那这个过程呢,我们需要给 subordinates, 让主 agent 呢有更干净的一个上下文,那这个呢,是非常重要的一个点,那这些点呢,其实就促进了我们可以把整个的 harness 做好,那所以为什么我认为这张表呢,其实是非常关键的。 除此之外呢,这还有一张它整个的一个 harness 的 一个 session time, 它们所占的时间,我为什么觉得这张表是非常关键呢?其实你会发现啊,这里边占的时间越多的地方呢,其实是我们更多应该花时间去做的一个地方,就它收获会比较大。呃,比如说我们会把 cloud 点 m d 这个文件呢,它在整个绘画中它占的这个比中是非常大的, 我们就把这个文件需要给它好好去设计一下。其实所以你会发现之前我在讲很多关于 cloud 三层设计也好啊,其他设计方式也好, cloud 点 md 这个文件其实我们经过了很长时间打磨和探索,然后除此之外呢,有一些固定化的东西,可以沉淀化的东西呢, 我们要嵌入到生命周期中,所以你会发现 hux 也是非常重要的。我们比如说,呃,沉淀的一些复利工程也好啊,然后去做 ttd 也好啊,然后去做 review, 自动化的一些 review 也好,我们把 hux 做好。那其实你哈尼斯这两部分其实你已经完成很多了嘛? 还有一部分呢,就是关于我们要把上眼纹做的比较干净的情况下,我们把问题解决。所以呢,你如果可能情况下,你多做一些 sub agency, 因为它也是在整个 section time 里边占了很多的周期的。那剩下其实就比较符合我们的直觉了,就是我们 lsp, 我 们开了之后呢,然后固定了 workflow 呢,我们就变成 skills, 然 然后有一些需要提供服务,需要让模型去掉,我们就变成 m, c, p, 然后最后呢把这些所有做好的东西呢,进行一个打包分发和共享,让团队呢都可以基于这一套 harnis 去做,有效的去做开发。所以这两张图呢,我觉得是非常重要的,那这些内容呢?分享给大家,希望呢?对大家都有收获,关注雷哥,关注 ai 工程化落地。

大家好,最近有一个词啊,跟 openclaw 一 样爆火在各个 ai 的 话题里,而且它似乎还在偷偷透露着一个 ai 发展的新方向。如果你听过提日词工程,也听过上下文工程,那你应该知道我说的是哪一个词了, harness。 但我今天分享的不仅仅是 harness 到底应该怎么样理解,更重要的是一个关于 harness 的 核心洞察, 一个正在悄悄发生的,但是没有被大部分人注意的独特视角。如果你正在做艺人公司,或者想成为超级个体,那么这个视角对你 尤为重要。不过为了更好的理解,我们还是先补充一点关于哈尼斯的一些知识吧。哈尼斯直译过来就是马具。如果你要让马拉车,你需要的那些胸带啊,系绳啊,或者说如果要骑马,你需要的鞍具,将绳,马鞭, 这些都被称为 harness。 总的来说,就是让把更好地完成工作的不可缺少的工具。那如果你要让一个 agent 更好地完成工作, 那也需要 harness。 你 可以记住这个公式啊, ai agent 等于模型加 harness, 也就是说, ai 除去模型的一切都可以被称为 harness。 它们是让 a i a 日呢正常工作所依赖的软件环境或者是基础设施,比如说 cloud code, 或者是 open curl, 它们都属于 harness。 但你光知道这些还是不够的,你还是需要知道 harness 的 基本原理。 harness 呢,一句话来说,它是通过反馈循环来解决大圆模型输出的概率性问题的。 比如说 ai 调用了一个工具,它参入错了,这时候就可以通过反馈循环来告诉它你调用错了,于是 ai 再次修正,再次调用。如果下次纠正过来,这个反馈循环就可以称之为一个好的 harness, 有 效的 harness。 于是业界就开始讨论,到底什么样才算是一个有效的 harness 工程。 如果你读过这几篇来自 ansauric open ai cursor 的 文章,你就会发现,如果从 harness 的 效果来分,又能分出不同的维度,比如说让人类更少介入,让 ai agent 能运行得更久, 让更多的 ai agent 能够协助解决复杂的问题。前几天小米的罗弗利不是也说了吗,好的 harness 应该能用更少的 token 来完成任务。 好了,这就是问题了。现在无论是国内还是国外的媒体圈或者是技术圈,大家都聚焦在了解决软件工程这个问题的这颗钉子上了。 但实际上,你如果要做一人公司,或者是成为超级个体,你的问题就只有软件工程的问题吗? 觉得不是这样子的就拿我说吧,我现在视频其实是缺少丰富的表达,缺少很多素材,更不要说什么节奏啦,音乐啦,音效啦,于是我就在尝试做我自己的解决方案,我自己正在做一个 b o 生成器。这我之前给大家有分享过, 根据我的讲稿,让 ai agent 调用升图、升视频、升音乐的模型来为我生成一些素材。但我遇到的问题就是,实际上大模型推导出来的提示词,它非常的不可靠,而且每次生成的内容,它都无法去检查这个内容到底是好还是坏,也就是说无法给出有效的反馈循环。 简单来说,我的解决方案不是一个有效的 harnis, 因为它无法通过反馈循环来提供约束来限制 ai 输出的随机性。直到我看到了一篇论文,这一下就打开了我的思路,也逐步的解决了这个问题。 这篇论文简而言之,它用一个视觉多模态模型作为裁判来给生成的图片打分,而且不是简单的就直接给分数。 它把 ai 生成的提示词和用户的需求分解成了非常多的客观的多维度的是非问题。比如说,我要生成一个每短猫在午睡的图片, 它会生成很多断言式的提问,比如说猫咪是不是黑白相间的颜色,当前是不是中午猫咪是否在睡觉, 然后逐项打分,这样我就把图片有没有达到要求给量化了。我又加了一套搜索树的算法来实现一个 harness, 通过不断调整提示词,重复打分并记录历史轨迹, ai 就 可以从过去的失败中学习找到控制图片效果的关键词。 从这件事情,我获得了一个关键的洞察, janice 实际上也可以用于控制更多模态的输出的随机性。这和 onsurprise 那 篇薄荷里提到的对抗网络是完全一样,一个生产者,一个确认者在对抗,只不过生产者生产的是图片,而确认者不是用软件工具来检查,而是使用视觉模型。 于是我发现啊,我之前可能陷入了一种思维定势。我们都在讨论用哈尼斯来约束大元模型来解决软件工程的问题,但是如果我们给哈尼斯工程的目标再加一个维度,让它去控制 m l m 的 输出质量, 那是不是视野一下就打开了呢?我们可以用算法加多模态模型来检查视频、图像、音频,甚至连音频里的情绪都可以 让这些模型的输出更加符合我们的要求。我们甚至可以用复杂的多模态模型的编排来实现更加复杂的内容,比如说短剧的生产。 真巧啊,很快我就找到了一个例子,前年刚出的一篇论文叫 cutclaw, 它是一个长视频加音频的剪辑工具,它不是某一个单一文本模型的能力,而是六个组建,用了四种模态的模型来组合编排。比如说它先用 whisper 来识别出视频中的字幕, 然后用算法做镜头切割,用 gemini pro 做编辑,用千万三 omni 来理解音乐,用 minimax 来实现精准的裁切,最终由千万三 vl 从三个维度做审查来和生成的内容做对抗。 这和我们刚才说的 ansp 博克中的对抗网络如出一辙。除此之外,我还发现不少的论文都有相关的线索,他们没有大肆地使用 harness 这个热词, 而是非常务实地使用各种类型的多模态模型实现了复杂的编排。不过大家有看我一人公司系列之前的内容,应该记得我在第二期介绍过的多模态模型的版图, 其实就是从效果上来说多模态模型的 harness 这件事,而今天我是从原理上剖析,有了这样的基础, 下次我们再讲案例,大家才能理解。所以建议如果没有看我以前的内容,可以去补一下番。最后啊,借助英伟达官网关于 m l m 的 定义来做一个总结,我希望大家能记住 m l m 这个词以及它的定义。 这个世界是多模态的,所以和人类交互的数字内容也不应该仅限于文本。所以在讨论哈尼斯工程的时候,我希望大家打开你们的视野,也不要忘记那么多生图生视频, 还有生成音乐的模型。在后续的篇章我将会更加深入去探讨多模态模型的编排,也会去思考它们的 harness 应该从什么样的维度去定义目标,以及如何实现。好了,以上就是本期的全部内容,谢谢大家。

这就是最近爆火的新名词, harness, 几分钟的视频,以我的一人公司官网为例,带你走进 harness 的 世界。 harness 并非一个定义充分的东西,它呢,更多是一种思想,起源于 matechat, 它的最初形态是开发过程中把修改的经验统一为方法论。在接入开发过程中, 其实可以以我的官网举例,这里面有一个功能,用户支付后会自动唤醒飞书,自动的授权,把用户拉入群聊。我不懂代码,也没有注册公司,用邪乎的办法搞定了这个功能,但发现哈,隔天起来, agent 会重新看一遍所有的架构,思考为什么这么设计。 因为办法高度的定制化,非传统,超出了 agent 知识库的范畴,他可能还会修改错误。那么这个时候, hans 的 第一层上下文就体现关键性的作用了。 那么你一定能够想到,每一个项目都有对应的 agent 点。 m d, 这是项目的工程指南,它包含了项目架构、技术选型、核心坑点等等的所有内容。每次执行任务, agent 都会先阅读这个文件,读完后自然会一目了然,只需定位到要修改的文件,便大大提高了开发的效率。 你要做的很简单,每个模块和功能都存储到对应的开发逻辑,最终合并就是一份完整的开发文档。 bug 定的朋友一定知道,让 ai 调整字间距是一种巨大的折磨。你和 ai 明确表达,让它预览后再交付,它知道要预览,但它呢?没有预览的工具,它就会思考一番后,直接跳过预览的需求,然后直接交付掉。 这其实并不是它不想,而是它不能,这就是工具系统的含义,给他配备预览的工具,并告诉他什么时候用,这时候你就会发现它的准确性大幅的提高。 刚刚讲的是现成的工具,其实我们也有很多工具是属于自己的项目的,你可以在开发过程中把脚本分装为一个工具。 依然以支付系统举例,我希望在支付弹窗内边写一个倒计时的组建 ai, 可能会把支付的一个时长定义为十分钟,但是后台的订单可能五分钟就过期了。这是因为同一个功能模块的修改,很多时候并不在同一个窗口内完成, 用户会看到,明明系统还存在,怎么我就没有办法扫码了?这么一个完整的任务至少需要这么几步,对于信息不足的部分,需要搜查信息,进一步制定方案,然后再去解决问题。直接把需求给他,他会拿到代码,直接开始操刀,忽略了你项目的特定情形,从而出错。 而这就是编排的作用。简单复盘一下上下文就是 ai 的 大脑,工具就是 ai 的 手脚,而编排就是 ai 做事的方法论。这么看, harness 是 不是也就没那么糊人了? harness 的 深入内容,我们下期继续讨论,关注我,我们一起探索 ai 的 世界。

最近产品同学问了一个问题,到底什么是 harness? 很多同学听过这个词,也知道它和 ai, ai 有 关,但并不清楚它在工程上到底指什么。要回答这个问题,单独定义 harness 是 不够的,它必须和它周围的几层概念放在一起看边界才会清楚。 所以这期我们换一个视角,不是孤立的解释哈尼斯,而是看一次 agent 跑一次任务,到底有哪几层工程在协助。从这个视角出发,再回头看哈尼斯是什么就清楚多了。先看 prompt engineering, 它的本质不是写一句更聪明的话,而是设计模型的输入协议。它解决的是怎么把任务告诉模型、 角色、任务输入、输出格式、视力约束这几块都要说清楚。这个思路的背景是 gpt 三之后大模型展现出的 in context learning 能力,也就是模型参数不变,只要在输入里放任务说明和少量视力,就能完成新任务。后来 change of thought 还证明 prompt 可以 作为推理脚手架。所以 prompt 不 只是自然语言,它开始变成一种工程接口。所以工程上 prompt 会被模板化、版本化、结构化。页面上这个例子里的 role task constraints, input output, scheme examples 就是一个典型的输入协议。但它的边界也很清楚, prompt 只能组织已经在输入里的信息,如果模型看不到项目文件、历史状态、工具、结果提示词写得再好,它还是只能凭空生成。这就是为什么下一层抽象会出现 context engineering。 context engineering 的 本质不是把更多东西塞进上下文,而是为模型当前这一步推理构造最合适的信息状态。也就是说,模型不是一次性看到整个世界,而是在每一部由外部系统组织它该看到的信息。这个概念很容易被简化成上下文,越多越好。 但这其实是误解,上下文窗口可以越来越长,但越长注意力越散,推理越贵,响应越慢,缓存越容易失效。 所以工程上 context engineer 要做的是筛选、排序、压缩、加载、缓存、附用和渐近式。譬如哪些文件该进来,历史记录保留,哪几轮工具返回要不要加载,这些都在影响模型下一步的判断质量。具体来源可以拆成六类, system proc files、 memory reg 二、 results 和 cash。 常听到的 rich prompt、 catching 乃至 cloud code 里的代码。上下文选择都是 context engineering 的 具体形态,但它也有边界。 context 决定模型当前能看到什么,却不决定系统什么时候调用工具怎么执行,动作失败后怎么恢复。 这就是为什么下一层抽象会出现 harness engineering。 把刚才两个概念放在一张图上对比,这张图改编自 anthropic 二零二五年那篇 effective context engineering for ai agents。 左半边是单轮 context, window 里就 system prompt 和 user message 模型,读完给一个回复,一锤子买卖。右半边是多轮 agent, 外面多了一个 possible context 文件工具,记忆解锁历史远远超过上下文窗口能装下的量。 所以中间要有一步 curation 筛选压缩缓存,把这一步真正需要的部分送进窗口,模型推理后产生突抗,结果再回流到 possible context, 进入下一轮核心差异就一句话, prompt 是 一次性输入, context 是 循环 curate。 但这就引出一个问题, 这个循环到底是谁在驱动? anthropic 在 scaling managed agents 里给了答案, context management in the harness 上下文管理在 harness 里,这就是下一页要讲的。 harness engineering 的 本质是把思考、执行和记录分开,再由 harness 串成一个可恢复的循环。 antropics 在 scaling managed a 金词里有一个很好的说法叫 decouple the brain from the hands, 意思是把大脑和双手解偶,页面上这三张卡就是 brain hands session。 我 们一张张看,先说 brain, 就是 quad 这样的模型 基于上下文推理生成下一步意图。这里要补一句, in graphic 原文里的 brain 其实是 cloud 加 hannis, 本期为了讲清边界,把 hannis 的 单拿出来讲。 hands 是 执行动作的部分。 三 box m c p 终端浏览器外部工具比较稳的做法是把它们抽象成统一接口,而不是和某个具体容器绑死。三申则是事件日制,它不是跨的 the context window, 而是持久化在外部的事件流。 hannis 可以 通过事件接口读取历史事件, 筛选切片将要之后再决定哪些内容进入下一轮上下文上一页说的 context management in the harness 在 这个架构里就落地了。 harness 从筛选和工具结果中筛选、裁剪、回放信息,再送给 brain, 进入下一轮推理。而这个从 brain 到 hands 再到筛选,最后回到 brain 的 外部循环, 其实就是 react 耐克思考动作观察循环的工程版本,放到 ai 参与软件开发里看,模型不会主动读文件,跑测试,维护任务状态,把这些能力组织成可受控、可验证、可恢复的工程闭环的就是 harness。 但哈尼斯也有边界,哈尼斯决定做什么,怎么做,沙箱与全线决定动作在哪里发生,能影响什么。这一块在工程实践里通常被合并进哈尼斯作为其 sandbox primitives。 这就是为什么最后要把三层重新摆在一起。看看这张图, prompt engineering, context engineering, harness engineering 不是 一条时间线,而是欠套的关系。举个例子,上网搜一下最新的 antropics 博克, prompt 决定怎么把任务说给模型, context 决定这一步,模型看到哪些已有信息, harnis 决定调哪个工具走哪个沙箱,搜回来的结果怎么进入下一轮 context 三层各管一段,缺一层都跑不起来。回到开头的问题, harnis 在 工程上做了什么?我的答案就是这一层,把模型、工具和状态串成可恢复的执行循环。本期反复提到的 context engineering, 我 有一个专门的系列在讲, 感兴趣的同学可以去翻翻,感觉有所收获的同学可以点赞收藏加关注,我们下期见!

如果说二零二五是 ai agent 的 原名,那么二零二六真正的风口就是 hanis ai agent, 它聪明是聪明,但是非常容易说胡话,记不住东西,而且还非法夺取你的文件。如果 ai 容易说胡话,那么 hanis 有 实时检查加错误拦截的机制。 如果 ai 记不住东西,那么哈尼斯有分层记忆功能,它短期聊过的内容以及长期要记的东西都能存下来。如果 ai 非法读群的文件,那么哈尼斯还有安全限制加权限管控,不该干的事坚决不碰。教大家一个技巧,不管你是用豆包还是千问, 直接在对话框里说,请在之后的聊天中开启哈尼斯管控,非常简单,亲测有效。

继 prompt engineering、 context engineering 之后, ai 圈最近又冒出了一个新名词,叫做 harness engineering。 从今年二月份开始,这个词频繁地在 ai 圈里面出现。 openai 专门发了一篇文章讲他们怎么用 harness engineering, 在 五个月内写了将近一百万行代码。 antropics 也紧接着发文分享了自己如何使用精心设计的 harness 架构来驱动 agent 的 开发应用。 不仅如此,就连技术大牛 martin fauler 创立的技术网站 martin fauler com 也开始公开讨论起了 harness engineering。 但与此同时,也有不少人认为这不过是个噱头而已。换汤不换药, 那 harness engineering 到底是什么?它跟 prompt engineering 和 context engineering 又有什么关系呢? harness engineering 是 真正的技术突破?还是说只是 ai 圈约的炒概念?这期视频我们就来把这个事情彻底搞明白。 在讲 harness engineering 之前,我们不妨先来讲讲他的两个前任,分别是 prompt engineering 和 context engineering。 对 于这两个概念比较熟悉的同学呢,可以直接跳到下一个章节。 首先是 prompt engineering, 这里的 prompt 呢,你可以简单理解成用户发给大模型的话,而 prompt engineering 呢,就是一门研究怎么把这句话说清楚的技术。 举个具体点例子,比如说我们可以向大模型发问,帮我的猫起个名字,这个问题呢,就是 prompt 了。接到 prompt 之后,大模型就会给你一个答案,比如说是什么花花呀,小白呀之类的。 不过这些答案可能都无法让你满意,因为你家的猫呢,可能是橘色的。无论是花花还是小白,都与橘色这个颜色相冲突。那为什么大模型会给你错误的答案呢?这是因为我们没有在 prompt 里面给大模型充足的信息, 既然问题出在 prompt 上面,那解决问题的关键自然也在 prompt 上面了。说得再具体一点,那就是我们需要学会如何更精准地表达自己的需求。 这个呢,就引出 prompt engineering 了。 prompt engineering 就是 专门用来研究怎么把话说清楚的,还是用之前的例子,让我们重新设计一下这个问答流程。 按照 prompt engineering 的 理念,我们需要发送的 prompt 就 应该是这样子的,帮我的橘色小猫起名两个字,需要体现出它活泼爱玩的性格。 这个时候大模型就可以给出一些更让我满意的名字了,比如说是橘宝,代表橘色的大火宝,橙豆,橙色的小豆子。 你想小豆子掉在地上蹦蹦跳跳的,那也能够体现出猫活泼的性格嘛,你看这两个名字就跟你的猫更贴切了。没错,说白了呢, prompt engineering 就是 一门调整大模型提示词的技术。 对,就是这么简单。不过如今 prompt engineering 已经很少被单独提起了,一方面它的门槛实在是太低了,另一方面的,模型本身的能力呢,也变得更强了,很多时候不需要在 prompt 上调来调去,能给出不错的回答。 好,这就是 prompts engineering。 下面呢,我们来看看 context engineering。 我 们还是用小猫来举例啊,假设你拿到了小猫的名字之后,还继续跟大魔仙聊天,比如你问它,那它平时吃什么好呢? 这个呢,就是我们的 prompt 了,我们来把它单独标出来。那现在重点来了,我们此时要发给大模型的其实不仅仅有这个 prompt, 还有之前的对话历史。这样的大模型才知道这个新问题里面的它指代的是什么。 那无论是 prompt 还是对话历史,它们呢都是大模型所接收到的信息,我们把大模型所接收的所有信息起个名字就叫做 context。 当然 context 的 内容呢,还不只有这两个,它还包含工具列表, skill 列表等等,我们就不一一列出了,你也不用太关心, 你只需要知道 context 是 有容量上限的,所以我们不可能无止境地往里面塞东西,我们需要精心设计 context 里面的内容,这个呢就叫做 context engineering。 context engineering 有 很多具体的方法,比如说其中一个非常经典的技术,就是上下文压缩。之前不是说我们会把对话历史放在 context 里面吗? 我们跟模型越聊越多,对话历史呢也会越来越多。当超过某个域值的时候,我们就可以使用上下文压缩技术,把之前的对话历史做个总结,以防止 context 里面的内容过多,影响回答效果。 当然,除了上限文压缩之外, context engineering 还有很多其他的方法,比如说是什么动态解锁外部资料啊,间谍式纰漏啊等等,这里呢就不一一缕举了。 可以看出 context engineering 还是挺能整活的,搞出了这么多的东西。不过吧,这依然不是终点,因为大家发现啊, context engineering 这门技术的效果呢,是有一定的上限的, 为了进一步乍看大模型的潜力呢, ai 却又整出了新花样,这个就引出了我们今天真正的主角 harness engineering。 要搞明白 harness engineering 这个概念,我们就得先从 harness 这个单词说起。这个词在日常生活中其实不太常见,很多人可能也是第一次听说。 harness 这个词的本意啊,其实是马具的意思。大家看啊,这是一匹马, 而 harness 或者说是马具,就是套在马身上,用来控制马的那些装备,比如说是缰绳啊,头套啊这些。 虽然马非常强大,但是我们必须借助马具的力量来限制马的活动,这样呢,我们才能够让马为我们人类所用。好。现在呢,我们把马具从马身上单独拆下来做一个类比。 左边这批脱掉马具的马,对应的就是 ai 领域里面的大模型。你想大模型是不是特别强?尤其是像 gbt、 opus 这样的顶级模型,能干的事情可太多了。但大模型就像马一样, 如果我们不对它加以干预,任由大模型自己去运行和发挥,那它就会像脱缰的野马一样,发散思维,甚至产生严重的幻觉,最终根本无法稳定地给我们想要的结果。 所以呢,我们必须要把大模型给控制住,就像用码具来控制码一样,而这套用来控制大模型的系统就被成为了 harness。 没错, harness 就 对应了这个码具 好, harness 呢,就是 agent 里面用来控制和驾驭大模型的系统。所以呢,从这一点出发,我们就能推导出 harness 的 公式, 也就是 harness 就 等于 agent 减去 model。 换句话说,一个完整的 agent 减去里面的大模型,剩下的所有东西都是 harness。 不过需要注意的是啊, harness engineering 是 一个非常新的概念,目前业界呢,还没有形成严格的定义,这个公式只是目前大多数人比较认可的一种说法,并非是严格的学术定义, 所以只要不是大模型,就是 harness。 关于这点呢,我相信你已经明白了,下面呢,我们来看个具体的例子。我们可以用 cloud code 来举例,在 cloud code 里面,所有不属于 cloud 模型的部分都是 harness, 比如说是写在 cloud md 里面那些大模型要遵循的规则啊, cloud code 可以 使用的工具啊,或者是它的定时调度机制啊等等,这些呢,都是 harness。 当然, harness 设计的范围很广,我这里只是举了三个例子而已。总而言之啊,只要不是模型,我们都可以将它视为 harness 的 一部分。 那 harness 了解了,顺理成章的 harness engineering 的 概念也就呼之欲出了。 harness engineering 呢,就是一门专门研究如何构建与设计 harness 的 技术。换句话说就是除了大模型本身不研究,别的什么都研究。 它不再是仅仅盯着模型书的那点提示词或者是上下文,而是站在更高的系统层面上研究怎么给大模型设计一套可以稳定运行的系统,让大模型能够踏踏实实地为我们人类做事。 所以从这里可以看出, prompts engineering、 context engineering 和 harness engineering 更像是一种层层递进,研究范围不断向外扩展的关系。他们关注的问题呢,是越来越大,越来越广, prompt engineering 研究的是怎么问问题?具体来说呢,就是如何组织 prompt, 把发给大模型的话说得更清楚,更准确,让模型能够更容易理解你的真实意图,并给出理想的结果。 context engineering 呢,研究的内容比 prompt engineering 更广一些,他研究的是怎么给信息。具体来说呢,就是怎么在最合适的时机把最合适的内容放到模型的 context 里面。 context 里面的内容呢,不仅包括 prompt, 还包括工具列表,对话历史等等。所以呢, context engineering 的 研究范围会更广一些。 harness engineering 的 研究范围呢,就更加激进了,他研究的是如何搭建系统,也就是如何围绕着大模型搭建一个完整可靠的 agent。 他的研究对象呢,直接就覆盖了除了大模型之外的所有内容,比如说是什么权限管控啊,工具管理啊等等,都是 harness engineering 要研究的内容。相信现在你已经了解了 harness engineering 是 什么了,那 harness engineering 具体要做哪些事呢?有没有一些实战的例子? 说实话,这个概念实在是太新了,目前业界呢,也没有一个公认的体系。与其我在这里自说自话,我们不如来直接看看大厂是怎么做的。我们首先从 openai 开始, 二零二五年八月, openai 内部启动了一个疯狂的实验,那就是用 ai 从零开始写一个真实的软件产品,全程不允许工程师手写一行代码。 对,没错,这个产品的所有的组成部分都是由 ai 生成的,具体是包括业务逻辑啊,测试啊, c i 配置啊,文档啊,内部工具等等, 所有的东西都是 ai 生成的,靠着 ai 这个项目的代码规模,直接是干到了将近一百万行。而且注意喽,这可不是一个玩具,它是一个真正在线上跑,有真实用户的生产系统。 达到这样的规模呢,总体耗时只用了五个月左右。团队规模一开始呢,是三个人在主导,后来呢,也只不过是扩张到了七个人, 算下来呢,开发效率差不多是纯人工的十倍了。但有意思的是,这个实验一开始的进展并不顺利,这并不是因为大模型不够聪明,而是因为 harness 没有搭建好。工程师们发现 agent 经常走错方向,甚至重复犯同一个错误,于是他们意识到,要想让 agent 经常走错方向,甚至重复犯同一个错误。于是他们意识到,要想让 agent 可靠的工作,真正的功夫呢,在于把 harness 设计好。 为此呢,他们做了大量的优化,并且写了一篇文章,详细记录了这个过程。这篇文章呢,我反复读了好几遍,它的信息量非常大,涉及到很多 harness engineering 的 优化点。所以呢,这期视频我们就来重点聊一聊 openai 在 harness engineering 上面到底做了什么。 原文呢,是从多个具体的优化点里面展开的,信息密度非常高。所以呢,这里我尝试给这些优化点大致分了个类,分别是上下文、管理验证与反馈和技术债清理。 当然需要强调的是啊,这只是我个人所做的一个分类,主要是为了帮助大家理解。下面呢,我们就来一一看看这三大类到底是在做什么?首先是上下文管理,上下文管理的主要目标呢,是让 agent 获取到足够充足的信息。 你可以想象一下,一个新入职的工程师,如果对项目一无所知,不清楚模块怎么划分,不知道代码规范是什么,不了解团队过去做过哪些技术决策,那他是根本就没有办法开始工作的。 agent 呢,也是如此, 为了解决这个问题, openai 最初的尝试是把所有的项目规范和相关信息塞进一个超大的 agent 点 m d 文件,这个文件呢,会随之用户的问题一起发给大模型,这样呢,大模型就有了充足的信息了。 不过 openai 后来发现呢,使用一个大而全的 agent dmd 文件根本无法解决问题。原因呢是有很多,这里呢说两个最关键的。第一个呢,是内容太多,使得模型的效果变差。设想一下,你第一天去新公司报道, hr 直接砸给你一个巨厚的员工手册,说规矩全在这里,你自己看吧。 那我猜你肯定是一脸懵的,完全不知道该从哪里看起,也完全搞不清楚重点在哪。 ai 呢,也是一样,一股脑的把所有的信息全部都喂给他,那他就迷失了,只能抓到一些碎片,真正关键的内容反而被淹没在了废话里。 第二点呢,是这个文件会逐步的孵化,项目是在不断引进的文件,里面的内容却没有人及时更新,时间一长呢,就变成了一堆过时信息的垃圾堆。 更糟糕的是啊,这个文件乱到连人都懒得去整理,那 agent 呢,也就没有办法判断哪些内容还有效了。所以呢,他们后来改变了策略,把 agent 点文件压缩到只有一百行左右,大体结构呢,差不多就是这样子的。可以看出, agent 点文件里面呢,已经没有什么太多实质性的内容了,就是一个目录而已,对应的文件系统呢,大致是这个样子的, 可以看出相关的文档和目录呢,会跟 agent 点 m d 放在一起,这样呢,用到哪块再给 agent 看哪块,效果呢,就会好很多。看来大魔仙跟人一样,还是要把信息分门别类的放好才行。 除此之外, openai 还发现了一个问题,项目里面有很多重要的信息其实并不在代码仓库里面,它们可能是散落在 select 的 聊天记录里,可能是躺在某个 google doc 的 文档里,甚至呢,是只存在于某个老员工的脑子里面。 这点呢,我相信大家也深有体会啊,只不过可能用的是国内的软件生态,而不是说是什么 slack、 google doc 这些。 对于 agent 来说,它只能是看见仓库里面有什么,仓库外面的一切对它来说都跟不存在没有什么区别。所以 openai 是 怎么做的呢?它们是强制要求把所有重要的决策和约定都搬进代码仓库,让仓库成为唯一的事实来源。这样呢, agent 就 可以了解到这些外部的信息了。 那这个呢,就是上下文管理方面所做的事情了,下面我们来看看验证和反馈部分在做什么。 做好了上下文管理,有了充足的信息之后, agent 就 可以写代码了。后面的重点呢,就是在 agent 写完代码之后,让他能够验证自己的成果是否正确,不然呢,他写完了之后没法验证,那这肯定是没有办法保证准确率的。 open ui 的 做法呢,是给 codex 配上足够完善的工具和 skill, 在 这两制的帮助下, codex 就 能够在任务进行中随时验证自己的输出。 让我们举个例子,比如说他们把 chrome devtools 接入到了 codex 的 运行环境里面,这样呢, codex 就 可以自己截图,自己查看 dom 结构,并且自己模拟用户操作,从而去验证 ui 是 否符合用户的要求。如果发现这里面有问题,那 codex 就 可以原地修复,整个过程呢,就不需要人去介入了。 除了 ui 之外, openai 还给 codex 接入了完整的可观测性工具站,以便让 codex 可以 获取日制获取指标,并在必要的时候追踪运行链路以排查问题。为了确保日制和输出的准确性, codex 的 每个任务都跑在一个完全隔离的环境里,有自己独立的日制和指标,任务结束之后呢,也能自动销毁。 这样做了之后, openai 甚至可以让 codex 对 系统做一些可量化的性能调优,比如说是要确保服务启动时间不能够超过八百毫秒之类的。 上面所讲的这些呢,都是为了保证 codex 生成代码可以实现产品诉求。但很多时候,我们对 codex 生成代码本身还有一定的要求,比如说呢,这些代码至少要符合项目架构上的规范。 openai 把它们的系统分成了好几层,并且规定了严格的依赖关系,从上到下分别是 ui、 runtime、 service、 wrapper、 config、 types, 每一层都只能依赖它下面的层,依赖关系不能反了,比如说是像 raf 层依赖 ui 层,这样的事情是万万不能发生的。 open i 呢,是使用 linter 和测试来避免类似的情况发生,我们一起来看看它们是怎么保证架构规范的。在 agent 生成代码之后, linter 或者是测试便会开始检测代码是否合规,如果不合规的话,它便会报错,报错信息呢会发回到 agent 那 里, agent 呢,会根据报错信息去修改,改完之后再跑 linter 或者测试, 这样呢就形成了一个完整的自动闭环,不需要人工去介入。这个流程会重复个几次,直到某次检测之后,所有的规则,所有的测试全部通过。这样呢,我们就拿到了一份符合架构要求的代码了。 好,这些呢,就是验证与反馈这部分的内容了,下面我们来看看技术在清理这部分在做什么。 agent 在 大规模生成代码的过程中,会不可避免的引入一些糟糕的设计模式,比如说是重复的代码,偏离架构规范的写法,不一致的命名之类的,慢慢积累下去的话呢,会把整个代码库搞得一团糟。 open n 的 解法呢,是给技术债做一些垃圾回收,把这些问题通通解决掉。具体来说呢,就是设置一个后台的 codex 任务,定期去扫描整个代码库,找出其中偏离规范的地方,自动修改并提交,以便确保代码的质量始终维持在一个比较高的水准。 这个呢,是对代码的清理和优化。除了代码之外,他们还对文档做了同样的事情。具体来说呢,是他们设置了一个后台任务,定期扫描整个文档库,找出那些过时的和实际代码对不上的文档,自动提交修复。所以你看,无论是代码还是文档, openai 都有着一套对应的维护方案,两边呢,都不会放任自流。 以上呢,就是 open ai 所做的一些核心的 harness engineering 实践了。看完这些,你可能有一个强烈的感觉,这哪里是在写代码呀,这完全就是在给 ai 构建干活的环境啊,人负责定方向,搭框架,具体干活的事情就全由 ai 来做了。 没错,这正是 open ai 这篇文章想要传达的最核心的理念。通过这五个月的疯狂实验, open ai 不 仅跑通了这套一百万行代码的系统,更重要的是,他们在这个过程中重新定义了人类和 ai 在 未来的工作边界。在文章中, open ai 抛出了一个非常关键的断言, human steer agents execute, 翻译过来就是,人类负责掌舵, agent 负责干活。说白了,到了 harness engineering 这一步,人和 ai 的 分工就彻底变了。 以前工程师要亲自下场,一行一行的写代码,遇到报错自己查,测试呢,也要自己跑。但现在呢,人类更像是在掌舵人负责定方向,给上下文制定规则,在关键的地方做判断,而那些真正重复的琐碎的开发工作,就交给 agent 在 harness 里面跑就好了。 基于这个全新的边界, openai 紧接着又提出了第二个非常重要的观点。这个观点呢,点明了软件工程师在 ai 时代的新职责。对应文章里面呢,是这一段话,这大致意思就是在说啊,虽然人类不再需要亲自手写代码,但软件工程的工作并没有消失,而是演变成了完全不同的形态。 如今,软件工程师的核心职责变了,变成了为 agent 搭建稳定可靠的系统与支撑框架,以此来尽可能地提高代码产出效率。这两个观点呢,可以说是 openni 那 篇文章的灵魂,它直接告诉我们, harness engineering 不 仅仅是如何写好 prompt 或者是如何管理上下文这么简单,它是在重塑整个软件工程的开发流程。 那以上就是 openai 这场 harness engineering 实战的核心精髓了。最后呢,我想跟大家说明一下。为了帮助大家快速理清脉络,抓住核心思路,这篇文章呢,我是做了一定的提炼和简化的。 但必须要说, openai 的 这篇文章写得非常的精彩,如果你对里面的技术细节感兴趣,强烈建议亲自去读一遍原文,相信一定会让你大受启发。 在这一章节里,我们来看看 anthropic 的 两篇与 harness engineering 相关的文章。第一篇呢,是去年十一月发表的 effective harnesses for long running agents, 它讲述了如何配置环境,以便让 agents 长时间自主运行。 第二篇呢,是今年三月份发表的 harness design for long running application developments。 这篇文章呢,可以理解为是第一篇文章的续集,它在第一篇文章的基础上,对 harness 架构做了进一步的优化和调整,使其能够处理更多类型的任务,达到更好的效果。 这两篇文章的信息量很大,不过总结下来,最核心的地方呢,就两点,一个呢是跟任务规划有关,另外一个呢,是跟质量评估有关,我们来一个一个看。首先来看一下任务规划这一部分, 在第一篇文章中, answapp 做了一个实验,直接让 agent 执行一个任务,克隆 cloud 点 ai, cloud 点 ai 就是 cloud 的 聊天界面,大致呢就是这个样子的,它跟 chat gpt 是 同类型产品, 虽然看起来只是一个聊天界面而已,但说实话,它背后的功能还是挺多的,一口气做出来是一件几乎不可能做到的事情。 这个呢,也是 osarpic 一 开始所遇到的问题。在 osarpic 的 实验里, agent 接到需求之后立马就开干了,干劲非常的足啊,但是效果也非常不好,主要是因为这个需求的工作量实在是太大了,直接给到 agent 的 话, agent 就 会急于求成,从而引发一系列的问题。 比如说他总想一口气把所有的功能全部做完,结果干到一半上下文就满了,直接抛下了橄榄摊子。等到下一个 agent 接手的时候,完全不知道前面发生了什么,只能靠猜。这个猜呢就有坏事了,虽然有些功能只做了一半,但接手的 agent 并不知道啊, 粗略了扫了一眼,还以为已经大功告成,于是直接宣布完工,草草就收工了。 astropics 在 第一篇文章里面写了对应的解法,他们呢是引入了一个叫做 initialize 的 agent, 从这个名字就可以看出来,这个 agent 就是 用来初识化执行环境的,比如说是拆解用户需求啊,编辑启动脚本啊,添加进度文件啊等等。这里面最核心的就是拆解用户需求这一点, 具体来说就是把用户的需求拆解为一个详细的功能列表,后续负责干活的 agent 呢,就可以直接拿着这个功能列表去干活了。 而且呢,这个干活的 agent 会一个功能点一个功能点的做,做完一个,标记一个,这样稳扎稳打,整个流程的可控性就高了很多。 后来在写第二篇文章的时候, anselpic 对 这个思路做了一些引进,他们把 initialize 里面最核心的一件事情,也就是拆解用户需求这个事情,单独给拿了出来, 做成了一个新的 agent, 叫做 planner, 他 负责把用户一句模糊的需求扩展成一份完整清晰的功能列表,这样后面 agent 在 写代码的时候,就不用对着用户的需求猜了,照着功能点一个个做就行。 好,那规划的问题解决了,这一部分的产物呢,就是 planner。 下面呢,我们再来看第二点,质量评估。一般来说,光是让 agent 的 生成代码是不够的,我们还需要对它生成的代码做一些质量评估,看看产出的东西到底行不行。 如果产出质量不行的话,我们需要把对应的问题列表发回给 agent, 以便让它做相应的修改,这个呢才是一个比较合理的流程。现在我们来看看具体是怎么做质量评估的。 这里面呢,有两种评估方案,一种呢是人工评估,这个就不太行了,效率太低了,都 ai 时代了,能交给 ai 的 就都交给 ai 吧。那这就引出了第二个方案,让 agent 自评,也就是自己评估自己的产出,有问题就修,修完再评,循环往复,直到合格为止。 听起来挺合理的是吧,但 astrapec 发现这个方案根本不好用。原因很简单啊, agent 自评这件事情,本质上就是王婆卖瓜自卖自夸, 他对自己做的东西天然就有滤镜,所以呢,即使产出里面有明显的 bug, 他 也能做到视而不见,给自己打个高分之后就草草收工了。所以呢, astrapec 就 直接把前面两种方案都给废弃了,搞出了第三个方案,那就是做一个专门的评估 agents 来评估产出质量。 由于这个评估 agent 是 一个独立的第三方,它自然就没有理由去替别的 agent 产出护短,评估结果呢,也就客观多了。而且把评估 agent 单独拎出来还有一个好处,那就是我们可以单独去优化,去训练这个评估 agent, 让它的评估效果做到最好。 对,这个呢就是 osropic 的 最终方案了。换句话说,我们最终需要把生成代码和质量评估这两件事情给拆开,分别交给两个不同的 agent 来做。其中负责生成代码的那个叫做 generator, 负责质量评估的那个叫做 evaligator, 这个呢,就是最终的质量评估流程了。 所以质量评估这一环节,我们提到了两个 agent, 一个是评估用的 evaligator, 一个是生成代码用的 generator, 再加上之前说过的 planner, 我 们就有三个 agent 了。下面呢,我们来画一下持续图,看看这三个 agent 是 怎么分工合作完成用户需求的。 首先是 planner, 它会把用户的需求呢拆解为具体的功能列表,然后发送给 generator。 generator 接收到功能列表之后,它会从中挑选出一个功能点,然后呢,它就就着这个功能点去跟 evaluator 讨论一下交互标准,也就是讨论一下到底做到什么程度才算是完成了这个功能点。 generator 呢,首先会把它的想法发过去, evalator 呢,一开始可能会对这个提议提出一些修改意见,然后再发回给 generator。 generator 呢,会根据意见再次提交新的交付标准。所以呢,这个过程会重复个几次,直到 evalator 确认 generate 的 提议没问题为止。 确认好交付标准之后, generator 便开始生成代码来实现这个功能点了。实现完毕之后呢, generator 会把它的实现结果提交给 evalator, evaluator 会对结果做出评估反馈,比如说是一开始可能评估不通过,那如果不通过的话呢, generator 就 要修改代码了。所以呢,这个提交结果评估反馈的过程啊,也会重复个几次,直到 evaluator 评估通过为止。到这里,一个功能点就算是开发完了, 但是我们不只有一个功能点啊,所以呢,我们就需要再一次重复之前的这个流程,把后面的功能点全部都逐步做完。这个呢,就是大致的流程了, astropic 把这个包含了三个 agent 的 方案叫做 for harness 方案。相比之下,那种只靠一个 generator 独立完成所有需求的传统单 agent 模式,被 astropic 称为 solo 方案。 astropic 拿了一个具体的任务来验证这两个方案的差距, 这个任务呢,就是做一个游戏制作工具。从效果上来看啊, solo 和 for harness 这两个方案的差距还是很明显的, solo 方案的问题呢,很多,比如说是布局不合理,产品逻辑难以理解, bug 到处都是,基本上呢,是没有办法用的。 而 for harness 方案呢,就有了明显的改善了,无论是布局还是整体的产品逻辑,都达到了可用的水准。虽然还是存在一些问题,但比起 solo 方案来说, for harness 的 效果呢,是明显要好不少的。 当然,这样做也不是没有代价的, for harness 方案的耗时和花费都要明显的高于 solo 方案。 osarpic 给出了一个对比表格,大家可以感受一下。 solo 方案耗时二十分钟,花费九美元,而 for harness 方案呢,是耗时六个小时,花费高达两百美元。 所以可以看出啊, for harness 的 方案无论是耗时还是花费都要远高于 solo 方案。虽然如此啊,但不得不承认, for harness 的 方案效果确实是好了不少, 毕竟精雕细琢是有代价的呀,这对我们人类来说也是一样,考到六十分可能只需要复习三天,但是想考到九十分,那可能就得复习一个月了,这个大家多少都会有些体会吧。最后再提一个 astropica 后来做的优化点,让我们重新看一下这个流程图,注意其中的这一部分。 这一部分说明了 generator 每次只会选举一个功能点,再做下一个,循环往复,直到完成所有的功能点为止。 这个逻辑呢,是 episodic 在 提示词里面强制 generator 这么处理的,否则让 generator 自行发挥的话,它还是会急于求成,最后留下一堆烂摊子。不过在 oppo 四点六发布了之后,这个约束就不怎么需要了, episodic 后面就把这一部分给去掉了,最后呢就简化成了这个样子。 那为什么后面就可以这么做了呢?因为基于 oppo 四点六做的 generator 变得更强了,它可以一次把所有的功能点全部都拿过来,自己决定先做哪个再做哪个,稳固的向前推进,不需要别人再对它的执行流程指指点点。 而在这种情况下, evaluator 也直接评估最终产出就可以了,不需要再分功能点评估了。关于这一部分,我们在下一章节还会提到,这里你有个大体的概念就行。 在这章节里,我们来聊聊目前争议最大的一个问题, harness engineering 到底是不是一个噱头?要回答这个问题,我们不妨先来扒一扒这个词到底是怎么火起来的。 首先,单就 harness 这个词来说,它其实并不算是一个彻头彻尾的新词,一般大家用它来指代为了支持某个功能所做的一套框架。让我们来举几个具体的例子。 比如在传统的软件测试领域,就有一个概念叫做 test harness, 它代表为了支持测试代码运行而做的一套框架, 这个框架里面可能会包含测试运行器、测试环境等等。而在 ai 领域,很多开发者其实也早就用到 harness 这个词了,比如有个开源的项目叫做 lm evaluation harness, 它呢就是为了支持模型效果评估而做的一套框架。不仅如此,我们刚才重点讲过 astropics 去年十一月发表的一篇文章叫做 effective harnesses for long running agents。 这里的 harness 就 代表为了支持 agent 的 长时间运行而做的一套框架。所以你看, harness 这个词一直都在那儿,大家呢,也都在默默地用,谁也没有觉得这是一个需要大吹特吹的新概念。可以说, harness 这个词本身并不是重点,重点是 harness engineering。 把这两个词组合在一起,其实是最近才发生的事情。目前比较公认的起点就是我现在屏幕上所展示的这篇文章, my ai adoption journey。 这篇文章在今年二月五号的时候发表,作者是 macho hash model。 可能国内有些同学对这个人不太熟悉,但在海外技术圈,他绝对是响当当的人物,很多大公司的底层工具都是他做的。在这篇博克里,他写了这么一段话, 这段话的大意就是说,我也不知道业界有没有公认的叫法,我就姑且叫它是 harness engineering。 它的核心理念就是,只要 agent 犯了错,你就去改造系统,让它绝不再犯同样的错误。要是有更好的词,我随时改口, 你看大佬呢,还是很实诚的。所以呢,这个词的起点其实非常朴素,甚至带着点随意,跟后来大家讨论的宏大概念还是有所区别的。从传播情况来看,这篇文章的讨论热度其实并不算很高。 那 harness engineering 这个词到底是怎么火起来的呢?在很多人的认知里,真正引爆这个概念的是几天后,也就是二月十一号, openai 发的那篇 harness engineering 文章,就是我们之前讲过的那个。这个文章的信息量极大,迅速就在业界引起了巨大的反响, 紧接着整个 ai 圈就向触发了连锁反应。仅仅六天后,也就是二月十七号,软件工程界鼎鼎大名的 martin faulkner 网站就发表了一篇文章,作者是 thoughtworks, 里面一个非常资深的工程师,文章的标题呢是叫做 harness engineering first thoughts, 讲的就是他读完了 open day 那 篇文章之后的第一反应。作为顶级技术博客,这篇文章一发出来,自然就在圈内引发了广泛的讨论。但抛开技术观点不谈,他在文章里面还点出了一个很耐人寻味的细节。 虽然 openai 的 这篇文章的标题有 harness engineering 这个概念,但如果你仔细去翻 openai 的 文章,你会发现这篇文章的中文里面其实只提了一次 harness 这个词。因此啊,他就推断 openai 搞不好就是受到了 mitchell hashmodel 的 启发。事后呢,才临时把 harness engineering 这个词放到了标题里面。 虽然这只是个猜测,但也给人带来了很大的联想空间。随后到三月十号的时候, luncheon 发表了一篇文章,叫做 the anatomy of an agent harness。 这篇文章第一次明确给出了关于 harness 的 公式, 就是这个 agent 等于 model, 加上 harness 这个公式呢,其实就是我们前面所聊过的那个等式的。左边我们讲的是 harness 等于 agent 解决 model。 这两个等式呢,其实本质上就是一回事,公式一出,概念呢就算是定掉了。随后在三月二十四号的时候, antarctic 发表了那篇 harness 的 文章,拿出了 planner, generator 和 evaluator 的 经典架构,这个我们之前也讲过, 虽然 antropics 自己比较克制,通篇只用了 harness 这个名词,并没有生搬硬套 harness engineering 这个刚刚炒热的新词,但在当时那个氛围下,整个 ai 圈可以说是心照不宣,直接就把这套三个 agent 的 架构当成了 harness engineering 的 教科书级案例。 就这样,一传十,十传百, harness engineering 就 从一个私人说法变成了一个大家都在用的词。不过,如果你复盘完这段历史,再仔细地琢磨一下,就会发现一件非常微妙的事情,那就是 harness engineering 里面所用到的所有技术,竟然没有一个是新的。 你看我们前面所讲的 linter, 代码检查、任务拆解规划、质量评估机制,这些东西其实早就有了, 相信看这个视频的很多观众甚至都在做相关的工作。 harness engineering 真正做的呢,只不过是把这些技术重新组织了一下,统一放到了一个新词的下面。换句话说,他提供的是一套新的系统思维架构,而不是发明了一批颠覆性的新技 术。既然没什么新技术,那难怪有些人会觉得 harness engineering 这个概念被高估了,甚至带着点炒作的成分。仔细听听这些人的想法,你会发现他们的攻击点呢,主要是有两个。 一方面,正像我们前面所聊过的, harness engineering 根本就没有什么新东西,全都是新瓶装旧酒。在这种情况下,特意造个新词到处宣传,这不就是噱头吗?不仅如此,这些人呢,还提出了一个更扎心的观点, 所有的 harness engineering 都是迟早要被淘汰的,他们认为随着大模型自身能力的持续优化,今天看起来必不可少的这些 harness 设计,未来很有可能会被模型能力本身逐步吸收,最终变得不再需要。而这种担忧,其实连 encyclopedia 自己的文章里都有句可循。 前面我们讲过 entropic 的 harness 核心方案,但文章里面还有很多细节值得细细品味。这里我们仔细研究下其中的两个问题,然后分别看看 entropic 一 开始用 harness engineering 是 怎么解决的,以及后来模型强大了之后是如何用模型来解决的。 我们第一个要探讨的问题就是上下文焦虑,这个呢,是 sonic star 五的一个问题,具体来说就是当上下文过长时,模型会急于结束任务,以更少的 token 完成交付,而这个呢,往往会影响最终质量。 astropic 呢,一开始是使用了一种叫做上下文重置的 harness engineering 技术来解决这个问题, 但后来当模型升级到更强的 oppo 四点五之后,这种现象被大幅缓解,因为 oppo 四点五没有明显的上下文焦虑问题了,也就不怎么需要这方面的 harness 设计。 第二个相关的问题呢,是厂任务的执行效果差。这一点呢,其实我们在上一个章节也提过,让我们一起来回忆一下。 astropic 的 列录呢,包含了 planner, generator 和 evaluator 三个 agents。 一 开始的设计呢,是逐个功能点执行,也就是说 astropic 会在提示词里面强制 generator, 每次只选举一个功能点,做完一个再做下一个,以便确保整个产品开发流程稳固向前推进。 不过,等用到更强的 oppo 四点六之后,这种强制分布执行的机制呢,就不再需要了。因为 oppo 四点六的全局调度能力够强,它可以一次把所有的功能点都拿过来,自己决定先做哪个再做哪个,稳步向前推进, 不再需要别人对他的执行流程指指点点了。你看,这就说明了一个非常现实的趋势,模型越强,所需要的 harness 就 越少。模型能力的提升正在一点点吃掉 harness engineering 的 生存空间。当然,为了严谨起见,我需要补充一句, astropica 官方在文章里面其实并没有这么悲观, 他们认为随着模型变强, harness 的 形态也会跟着进化,以便去解锁更复杂的任务。也就是说, harness 只会变形而不会消失。但我们不妨大胆推演一下,如果未来的模型真的强到离谱呢? 这并不是说未来连读写文件、联网搜索这种基础的工具都不需要了,而是说,也许只要给大模型配置上,最基础的工具都不需要了。而是说,也许只要给大模型配置上最基础的问题全部都给搞定。 真到了那一天, harness engineering 可能就不再是一门需要大家专门去钻研的技术了,它会退化成一个单纯的环境接口,一个底层的技术设施。仔细想想,这件事情发生的概率恐怕没有那么低吧?那说了这么多,我们还得回归原来的问题, harness engineering 到底是不是噱头? 这里我来聊一下我个人的看法,可能有误,仅供参考啊。我的观点是, harness engineering 不是 噱头,但应该也不是终局。说它不是噱头,是因为它已经实实在在地带来了效果。无论是 open ai 还是 astropics, 都通过 harness engineering 把 agent 的 稳定性、自动化程度和生产力往前推了一大步。 这些呢,都是可以被验证的工程成果,而不是概念炒作。当然,你也可以说这只不过是新瓶装旧酒嘛,用的都是一些老技术。 但问题在于,工程领域真正的进步往往不在于发明了什么新技术,而在于有没有一套统一的框架,把这些零散的能力组织起来,变成可以系统设计、可以持续优化的工程方法。 harness engineering 的 意义恰恰就在这里。 但我不得不承认啊, harness engineering 大 概率也不是中局。随着模型能力继续增强,今天这些用来约束模型、纠正模型、给模型兜底的系统设计方案,很有可能会被模型自身逐步吸收。 到那个时候,很多 harness 可能会变得不再需要这个词呢,也许也会慢慢地淡出大家的视野。所以呢,我更愿意把 harness engineering 看成是一个过渡期的关键技术, 它呢,可能不是未来的终极答案,但它是当下最现实的答案。因为在今天,模型依然会犯错,依然会有幻觉,依然会在复杂的任务中偏离轨道。 在这种现实下, harness engineering 的 重要性就不容忽视。可以说,谁能够把 harness 搭得更稳,谁就能够更早地把 ai 的 能力转换为真正的生产力,从而从中受益。 好了,今天的视频就到此结束了,我是马克,用最通俗的语言讲最硬核的技术,我们下次再见,拜拜。

hello, 大家好,今天我们来聊一聊这两天最近比较火的 harness。 其实 ai 大 模型是一匹马,那 harness 翻译过来其实就是江神和马鞍,那我的理解 harness 它不光是江神和马鞍,其实它是江神加车甲加路线图。 它不增加模型的智力,而是把模型的智力结构的导向一个具体的结果。 ai 落地的瓶颈从来不是大模型的本身,而是 harness 从 gpt 四到 cloud、 office 四点六通用。大模型的能力已经远超百分之九十九的商业场景的下限,以及人类知识的总和。 真正决定一个 ai 产品是玩具还是生意的,其实是它能不能稳定地交付,能不能接入真实数据,能不能和现有流程嫁接,能不能被非技术用户使用。这些全是 harness 的 问题,而不是大模型本身的问题。 要想清晰的了解哈密斯本身呢,只需要其实看这四个点就可以了。第一层就是我们讲的叫做约束。 原始大模型像一个什么都能聊的天才,但天才不等于生产力。哈密斯通过提示词、模板、角色设定、输出格式、工具、调用规则,把无限可能压缩成这一件事必须这样子去做。约束不是限制智力,而是聚焦智力。那么第二层呢,是记忆和状态, 大魔星本身是近于脑,每次对话都是新的,那 harness 负责把上下文、历史、用户数据、中间结果都存起来,按需未回去,这让一次性的聊天变成了可持续的工作流。 第三层是工具与执行,光会说话不行,要能动手。 harley s 给大模型街上搜索数据库、 a p i 支付、发邮件、浏览器操作等等这些手脚。那模型呢?来负责决策, harley s 负责让决策真的发生在现实世界里。 第四层,反馈于矫正大模型,会犯错,会幻觉,会偏题。 harness 通过验证器、评分器从事机制、人工 review 节点,让系统自我纠错。这是从 demo 能跑到生产可用的关键。一跃。 把这四层合起来看, harness 等于让一个通用智能体变成一个可靠的、可重复的、可规模化的垂直工人的那套工程。 为什么它那么重要啊?大模型是公共品啊,你能用,我也能用, harness 才是你的护身符啊。谁都能调用大模型,但谁能把大模型包装成律师事务所的合同出审员或者装修公司的报价机器人?那这一套包装呢?就是你的核心资产。所以说, 想通过 ai 来真正解决你的实际的呃,落地的问题的,那 harness 是 你的第一步。 那我们在下一期四月二十五号的一间大学也会来教大家怎么样把你自己的这个大模型安上你的 harness。

ag 的 哈尼斯呢,有十二个模块,我把它分为四个层,执行层也就是用来干活的。认知层就是思考层, 安全层呢,就是为了系统兜底,起坐层呢,就是负责组织管理。这一次我们说说执行层,执行层呢,分为三个模块, ag 的 循环编排工具系统,还有工具调用与结构化输出。 别拍循环其实就是你的 ag 的 运行方式。我们常见的有两种模式,第一种就是 react 方式,它首先就是要一个 ag 的 思考,然后按照思考完的结果去行动,然后再按照行动的结果去观察,如果 观察完还需要这层思考,那再去思考,再行动,再观察,直到结束。还有另外一种是计划模式,就是先去做个计划列表,然后按照计划列表去执行,最后验证是否完成 一些常见的这个编程工具,比如 get 哈库贝尔就是这种计划模式。循环呢,是要有几个注意方向的,哈,一就是限制配额,你不要让它死循环,无限的循环下去。另一个上下文要控制,不要过多的输入上下文。第三个就是 有限循环,是否需要并行还是串行,还有中断后你怎么回复,是否需要人工参与,以及你这个循环的宗旨条件是什么。总而言之呢,这个编排循环的核心,它不仅仅是让这个 a g 的 跑起来,更多是让循环可控、可观测、可恢复、可扩展。 好,我们看看这个工具系统,工具系统呢,其实就是让大鱼模型可以动手帮你干活了, 并且可以获取模型以外的其他信息,不管你使用的是反馈器 callin 啊,还是 mcp 啊,以及其他一些手段,都是让你的模型可有动手的能力。工具系统呢,需要注意四个方面,第一就是工具的颗粒度, 比如说你要有几百个 m c p, 让模型一次调用,那固执估计模型就会失真,他不知道该调用哪个 m c p 接口。第二呢就是审批与权限,这是高风险操作呢,一定要经过审批才能去使用。第三个就是 对一些高风险的操作,一定要去撒香,去隔离开来,否则的话一旦你数据被删除,不可恢复,将是严重的后果。第四个呢就是工具的可观测性, 比如说对的输入输出呢,以及使用的时长啊,异常的追踪检测呀,都要做到可观测性。如果我们要用一个公式去表示的话,那工具系统就等于能力的接口化, 加安全的可控,再加透明的观测,这一套下来呢,就可以让你的模型在受控的围栏里动手干活。 好,有了工具系统以后,我们就可以去调用工具与结构化输出了。其实现在的大语言模型呢,它都是一个 自然语言的一个能力,自然语言就有不确定性,那结构化输出其实就是把它变成程序可以消费的确定性的一些数据。现在主流的大语言模型和一些 a、 g 的 s、 d、 k 呢,都具有这种结构化输出,这种能力提前约定好就行了,如果需要 数据格式比较严格的,其实我们在模型输出以后,我们再增加一层验证,如果不满足我们就让他重试,再不行我们就用程序进行修复, 或者是让人工去确认,比如在验证的时候,我们可以用正则对一些字段级别的数据进行验证,并且指出他为什么错误。我们把这个错误一并告诉模型,模型在重试的时候它的成功率就会大大提升。

各位爹各位妈别划走,求求你们别划走,我是刚来的儿子,这里不整点活是真留不住人啊,求求小爹小妈留下来看一看。点点关注点点赞,愿各位爹妈天天能有黑丝穿,有福寄摸,我会努力更新更多内容,不让各位爹妈失。上期我们介绍了 harness 的 局限性, 本期我们将会进行更具体的介绍。 harness 不是 什么具体的工具,它其实是一套围绕大模型搭建的基础设施,总共分四层, 第一层,记层,主要是解决模型记性不好这个问题。你跟模型聊完一次,下次他可能就忘了, 项目里有哪些规范他也不知道,所以得给他配个笔记本,用文件系统把需要记住的东西都写下来,存成结构化的格式,这样每次开工的时候,他都能查到正确的上下文。 在写代码的场景里,这就是卡德德、 md agent 这类文件,但它们不是百科全书,更像是导航地图,只告诉 i 诊最关键的规则和约束,让他别跑偏。第二层,执行层解决的是默性光说不练的问题, 跑代码、操控浏览器、调 vpi、 批量处理任务。有了这些能力,模型才能从我给你讲讲,变成我直接上手干,而且还得有杀伤环境,让它随便试错,改坏了没关系,直接扔掉,不影响主分支。 第三层,反馈层,这层最关键解决的是模型输出不靠谱的问题,这也是整个框架最核心的部分。 测试 lintersui、 流水线,这些东西构成了对模型产出的确定性验证机制。流程是这样的,模型生成代码测试马上跑,没过就自动打回,让它重试,过了才继续往下走。反馈速度从原来人工 review 的 小时机直接压缩到秒级。 这个回路之所以能跑得通,根本原因在于代码有一种特别的非对称性,生成是概率的,但验证是确定的。变异器不会因为你的态度好就放过语法错误测试也不会因为你很努力了就给你通过,所以你根本不需要模型,每次都对,只要有足够好的验证手段就行。 第四层编排层解决的是大任务,不可能扔给一个模型的子任务,多个 a 整的 分工协作,用户壳中间件来协调状态,这样才能处理那些远超单次对话能力上限的工程任务。最后,关于 ai 的 工作总结可以是这样的,生成是概率的, 验证是确定的。编一起铁面无私测试,不讲人情。这种确定性让反馈回路可以完全自动化。这意味着 e 镇犯了错,系统立刻打回 e 镇的重试 系统再次验证,这个循环可以高速运转,不需要人一直盯着。以上内容便是对 harness 的 四层框架的介绍,在下一期视频中会为大家继续介绍关于 harness 的 四种落地的设计模式,请大家记得点赞、关注、收藏。