I-have-ADHD:一个让编码 agent 别把答案埋起来的 skill

查看原文 HN 讨论

文章摘要

一个 140 行提示词引发的全民吐槽

i-have-adhd 是 GitHub 用户 ayghri 做的一个编码助手 skill,标语是「ADHD 友好的输出,无需 ADHD 诊断!」。它要解决的问题一句话说清:阻止你的编码助手把答案埋起来。行动优先,步骤编号,不要「希望这能帮到你!」。

仓库 README 用了一个前后对照的表格来说明差别。改造前的典型回答是:先来一句「好问题!让我想想」,然后铺陈认证流程有哪几个活动部件、指出 src/auth.ts 里某个函数用的是旧版 API、说「一种办法是」、说改完之后「你可能想跑一下测试」、再顺带建议你整体检查一下依赖版本,最后以「希望这能帮到你!需要深入的话告诉我」收尾。改造后的回答则是:直接给出要跑的安装命令和要编辑的文件与行号,然后是三条编号步骤(打开文件、替换指定行区间的函数、跑指定的测试文件),最后一行是「下一步:如果有测试失败,把第一条失败信息贴过来」。

十条规则

完整文本在 skills/i-have-adhd/SKILL.md 里,README 给出了摘要:

  1. 以下一个动作开头
  2. 多步骤任务要编号
  3. 以一个具体的下一步结尾
  4. 压制离题内容
  5. 每轮重述当前状态
  6. 给具体的时间估计(用分钟,而不是「一会儿」)
  7. 让进展可见
  8. 就事论事地报告错误
  9. 列表最多 5 项
  10. 不要开场白,不要复述,不要收尾语

安装方式是把一句话粘进 CLI,让 agent 自己去读仓库的 AGENTS.md 按说明安装;也支持 Claude 的 plugin marketplace 机制。想调整就 fork 仓库、改 SKILL.md、卸载上游副本再装自己的(README 特意提醒 fork 和上游共用同一个名字,marketplace 也要一起换)。README 提供了七种语言版本(含简体中文)。

出处与作者的自我定位

README 注明这套规则松散地基于 J. Russell Ramsay 和 Anthony L. Rostain 的《The Adult ADHD Tool Kit》,但改编的对象是「LLM 应该如何回应」,而不是「人类应该如何安排自己的一天」。许可证 MIT。

作者 ayghri 本人在 HN 评论区末尾给出了一份非常克制的说明,值得原样转述其要点:这个 skill 一开始是个玩笑,起因是他被 LLM 的啰嗦搞得「脑子炸了」;它适合用在你已经理解和熟悉、只想把事情办完的场景;它不适合探索和学习,因为那种场景本来就需要你读长内容才能达成目标;减少 token 用量不是目标;仓库里绝大部分内容是评测(evals)、基准测试代码和翻译。

HN 评论精华

537 分、364 条评论。这是本期最热闹的一串,但必须如实说明:讨论的重心完全不在这个 skill 本身。它在几十条评论里被认定为不该是 skill,真正吸走全部能量的是两件事——对 Claude(尤其 Opus 5)文风的集体声讨,以及「非 ADHD 人群用 ADHD 当修辞」的伦理争议。

「为什么这要是一个 skill?」

这是技术层面最一致的批评。whirlwin 开门见山:谁能解释为什么这是个 agent skill 而不是 agent 配置(AGENTS.md / CLAUDE.md)?他后来补充说自己写过几十个 skill,但那些都是为很具体的任务服务、常常带脚本;而这个听起来更像 AGENTS.md 的用例,类似定义语气和输出格式。trio8453 的回答只有四个字:「这是个时尚选择。」heyiammallik 把分类讲得最清楚:「答案优先、别埋掉有用的部分」这类东西是用户级偏好,应该跨任务存活;AGENTS.md 是仓库上下文,skill 适合某个特定任务需要额外指令时用,而这个两者都不是——现在我们把这三类东西都塞进上下文,指望模型在需要的地方注意到它。

iambenm 给出了少数几条为 skill 形态辩护的理由之一:当你面对一堵文字墙而恼火时,可以手动敲 /i-have-adhd;你并不总是想要它生成的那种回答,而 AGENTS.md 里的东西会随着上下文增长而失去权重。

更被推崇的替代方案:output styles

