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