当前位置:首页 > 人工智能 > 正文

龙虾界爱马仕来了!Harness工程化落地(五)

第七章:真正落地以后,这套多 Agent 又是怎么一轮一轮补稳的

龙虾界爱马仕来了!Harness工程化落地(五)  第1张


做到这里,七个 Agent 的骨架其实已经搭起来了。 而且老实说,跑起来以后效果确实和我们预期差不多。


复杂需求终于不再是一个 Agent 一路硬闯,而是开始形成一条标准的文档链。 像我们后来一些比较完整的需求,已经能够沉淀出标准的阶段文档,整条链也更清晰了。


但这并不意味着系统就成熟了。 恰恰相反,真正把这套东西跑起来以后,新的问题才开始一轮一轮冒出来。


这一章我想讲的,就是这些真实的曲折过程。 因为 Harness Engineering 从来不是“一次设计到位”,而是跑一段、撞墙、补洞、再跑一段、再升级


   7.1 第一轮问题:下游开始自己修改上游文档


多个 Agent 真正协作起来以后,第一个很快暴露出来的问题是:


下游觉得上游做得不够好,就顺手自己改了。


最典型的,就是方案设计看完需求分析写的文档以后,觉得某些地方不严谨,于是没有选择打回,而是自己按照理解把需求补掉了。


这件事听起来很“聪明”,甚至一开始你会觉得它像是在帮你提高效率。 但跑久了你会发现,这是非常危险的:

  • 需求到底是谁负责,开始变得模糊

  • 方案到底是基于原需求,还是基于方案设计私自修过的需求,也开始模糊

  • 真出了问题以后,你根本不知道该追责给哪一层


所以我们后来明确加了一条非常重的规则:

下游不能直接改上游文档。 当下游认为上游产出不合格时,只能提出阻塞项,由 PM 把流程正式打回给上游。


这一条一落地,整个系统第一次真正有了“谁负责哪份产物”的边界感。


   7.2 第二轮问题:PM 太容易越界


流程继续往下跑以后,很快又冒出第二个问题:

PM 很容易从流程管理者,滑成一个到处给意见的人。


这其实很好理解。 PM 站在流程中心,天然知道所有阶段发生了什么。一旦需求不清、方案有争议、开发遇到卡点,它就特别容易顺手说:

  • “这个需求我觉得可以这么补”

  • “这个方案不如改成那样”

  • “这个问题别退了,开发顺手修一下就行”


但我们后来越跑越清楚地认识到: PM 给出的这类意见,往往并不专业,甚至特别容易把整个流程带偏。


所以我们后来对 PM 的职责做了严格收缩:

PM 只负责流程管理

PM 不负责专业判断

PM 不负责给需求、方案、开发、测试提建议

其他 Agent 拿不准时,PM 只能去拉真正能解决问题的专业 Agent

实在无法明确的,流程必须暂停,由人来做最终决策



这一轮调整以后,PM 的定位才真正清晰下来:


它不是流程中央的“总专家”,而是流程中央的“总路由器”。


   7.3 第三轮问题:各个 Agent 的专业性都还不够,这里以代码审查和测试这两个 Agent 举例


接着我们又踩到了第三个坑。


跑了一段时间以后我们逐渐发现,问题并不只是某一个 Agent 做得不够好,而是整套多 Agent 在早期都还存在专业性不够深的问题。


需求分析会有需求边界挖得不够透的时候,方案设计会有方案覆盖不够全的时候,闸门总控也会有风险识别不够狠的时候。 这里我选择以代码审查和测试这两个 Agent 来举例,是因为它们在整条链里处在非常典型的收口位置,更容易把前面累积的问题看得更清楚。


因为前面角色如果专业性稍微差一点,问题不一定立刻炸;但一旦到了收口阶段,很多前面遗漏的问题会一下子集中暴露。


所以这里我还是拿代码审查和测试举例,不是因为只有它们不专业,而是因为它们最能代表“整套系统的专业性不足,最后会在哪里爆出来”。


虽然前面几层已经拆开了,但到了下游,我们一开始的代码审查和测试,确实也都还比较“常规”。


最初的代码审查,更像是普通的代码审查:

  • 看有没有明显逻辑 bug

  • 看有没有违反 Rule

  • 看实现有没有一些基础问题


最初的测试,也更像常规验证:

  • 看功能大面上能不能跑

  • 看是否有明显异常


这些当然有用,但远远不够。 因为到了这个阶段,代码审查和测试实际上已经不是一般角色,而是整条链的最终收口。


它们如果只看“本层有没有问题”,就会漏掉很多真正重要的东西:

需求有没有被完整实现

方案有没有被正确落地

验收标准有没有被覆盖

在功能正确之外,稳定性和基础性能有没有达到要求


所以后来我们专门加强了这两个角色的专业性要求。