alwillis 指出 Claude Code 本来就有 output styles,其中预定义的 Concise 样式做的正是这件事。但 hungryhobbit 和 0xffff2 都反驳说 output style 只是权重稍高一点的上下文,根本不能强制 Claude 简洁。tstrimple 提供了本串最有工程价值的解释:CLAUDE.md 之所以在长上下文里活不下来,是因为它位于上下文顶部;而 Claude Code 的语气之所以顽固存活,是因为它是 output style 的一部分,每一轮都会作为系统上下文被「提醒」注入。所以想要真正持久的效果,应该定制 output style——「我这边完全没有 load-bearing 的毛病」。catlifeonmars 追问能否换个 harness 直接替换系统提示达到同样效果,答案是可以,尤其当该 harness 也有「提醒」能力时。

acaloiar 用了几个月后给出实测结论:没有任何 skill 能管住 Claude 的文风,output style 能多榨出不少里程,但它也不总管用,而且互斥——同时只能激活一个。

hysan 贡献了一段有意思的「元调查」:他烧掉很多 Claude session,在会话末尾反复追问为什么 LLM 总是违反某些规则;LLM 调试自己后发现,那些「相互矛盾」的规则其实不来自他写的规则,而是来自 harness 自身的指令,而当发生冲突时,harness 自己的指令会压过任何自定义规则。他在 30 多次会话里做过这个实验,压倒性的说法都是「某种 harness 指令」。vzmax 和 sillyfluke 提出了必要的警告:你不能相信它对自己行为的解释,它不会「记得」,只会编一个听起来可信的说法;hysan 后来大方承认自己第一条评论写得过于笃定。scrollaway 则搬出 Anthropic 关于 J-space 的研究反驳「LLM 是自动补全所以不能解释自己」的流行观点。drob518 说这正是他用 Pi 的理由:Pi 极简的系统提示避免了 harness 作者认为最好的东西和用户想要的东西之间的冲突。

声讨 Claude 文风:本串真正的主线

jp57 点燃了这条线:Claude(尤其是 Claude)是个糟糕的写作者;有一整个「小作坊产业」在用 skill 和 CLAUDE.md 试图推着它写得好一点,但每一代新模型似乎都专门设计来推翻这些努力,好让它继续堆砌不必要的分词短语、not-this-but-that 句式、把重点埋起来,等等。他还问了一句后来被反复引用的话:「我真心好奇 Anthropic 内部的人是不是真的这样互相交流。」

这条评论下面长出了 HN 上罕见的集体行为艺术:bgilroy26 用 Claude 的口吻回复「你识别出了一个 load-bearing 的问题,这值得被点出来」,然后 8cvor6j844qw_d6、alaithea、charlieflowers、peaseagee、jmartrican、zapkyeskrill 一层层接龙,把「你说得完全对」「这里有一个更深的张力值得点明」「这份安静的张力是一个有效的信号」「这里有件没人在谈的事」全部演了一遍。JesseTG 的旁白:「这个串让我得了一个 load-bearing 的动脉瘤。」sleight42 说出了很多人的心声:「如果我再从 Opus 那里看到一次 load-bearing、pin、wedge、rung 或者『比我之前说的还糟』……」nosioptar 接:「我要拿把大锤去砸掉我看见的下一面 load-bearing 的墙。警官,这不是犯罪,这是 AI 诱发的暴怒。」

krustyburger 用一整段拟仿文体完成了最精妙的讽刺,结尾还不忘加上「需要我进一步解释吗?」hinkley 的评价:「你要为这一手下地狱。」

关于成因的猜测各不相同。MisterMunchkin 认为是训练数据被生成的 slop 污染,每一轮训练又加载更多 slop,不断放大这种语言。jp57 追问得很到位:可为什么这种写作风格会被奖励?Anthropic 的人最终要为奖励信号和它产生的结果负责。visarga 归咎于「人格设计」做砸了。trueno 猜他们下注认为 TED 演讲式的对话会让产品显得更好,没想到变成了梗,「连我们公司的非技术人员现在都在疯狂拿它开玩笑」。kevin_thibedeau 和 creesch 都怀疑训练数据里塞满了为增加广告位而注水的 SEO 内容;hinkley 举了一个所有人都懂的例子——菜谱网站,标题说「四种食材的简单魔鬼蛋」,然后是关于曾祖母生于大萧条时期的四段抒情,最后才轮到「先准备 8 个煮鸡蛋」。nojs 的解释更技术:这可能是重度 RL 的副作用,奖励解决问题但不奖励写作清晰度;recursivecaveat 补了一刀:在人类 RL 里,听起来像解决了问题甚至比真解决了更好——Codex 经常写一段热情洋溢的总结,后来他才发现它压根没重跑测试,或者加了个让功能在通用场景下完全失效的硬编码 hack。yuck39 提出一个阴谋论式的猜想:糟糕的文本是故意的,用来给自己的输出打水印以免被用于训练下一代模型;menthe 直接把矛头指向 Anthropic 公布的水印算法,但 pona-a 指出这个问题在水印公开之前就存在了。

