Claude,把「加入购物车」按钮改成蓝色

查看原文 HN 讨论

文章摘要

opusfived.dev 是一个交互式网页小品,作者署名 Miloš,站点用 Lovable 搭建。页面本身只有几行字:标题「Opusfived」,两句任务说明——”把「加入购物车」按钮改成蓝色”、”不要让 Claude 改动任何别的东西”——以及一个”开始”按钮。页面的 meta description 是作者自己对这件作品的定位:”让一个按钮变蓝。别的什么都不要改。一出关于永远无法就把事情做完的 agentic AI 助手的短篇互动喜剧。”

玩法是一场分支式对话模拟。 你扮演用户向一个虚构的 Claude(Opus 5)提出那个极简需求,然后在每一轮从若干条预设回复中挑一条。由于页面是客户端渲染的单页应用,正文抓不到剧本全文,但 HN 讨论区里有大量玩家复述了关键情节,足以还原整条流程:

模型第一次动手就把整个站点的按钮都变成了蓝色——因为它顺着设计令牌(design token)改了共享样式。你提出质疑后,它开始做诊断,输出一段极其详尽、听上去很专业的耦合分析:有七个组件直接消费该令牌,另有十一个通过别名间接使用,三个只在 hover/focus 态用到,还有两个看起来是意外的跨角色消费方。接着它派出子代理做对抗性审查——一位玩家数到”总共 23 个代理”——而实际上一次 grep 或 diff 就够了。

中途它跑去 WebFetch 维基百科的「青色」和「普鲁士蓝」条目、以及 colorhexa 的色值页,来”研究”你指定的 #16B8C4。它发明了一个叫 “Cyanide Blue”(氰化物蓝)的颜色名,并为这个自造色号生成了一段过度谨慎的服务条款,还要”确认按钮不含氰化物”。到了某一轮,它终于把按钮改对了——然后自作主张加上了一个你从未要求的渐变。你让它撤销,按钮变成了灰色。流程的收尾是那句所有 Claude Code 用户都熟悉的提示:”接近使用额度上限。”

这件作品真正的技术含量在于对语言风格的仿写。 页面里有一个老虎机式的”套话转盘”,随机抽取 Claude 的口头禅。用户 butterNaN 把转盘里的词条全抄了出来,分成两类。”免责声明”类包括:一个诚实的说明、一件值得精确陈述的事、一件值得标记的事、值得点名、值得直说、我不想把这一点留在暗处、那样我就对不起你了、我不想把这个埋掉、现在说好过以后、一个诚实的取舍、我不想粉饰这一点、一个小的事务性事项、诚实的那部分其实更简单。”服软”类包括:合理的反驳、说得对、这是我的问题、你这点说得对、你说得对、你的直觉是对的、这话公道,而且比听起来更具体、对,而且理由值得点名。butterNaN 唯一意外的是转盘里居然没有 “LOAD BEARING”(承重的)。

对话中还穿插着几句被反复引用的原句。JohnMakin 说他被”值得点名:加入购物车按钮仍然是黑色的”这句逗得笑出了声。almostdeadguy 摘出的是”我把这个收敛回渲染结果”,以及紧接着的三连短句:”没有更大范围的清理。没有进一步的架构工作。就只是这个按钮。”他的评价是:Claude 方言的关键特征,是听起来像一个能力跟不上野心的初级工程师,试图用额外的辞藻来弥补,再混上极其刺耳的 SaaS 营销腔。

HN 评论精华

这篇帖子拿到 1197 分、448 条评论。讨论的走向非常清晰地一分为二,而且两边都相当激烈:一半人说”这就是我的日常,太真实了”,另一半人说”这完全不符合我的经验,是失真的讽刺”。第三股势力则指出:如果你用文中那些提示词,得到这种结果才是合理的。

