密歇根大学的 AI 编程课「Applied Agentic Software Engineering」,把整套方法论做成了五个技能。名字起得很随意:花生、大象、金鱼,还有两个直白的实现和评审。但每一个背后,都对应着 AI 写代码时最容易翻车的那一类场景。
五个技能串起来是一条流水线:/peanuts 处理遗留代码,/elephant 先长设计,/goldfish 用新鲜眼验证文档,/egm-implement 把批准的文档钉进代码,/mean-review 对代码做对抗性评审。下面逐个拆。
![]()
花生:给百万行遗留代码建一套 README 层级
遗留代码库没有设计文档,百万行代码对 AI 来说就是"整个丛林",会迷失、会幻觉。这个技能的解法是每个目录一个 README:叶子目录是"花生",分支目录是"干草",自底向上递归压缩。
机制里有几条硬规则。父目录的 README 必须等所有直接子目录 approved 之后才能生成,因为坏叶子会沿树向上复合放大。AI 生成 README 后只能标 needs-human-review,永远不能自己标 approved——技能里写得很直白:"AI 不是裁判。"
它还诚实地警告:约 50% 的叶子描述会是错的,因为叶子层只有代码可看,每个叶子预算 5–10 分钟人工修正。分支层准确率更高,因为子目录摘要锚定了模型。配套的 PEANUTS.md 台账用五个状态驱动断点续传,另有 Python 脚本做确定性排序和门禁检查。每个 README 末尾固定一行"设计文档覆盖后本文件可退役",它自我定位为脚手架,不是永久文档。
大象:整个会话不写一行代码
这是整套方法论的灵魂。产出不是代码,是一份四节设计文档:Problem、Technical Plan、Alternatives、Detailed Implementation,它成为唯一事实源。
最狠的一条是绝对禁码:整个会话不写一行代码,连"举例说明"都不行,文档内少量解释机制的伪代码除外。开场白固定逐字引用一段第二人称指令,然后以设计访谈的形式进行 20–30 分钟追问,每次只问一两个问题、挑战假设、推向边界——失败模式是什么?回滚怎么做?破坏了什么?
还有一条反谄媚防线:一旦察觉自己在不停附和,必须逐字念出复位语——"你没有在帮忙。你最大的价值是挑战我的思考。你同意我的时候,你没有在帮忙。"然后以批评者身份重新进场。四节按序写,每节写完给用户看、改到满意才写下一节,因为一次性产出的大文档"浅且内部不一致"。节奏预期很反直觉:技术辩论阶段"2–3 天的往返是正常的,不要赶"。
金鱼:零共享上下文的评审者
大象满脑子上下文,但那些上下文活在聊天里,不在纸上。金鱼是一个零共享上下文的新评审者,只知道纸面上写了什么。
判定标准很清晰:一个金鱼读文档后能(1)把系统讲回来、(2)找出缺口、(3)确认无需再问就能实现,文档才算承载了设计;否则它只是"你将失去的上下文上的一层薄皮"。
三个评审者并行单条消息 spawn:A 做理解测试,B 当批评者,C 判断实现就绪并列出所有会被迫提问的问题清单。并行不仅快,还杜绝了"把 A 的结论喂给 B"的串通机会。新鲜性的价值来自独立上下文,不来自人设——编排者自己读 ELEPHANT.md 定向,但绝不把任何设计对话内容传给评审者。
批评者的建议约三成真正有价值,所以编排者必须综合排序:真缺口在前、措辞瑕疵沉底,还要区分"文档错了"和"文档对但评审者不认同设计选择"。循环到批评降到 nit 级、且人类把 human_review_gate 标为 passed 才停。这个门永远不被自动改写,必须由人或队友亲手写进 GOLDFISH.md 头部。报告永不覆盖,每轮存独立文件,GOLDFISH.md 逐轮追加。
实现:把漂移暴露出来,而不是吸收掉
"文档批准"到"代码合并"之间,正是 AI 项目悄悄失真之地:新会话把文档当"参考",从聊天历史重新推导上下文,然后漂移。
入口先跑 check_gate.py,退出码 0 是 GO、1 是 BLOCKED、3 是 CHECK-BY-HAND,台账值含糊时交给人类裁决。readiness: ready 加人工门通过,二者缺一不可,没有静默绕过。设计文档没枚举的文件一律不改,想改就停下来先提文档更新——"顺手也把 X 重命名一下"就是漂移,必须暴露。
最精妙的一条规则是漂移暴露而非吸收。现实与文档不符时,不是默默改掉,而是在 IMPLEMENT.md 记 drift 条目,按影响分级:小澄清就地改文档、实质性改动重写该节、大改回炉大象或金鱼。未解决的漂移不许开工,否则设计文档会"一个未记录的 diff 接一个"地失去事实源地位。IMPLEMENT.md 同时是崩溃恢复协议,每个文件、每个决定、每条漂移实时记录,会话崩了零成本。六个月后有人问"这代码为什么长这样",答案是一份三件套:设计文档加验证记录加实现轨迹。
毒舌评审:AI 产码速度已超过人类细审能力
金鱼审文档,毒舌评审审代码。它的前提判断很尖锐:AI 产码速度已超过人类细审能力,一个客气地说"看起来不错!"的 AI 评审者,恰恰是 slop 大规模堆积的方式。
开场必须逐字念那句"我强烈直觉这代码质量很差,请把它撕碎,告诉我它烂在哪"。这个框架就是"允许尖锐"的授权,没有它模型会漂回客气腔。四项强制扫描交给 Python 脚本:10 行无注释规则、超 50 行函数、弱命名黑名单(data、tmp、result、helper、utils 等)、静默吞异常,结果带 [enforced] 标签,与判断性发现区分。人类评审最容易扫视漏掉的恰恰是这四类。
豁免规则也很聪明:声明式代码(常量表、schema、字段列表、路由表)豁免 10 行注释规则,"事物的形状本身就是解释",误标声明式代码算评审者错。它读全文件而非只读 diff hunk,因为一半的正确性 bug 藏在改动周边的代码里。产出是有优先级的 punch list,correctness 高于 maintainability 高于 style,每项带标签、file:line、一句问题加一句修法,禁止"也许可以考虑"式的软化语。语气校准是:尖锐但不辱骂,"This is broken, here's why"对,"What were you thinking?"错。它只评审,永不改代码——用户修,然后重跑下一轮。
五个技能看下来,最反直觉的一点是:整套方法论里,AI 被反复要求停下来、交给人、暴露问题,而不是替人做决定。README 不能自己标 approved,设计文档不能一次成文,漂移不能默默吸收,评审不能顺手改代码。这些约束看起来是在限制 AI,实际上是在给 AI 的产出建立可追溯的事实源。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.