TomGarden 带来了官方侧的消息:他们似乎开始重视了,Boris 等人提到正在修,并已经先发了一个临时的 output style 创可贴来对付 Opus 5 的糟糕文风。他还转述了一个 HN 上流传的理论:dogfooding 可能反而害了他们——内部把 Fable 当对话 agent、把 Opus 当子 agent 用,导致 Opus 越陷越深地走向一种主要面向其他 LLM 的文体。

cruffle_duffle 写下了本串最长也最激烈的一条:Opus 5 是如此巨大的退步,他真的不理解 Anthropic 怎么会放行;如果是他的公司,修输出会是全公司的第一优先级,他会在每个渠道承认这个巨大失误、诚恳道歉、不停地推修复,可现在 Anthropic 那边一片死寂。

dominotw 提了一个没人能答的好问题:他们到底是怎么专门把模型训练成这样写的?他倾向于认为这是别的东西的副作用。jiggawatts 提供了一个反直觉的数据点:他在一篇 arXiv 论文里注意到 sharp/sharper 这个词被滥用,第一反应是「呃,AI slop」,结果一查日期是 2020 年——看来至少部分「AI 味」其实源自科学论文的常用文体,而多个前沿实验室都提到在预训练中大幅加权这类语料。

实战对策合集

这一串沉淀下来的可操作方案相当多:

「我不在乎它没做什么」

ryandrake 提出了一个独立于「啰嗦」的具体毛病,并引出了一条很长的支线:Claude 坚持要在说自己做了什么之外,还说自己没做什么——「我编辑了 this.py 和 that.py,但我没有编辑 README.md,也没有提交」,或者代码注释里写「本函数直接返回结果——而不是通过回调」。他甚至想加一条规则:「永远不要使用『不』和『而是』这两个词。」eterm 分析出两种触发场景:一是你(可能通过 skill)指示它不要做某事,它就会不断提醒你它没做;二是它先试了一条路、把自己搞乱了,然后不得不回退清理再换一条,之后它花在解释错误做法上的时间常常比正确做法还多。bevr1337 从咖啡店主管和青少年营地辅导员的经验给出了一套通用原则:始终用肯定句描述任务;要引导用户安全地做,不要用 DO NOT,因为读者已经 DID 了;基于你的专业给出有引导的选项;问两个以上的问题只会得到一个或更少的答案。lacunary 从 Jack Vance 的小说里翻出一句绝配的台词,大意是:恕难回答否定式的问题——有无数我没做过的行为,我们可以永远谈下去。

关于「I」的一场小型哲学战

idicjeifjwjdje 说他最难受的是没法让它停止用人称代词自称:「Claude,你不是『我』,你是『它』,你是个该死的工具。」这引出了长达十几层的争论。kube-system 反问:你在批判拟人化的同一口气里也在拟人化。Plont 给出了最有分量的支持论证:人类会把从扫地机器人到石头的一切都拟人化,我们在进化上对此毫无抵抗力;现在这个软件专门被设计来模仿人类,把它误认为真正的智能或意识很容易造成灾难,所以我们非常需要不去拟人化它,而我们在这件事上糟糕得要命;连我们的语言本身都烘焙了大量计算机拟人化(「我手机死了」「这本子在闹脾气」「电脑在睡觉」「它在思考」)。Sohcahtoa82 的反驳很实际:「我发现了三个问题」你打算怎么写?「三个问题被发现了」没说清是谁发现的——是 AI 自己,还是它跑的命令行工具?他强调自己只针对对话式界面,「我不想要编译器说『我遇到了一个错误』,也不想打印机说『我纸不够了』」。sh34r 点出了核心矛盾:你本质上是在要求它用被动语态,而所有受过高中教育的人在英语课上都被教过不要这么写。drob518 从趋势角度回应:2010 年的 Photoshop 只是个你挥舞的工具,2030 年的 Photoshop 会是个与你协作的「数字艺术助手」,在那个世界里「我」更自然——不管你喜不喜欢,这就是方向。

关于 ADHD 这个名字的伦理争议