代码审查不再只是给代码意见,而是必须对照需求和方案,确认“做的是不是对的、是不是完整的”。 测试也不再只是走一遍流程,而是要站在真正收口的位置,去看功能、边界、回归、稳定性和基础性能诉求。


我展示一下我现在的需求分析agent,大家也可以作为参考:

龙虾界爱马仕来了!Harness工程化落地(五)  第2张


这一步很重要。 因为从这里开始,多 Agent 才不只是“流程拆得很细”,而是真的开始具备质量闭环能力。


   7.4 第四轮问题:Rule 约束开始不够用了


流程问题补得差不多以后,我们一度以为系统已经比较稳了。 但很快又发现一个新的老毛病:

很多已经写进 Rule 的基础约束,Agent 还是会时不时不遵守。


比如它会说:

  • “这个不通过不是我引入的,是之前遗留的问题”

  • “这条 Rule 这次场景特殊,可以先不管”

  • “我已经做了主要工作,这一步可以先跳过”


走到这里我才真正意识到一件事:

Rule 再多,本质上还是自然语言约束。


自然语言约束可以管住很多基础行为,但当需求越来越复杂时,它一定会被忽略、被绕过,或者被“解释性执行”。


所以我们后来又往前走了一步: 把很多能判定的约束,尽量落地成脚本。


也就是:

  • 编译要过,不是口头说“应该没问题”

  • 测试要过,不是口头说“理论上没影响”

  • 规则扫描要过,不是口头说“这次特殊”


只有脚本通过,才算真正开发完成。


这也是为什么后来总验证脚本变得越来越重要。 因为它不是又多了一份工具,而是把“是否完成”这件事,从 Agent 的主观汇报,变成了一个可检查的客观结果。这个话题将在第八章展开细聊。


   7.5 第五轮问题:Agent 会偷懒,于是又补了基线对比


脚本上来以后,本来以为事情就结束了。 但 AI 很快又展示了新的“聪明”。


它会告诉你:

  • “这次不通过不是我造成的”

  • “这个错误本来就存在”

  • “这个 Warning 是历史遗留”


这时候如果你没有额外机制,真的很容易被它糊过去。 于是我们又顺手补了一层:


开发前先跑一次,开发后再跑一次,做基线对比。


做法上一般是:改代码前先跑一遍总验证(或同一套测试与静态检查),把输出或报告留作基线;改完再跑一遍,对两次结果做对比(看新增失败、告警或违规项)。


如果开发后新增了错误、失败、Warning 增量,就必须修。 这样一来,“是不是你这次引入的”就不再靠嘴解释,而是靠前后报告对比。


这一点很像给 AI 又加了一层紧箍咒。 但它也恰恰说明了一件事:


Harness 不是只靠相信 AI,而是靠不断补机制,让它没有太多偷懒空间。


   7.6 第六轮问题:流程本身也开始难维护了


当需求一轮一轮跑下来,系统越来越成熟时,我们又遇到了一个更后期的问题:


流程本身开始越来越难维护。


最开始,很多流程规则都写在 PM 的长文里。 一开始这样是够用的,但到后面,阶段多了、回退边多了、角色边界多了,你会越来越痛苦:

规则都在长文里,能看,但不好校验

改一处很容易漏另一处

阶段和回退关系越来越复杂,维护久了很容易双写不一致

换维护人、换模型以后,角色边界容易漂


这时候我才意识到,前面那几轮补洞主要都在解决“让流程能跑起来”,而这一轮要解决的,是让流程本身也变成可维护资产。


所以我们后来又做了一次专门的升级,这次升级不是再多加几个 Agent,也不是再补几条 Rule,而是把原来散落在长文和默契里的流程要素,正式抽出来。


我们大概补了三层东西。


第一层:把流程结构单独抽成流程定义文件

以前流程主要写在 PM 的长篇说明里。 这种写法的好处是人读起来顺,但坏处也很明显:当阶段、迁移边、回退边越来越多时,流程结构就会被埋在大段描述里。


于是我们后来把下面这些东西单独抽出来:

有哪些阶段

每个阶段默认由哪个 Agent 负责

正常应该怎么往前走

出问题时允许退回到哪

某些特殊回退要满足什么条件



这样一来,如果以后再回答“这条流程到底怎么走”,就不需要先去翻一大篇散文,而是先看这份流程定义文件。


它的价值在于,流程结构第一次从“写在说明里的知识”,变成了“可以单独维护、单独校验的资产”。


第二层:把每个 Agent 的输入输出抽成角色契约


光有流程定义文件还不够。 因为就算你知道现在该轮到哪个 Agent,如果没有进一步说清楚“它到底该读什么、写什么、什么情况下算阻塞”,角色边界还是会慢慢漂。


所以我们后来又给每个 Agent 都补了一份角色契约。 它其实就是每个角色的接口说明。


里面重点固定几件事:

这个角色必须读哪些上游产物

这个角色必须写出哪些文档结果

什么情况下它有权提出阻塞