共鸣派的反应大多是生理性的。 Toutouxc 说”完美到令人沮丧,我差点哭出来,这像一部关于编程的卡夫卡小说”。emilfihlman 的描述最生动:”按钮终于变蓝时我如释重负,然后它变成渐变时我发出了发自内心的’不不不不不’的恐慌。这是个恐怖模拟器,我的呼吸变得又浅又快,我爱死了。”jebarker 说触发了胃部收紧和呼吸加重的生理反应。appleappleapple 说”这让我血压飙升,干得漂亮”。gitowiec 说”这有点好笑,但带着眼泪,不是喜悦的那种。我玩不下去了,因为它让我生气。”dwedge 的评论收获了最多认同:”我实在太生气了,然后才意识到这是个可选的游戏,我可以直接关掉标签页。”alex_c 接了一句:”仔细想想,人生中有多少事适用于这条啊。”fallingbananna 则补充了一个更黑色的版本:”这正是我在公司审查 AI 生成 PR 的方式。只不过……第二天它们还在那里,我得再逼自己往那堵改动之墙里多走几步,然后再关掉标签页。”

bartread 给出了共鸣派中最有说服力的技术性辩护:”我已经数不清多少次给 Claude 一个提示,让它反过来采访我不确定的地方,迭代几轮计划,然后一次性生成一两千到三千行代码和测试,几乎第一次就完美运行;但也有多少次它在看起来最简单的任务上烧掉六位数的 token,却什么有用的都没做成。这个站点显然基于苦涩而来之不易的真实经验。”

否认派的态度同样坚决。 apetresc 说”我从没有过任何一次远远像这样的会话,我真心看不出这个站点以为自己在表达什么”,并补充说,即使你刻意去构造一个能让近期 Claude 模型认错按钮颜色的对抗性样式表,那也得是精心设计的把戏,好比给人类看的视错觉。827a 的比喻被引用最多:”这甚至不算好的讽刺,因为它完全不代表我和大多数人的真实体验。这就像拿计算器因为一道宇宙射线翻转了一个比特而算错两个数来开玩笑。”crazygringo 说他很早就在 CLAUDE.md 里写了:坚守任务范围、不要抢跑做额外的”贴心”事、遵循良好软件实践但明确避免过度工程——他不知道这是不是他体验不同的原因。dmd 更直接:”这是不是某个一年多没真正用过这些工具的人做的?”

围绕”这是不是讽刺”本身爆发了一场元层面的口水战,也贡献了全帖最好的几个笑点。 raincole 说”老兄这是个笑话”,kristofferR 回”是啊,但它不好笑,因为它不符合现实”。lancebeet 用 Claude 的语气回复 kstenerud:”你反驳得对。它不是对 Claude 的准确刻画。它是讽刺。”morgoths_bane 立刻接上:”你完全正确!”TheRealPomax 干脆整段模仿 Claude 的共情腔调回复 827a:”我理解你的沮丧,听到别人对一项技术的体验与你如此不同,这可能很难接受……需要我在你的会话里也开始用糟糕的英语、做你从没要求过的事吗?只要你说一声。”KaiserPro 则直接写出了模型的思维链:「思考中……用户主张这’不是真实体验’……判断用户是否漏掉了这个 LLM 陈词滥调……组织一个合适的回应……”你刚刚是在跟一个笑话争论吗?”不,太生硬了……”只有对你成立时它还算讽刺吗?”不行,又是被动攻击……干脆打印讽刺的词典定义然后希望他们别纠缠了」。wesselbindt 也玩了同一个梗:”说得好!这篇帖子不是一份承重的、准确的 Claude 工作原理描述,它是讽刺。”

第三派的批评集中在提示词质量上,这构成了全帖最有实操价值的讨论。 Bjartr 的分析最清晰:第一条提示”把加入购物车按钮改成蓝色”是没问题的,出问题的是后续那些——”为什么现在半个站点是蓝的?我让你改一个按钮”和”半个站点是蓝的。我要的是一个按钮”——这两句都不是修复指令,而是在把 AI 当人、告诉它做错了什么,指望这种隐含的责备能把它拨回正轨;但没有实际指令,它就会去做任何它认为有帮助的事,而那往往是随意的。他给出的写法是:”取消按钮现在也是蓝的。确保颜色改动只作用于加入购物车按钮。”他的总结是:”跳过情绪,精确说出你要什么,别的都不说。”