egeozcan 的顶楼评论获得了大量共鸣:作为一个真的有 ADHD 的人,看到明显没有的人声称自己有,感觉很怪——而我为了「摆脱它」几乎什么都愿意做(加引号是因为它构成了我之所以是我,但做我自己很难)。他强调自己并不觉得被冒犯。spicyusername 的回应也很有分寸:像大多数谱系障碍一样,多数人能体验并共情至少一部分核心症状,即便没有表现出完整谱系或严重程度。thenewnewguy 认为美化残障(ADHD、自闭症等)的潮流很尬——这些是改变人生的医学状况,不是值得向往的东西;但他也指出这个项目并不打算美化 ADHD 或帮人声称自己有,它只是搭了「告诉当前世代的 LLM 你有 ADHD(据称)能让所有人得到更好结果」这个便车。bityard 给出了最建设性的框架:ADHD 人群为了维持功能而采用的那些应对策略,恰好也是大多数非 ADHD 人群可以用来让自己生活和工作更有效率的东西;不是所有人都该被诊断为 ADHD,但这些工具基本是普适的,普及它们没什么坏处。plufz 引用了教育研究做类比:为一个 ADHD 学生调整的课堂,全班成绩都提升了。

ocd 提出了一个别人没提的担忧:这可能会伤害那些真的有这些障碍、并在 CLAUDE.md 里提供了这一信息以便让 AI 对他们可用的人——如果这口井被污染了,未来 LLM 处理这类信息的方式可能对有真实日常生活困难的人造成极大干扰。Toutouxc(确诊 ADHD)说他的第一反应就是「这他妈和 ADHD 有什么关系?」latentsea 只留了一句:「顺带一提,这名字对我们某些人来说挺冒犯的。」hinkley 提了个替代命名:不如就叫 Executive Summary(内容摘要)——想早点听到重点的不只是神经多样性人群,我们所有人都有别的事要做。undulation 的版本更火气一点,主张改名成「我不会读那堆垃圾」。

顺带被记录下来的「模型迁移潮」

这一串里出现了大量用户离开 Claude 的实名叙述,规模值得单独一记。IshKebab 说他换到 Codex 解决了问题,回复速度和简洁度的差距令人震惊。vvpan 说 Opus 5 写的东西一塌糊涂,装了这个 skill 也没什么用,他和整个团队都降级回 4.8,立刻改善;h4x0rr 同样建议避开 Opus 5,说 4.6 和 4.8 好得多,4.6 读起来最轻松、也是个好协作者。cromka 详细对比后认为该把 Astra 称为 SOTA:它重写文档的能力让人震惊,输出的指令真的像人类期待的样子,有清晰的逻辑流程图、条目化的列表和短段落,还能正确识别出思维过程的残留和从未进入最终版本的内容并删掉;而 Fable 则一贯无视他的所有格式要求。iforgotmypasswo 说他正在测试 Astra 后给公司换主要 AI 供应商:「连 Fable 现在都显得像个白痴。不是代码质量,是沟通和判断力的改善。Astra 开箱就沟通得很好!」

arrowleaf 提供了本串最具体的成本数据和最沉重的一段自白:他所在的公司签了用 Claude 的合同,他每月烧掉约 4000 美元 API token,公司整体约一百万;他非常希望能用 OpenAI 或开放权重模型,因为「Claude 的写作风格确实在加剧我的职业倦怠」。在被 asdff 追问 ROI 时,他的回答很值得完整记录:他的产出确实是两年前的 2–3 倍,但随着公司给 HR、财务、市场、产品、研发所有人都上了 Claude,期待也跟着变成了「以前两个季度的活现在几个 sprint 就该做完」;用老方法他会淹得更快,但长期来看,如果把对动力的损害和他预计还会待多久算进去,他相信自己在极少用 AI 的情况下总产出会更高。asdff 的追问同样尖锐:产出 5–10 倍,那销售额也涨了 5–10 倍吗?smcleod 的回答是「我跨多家公司工作,总体上利润普遍上升了,工资没有」。

最后是作者本人

在几百条跑题之后,作者 ayghri 的那条五点说明(见摘要末段)几乎是整串最平静的声音。而 dogscatstrees 给出了少数几条纯粹的正面评价之一:差别是天壤之别,它不只对 ADHD 有用,就是一种非常实用的通用输出;但要让它完全生效,必须在会话的每一轮都重申一次——「我希望 Anthropic 的科学家能解决这个问题,它不是一个简单的 output style 开关能搞定的。」