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