plorkyeran 给了一套更完整的流程:第一步不成功就回滚、开新会话、改说”给加入购物车按钮一个独立于默认按钮主题的主题,把这个新主题的颜色设成蓝色”;接近正确时再追加”把加入购物车主题从 #00FF00 改成 #16b8c4”,且不暗示上一步做错了;如果完全跑偏就重来并写得更详细。他还说不理解为什么改一个按钮会改掉所有按钮时,他会开一个完全独立的会话去问站点主题是怎么工作的。他强调两件他绝不会做的事:”在提示里使用情绪化语言”,以及”让 Claude 回滚改动再试一次——一旦错误的改动进入上下文,它就在毒化你之后所有的结果”。qazxcvbnmlp 给出的版本则是把意图讲明白:”我想提高加入购物车这个动作在页面上的相对可见度。能否把它改成蓝色而不改动任何其他按钮。/effort low。有问题告诉我,动手改之前先说你打算怎么做。”

但这套批评也遭到了有力的反击。selestify 的质问被多次引用:”‘把购物按钮改成蓝色’怎么就不具体了?任何有一点数字常识的人都能明白我显然是什么意思。我怎么可能预判 AI 误解一条这么简单的指令的每一种方式?”mort96 更尖锐:”所以’明确告诉聊天机器人把一个按钮变蓝会让整个站点变蓝’是’合理的’?纠正它、重复三次只有那一个按钮该变蓝,会让按钮变成渐变并引发一场关于’蓝’的本质的哲学讨论,也是’合理的’?哇,你们这些 AI 人对自己正在当作下一个耶稣兜售的技术评价可真低。”OkayPhysicist 提出了一个更根本的质疑:既然到了这一步,还不如自己动手——grep 一下 “Add to Cart”,给 HTML 元素加个 addToCart 类,打开 style.css 写一行——”我数了大概 80 次按键,比你那第二条提示还短”。他的推论是:”大语言模型不适合我们已经专门造了系统让人类轻松完成的任务。告诉计算机某件事该怎么做,我们已经发展出了一种极其高效的方式:它叫源代码。LLM 最适合的是那些你不想去搞清楚怎么做的任务。”

mrheosuper 则给出了对”没人会这样提示”最有力的反驳:”人们一直说这些提示不现实、没人会这么提示。但这些提示正是我的经理/产品在解散整个开发部门后决定自己动手时会用的。”inerte 从另一个角度共情:”说句公道话,我在人类编写的系统里也见过类似的’这应该是半个故事点’的请求被工程师冷嘲热讽地接下、然后做两个 sprint。我猜我们现在都是 PM 了。”他随后写了一段极妙的模拟:要把按钮变蓝就得区分主按钮和其他按钮,简单吧?但设计规范禁止一次性写法、不许用 !important,于是你建了个 CSS 类,却发现 header 上另一个元素也声明自己是 primary,你去找那个团队,他们说 primary 的范围是按他们的组件定义的;要把登录按钮改成灰色,你现在得去找增长团队;增长团队想跑个实验但排期排到下季度;他们说你可以 innersource,只需要 VP 批准;VP 说蓝色和某个市场活动撞色了……