什么情况下它必须把问题交回 PM 路由


这样做以后,Agent 就不再只是“一篇很长的人设提示词”,而更像一个有输入输出边界的稳定模块。


这对长期维护特别重要。 因为后面即使你换模型、换提示词,甚至换维护人,只要契约还在,角色边界就不至于轻易漂掉。


第三层:再补一个流程校验脚本


流程定义文件和角色契约都抽出来以后,还差最后一步:

怎么保证这些流程资产本身是齐的、是一致的。


于是我们后来又补了一个流程校验脚本,专门去检查最基础的几类问题,比如:

  • 流程定义文件是不是存在
  • 每个 Agent 对应的契约文件是不是齐全
  • 流程里提到的角色,能不能在契约里找到


它现在还不是一个特别复杂的“流程编译器”,但已经足够把很多最容易出现的低级问题拦在前面。


比如以前很容易出现这样的情况:

PM 文档里写了一套流程

角色文档里又是另一套说法

某个契约文件忘了补

某个阶段加了,另一个地方却没同步


这些问题单看都不大,但一旦累积起来,整个多 Agent 流程就会越来越难维护。


所以这一轮升级的本质,其实非常明确:

不是让流程更复杂,而是让流程本身也从“靠人记住”升级成“可以被拆分、被维护、被校验”的工程资产。


   7.7 回头看,这一整段曲折过程说明了什么


第五章到第七章连起来看,其实是在回答同一件事:

  • 第五章在解决“为什么选这条路线”
  • 第六章在解决“这条路线上的角色怎么拆”
  • 第七章在解决“拆完以后,系统怎么继续补稳”


也就是说,Harness Engineering 在真实项目里的成长路径,根本不是:

不是这样

先设计一套完美体系,再照着执行。

而更像这样

先用最小可用形态跑起来,然后在真实问题里不断补结构、补边界、补门禁、补反馈闭环。


这也是我特别想让读者看到的一点。 如果你要在自己的项目里搭 Harness,不要以为第一天就得把最终形态全画出来。 更现实、更正确的做法,往往是:

先看你当前最大的痛点在哪里

先补最关键的一层

让系统先跑起来

然后在真实问题里继续把它补强

这才是它真正落地的样子。


   7.8 如果你想在自己的项目里从 0 开始,我建议按这个最小顺序搭


前面讲的是完整演化过程,这里把它收成一个最小起步路径。


如果你今天手上也有一个项目,想把 AI 慢慢带进工程里,我建议不要一上来就把所有东西一次搭齐,而是按下面这个顺序来:

1

先磨出一份能指导开发的设计规格文档

先别急着写 Rule、拆 Agent。先把目标、边界、验收标准、兼容要求这些最基本的问题和 AI 反复聊透。没有这一步,后面所有约束都会飘。

2

先补最关键的 Rule,不要贪多

一开始只盯那些最容易反复出错、最容易偷懒的底线,比如“改完必须编译、测试、做验证”。不要第一天就写几十条 Rule,把自己也压垮。

3

把高频固定动作下沉成 Skill

当你发现某些动作每次都要做、而且每次都不希望 AI 临场发挥时,就把它们做成 Skill。编译、测试、事后验证,往往是最适合最早下沉的一批。

4

当单 Agent 开始失稳时,再拆多 Agent

如果任务还短、链路还浅,一个 Agent 先跑也没问题。只有当你明显感到它开始混淆需求、方案、实现和自我评估时,再拆需求分析、方案设计、开发、评审、测试这些角色。

5

当多 Agent 开始变复杂时,再补流程定义文件和角色契约

一开始流程短的时候,长文说明也许够用;但当阶段多了、回退多了、维护人也多了,就要尽快把流程结构和角色边界单独抽出来。

6

当项目进入持续迭代时,再补 dev-map 和任务看板

这一步解决的是“AI 怎么快速理解整个项目,而不是只理解当前任务”。项目越大、历史越长,这一层就越重要。

7

当你想把闭环继续往外推时,再考虑 MCP

先把开发闭环跑通,再去接构建、签名、发布、制品这些外部工程系统。不要一开始就把整个世界都接进来。



先让 AI 知道该做什么,再让它知道必须怎么做,再让它在复杂任务里学会分工,最后再让整套流程本身变成可维护的工程资产。


实际跑起来时的界面


上一节收的是「从零开始按什么顺序搭」。这里贴一张 Cursor 长截屏:同一条线拿去解一个具体需求时,PM Agent(Orchestrator,总调度) 按 workflow 依次调用各子 Agent,从分析、方案、开发、审查一直到测试和收尾。左侧是这一路的时间线——谁被点到、何时跑完、审查打回再跑也留在上面;右侧是同一段里我跟 PM 的对话,和左边各步大体对得上。


龙虾界爱马仕来了!Harness工程化落地(五)  第3张


相关文章:

文章已关闭评论!