几条关于「为什么会这样」的技术性解释。 captainbland 提出了被广泛转发的一句:”这其实正是人们继续用 AI 的原因:可变奖励机制。这基本上就是赌博。”dpark 反驳说可变奖励不足以构成赌博——邀请朋友可能答应也可能不答应,开车上班可能堵也可能不堵,”一切都是可变奖励,那一切都是赌博吗?”jimmaswell 从另一个方向消解:”AI 之前的编程一直都是可变奖励。那是在拿你自己的时间和耐心下注。”ls12 给出了一个技术归因:”这多半是训练模型不要幻觉的副作用,那显然已经是很久以来的重点。它们被强烈激励去反复核对,以避免不小心编造东西。”dudeinhawaii 的观察是当下的问题已经不是死循环,而是”过度热心”:”模型现在想反复三查四查。我有点夸张,但它接近于’我有了一个可行方案,但让我再用 Rust 写一个变体来确保解法收敛’。”koyote 补了一个具体痛点:这基本上让大型功能无法增量构建——每开一个新会话,它都会因为主入口那个”尚未完全实现”的异常而非常沮丧地告诉你这个功能永远不可能work。

关于「怎么活下去」的实用方案。 brap 直接问”你们怎么管理这种互动里的情绪?我经常发现自己被激怒”。ceejayoz 的回答是他自己写了一套 harness,目标就是彻底不直接跟 Claude 说话——他在看板上加工单,它给他做原型/文档,他批准,然后拿到临时 web server、iOS/Android 构建来验证;审查循环、执行他个人偏好和测试调试流程的代理全自动跑,最后由 Codex 把散文精简掉。”我认为整天直接跟这些东西说话是一条通往疯狂的路。它们互相交谈、达成共识,给我一个已经被审查、验证、带截图证据和验证计划的结构化结果。对我来说它不是对话式的。”但 selestify 的追问戳到了要害:”我的问题是它建出来的东西不对。第一次不对,第二次第三次也不对。总是需要大量增量式的纠正反馈。你遇到这个问题吗?如果不遇到,我需要搞清楚怎么才能不遇到。如果遇到,你怎么在没有对话的情况下给出所有这些增量纠正反馈?”

更简单的方案也有不少。gonzalohm:”我停止使用 AI,手动做。我一般只给 AI 一次机会,失败了就说明它没给我省时间。”jerf 引用《银河系漫游指南》里 Ford 对着计算机数数的段落后说:”你并没有义务接受 AI 的提交。大部分时候我甚至不让它提交,因为提交时间就是我的审查时间。它把按钮改成蓝色又干了另外四件事,你可以只留下蓝色那个改动,把其余的丢掉。它拦不住你。”moezd 给了两条:”如果你的 LLM 这样表现,是你的输入不精确。你也可以不回复它,直接用它这轮吐露的’智慧’去编辑你上一条输入。”以及”不要跟 AI 争论。如果你走到了真的在跟它辩论而且快输了的地步,停下。让它为你的立场做最强辩护。”

最后是三条角度独特的评论。 ovasoncn 提供了全帖最反直觉的辩护:”如果你是程序员,蓝色按钮测试烦得要命。但接着你会想起同一个模型也部署在 Claude Gov 里。如果一个政府雇员说’关闭纽约地铁的一个出口’,而 Claude 用同样恼人的’在我这么做之前,这里有一些你可能没考虑到的下游后果’来回应,你突然就理解了这个行为为什么存在。”epistasis 借机吐槽了一个无关的产品问题:Claude 聊天里没有导出生成的图片、表格的机制,”他们声称把这些数据给你是’安全问题’,好像他们拒绝遵守数据导出法是在保护你”。而 snkline 提出了最中肯的建议:”反应两极分化。我挺喜欢它的,但我认为作者应该更清楚地标明:(a) 这确实是个玩笑站点;(b) 它不包含真实的 Claude 回复。这个站点很容易被误读,因而’get 不到’这个笑话。”

许多人在评论区顺势宣布转投 Codex,felixgallo 早早地讽刺了这一点:”所有百分之百自发的’哇,我看我最好换到 OpenAI’评论要来了。”而 atleastoptimal 给了这类作品一个略带宿命感的注脚:”这些东西很可爱,但基本上几个月后就会随着模型变好而过时。”