Show HN:Claudette——让 Claude 别再像 BuzzFeed 文章那样说话

查看原文 HN 讨论

文章摘要

这是一个叫 NoBuzz 的小项目,作者 Adnan Akil(HN 上的 aakil)把它提交为 Show HN。README 的开场白本身就是全场笑点:他假装这是「众所周知」的事实——Anthropic 只用旧的 BuzzFeed 文章训练了 Claude(所以它才那么爱怀念九十年代),于是他和 Claude 一起做了一个 Claude Code skill(斜杠命令 /debuzz),把 Claude 的上一条回复送去翻译成正常人话。他们本想叫它「Claudette」,但因为 Cat Wu 出了名地爱打官司,所以「它绝对绝对不叫 Claudette」。

它要解决的问题被描述得相当传神:Claude 是个很好的工程师,但有一种治不好的病——它讲话像是在做一场关于自己 PR 的 TED 演讲。你问它某个测试为什么不稳定,得到的回答里会有一个「承重假设」(load-bearing assumption)、三条编号的「洞见」,外加一句郑重其事的「而第三条是最有教益的」。在它嘴里没有任何东西只是一个 bug,永远还有一个「关键转折」。

这个 skill 的设计哲学是承认现实:靠提示词无论如何调教都治不好这个毛病,所以干脆把回复交给另一个模型。具体做法是通过 Google 的 Antigravity CLI(命令 agy)调用 Gemini,Gemini 唯一的任务就是把它改写成人话。README 特别强调,Claudette「已经拉过钩」要原样打印 Antigravity 的翻译结果,因为一旦让 Claude 去「润色」译文,那个本来要被去掉的腔调就会重新混进来。

README 里给了一组前后对照。「之前」是 Claude 版本:重试逻辑不只是锦上添花,而是整条同步管线的「承重假设」,有三件事很扎眼,第三件最有教益……「之后」是 /debuzz 的 colleague 模式输出:同步管线的重试逻辑有三个 bug,syncQueue.ts:142 吞掉了 ETIMEDOUT 而没有重新入队;退避上限只有 2 秒,对移动网络来说太低;去重键里包含时间戳,所以重试永远不会被去重。修复方案:把时间戳从键里去掉、上限提到 30 秒、把超时错误重新抛出。同样的信息量,去掉了全部戏剧性铺垫,还多了具体的文件行号和修复动作。

安装方式是把仓库里的 debuzz 目录拷进 ~/.claude/skills/;前置依赖是 Claude Code 和 Antigravity CLI(agy),后者装完要跑一次完成 Google 登录。

用法是 /debuzz [mode] [text],提供三种受众模式:colleague(默认,面向工程师,内容不变、所有文件路径和代码块原样保留、零戏剧腔)、manager(面向半技术背景的管理者,讲清楚发生了什么、为什么重要、下一步是什么,长度约为原来的三分之一,不含代码)、director(面向高管,三到五句话说完结果、影响、诉求,假设对方只有三十秒注意力)。不带文本参数时翻译 Claude 的上一条回复;也可以粘贴文本进去翻译指定内容。它还会被「用正常英语再说一遍」这类自然表述触发。

实现细节没什么魔法:把上一条回复写进临时文件,然后执行 agy -p "<文件内容> <朴素英语风格指令>"——因为 agy 的 headless 模式不读 stdin,也不会读项目目录外的文件,所以文本只能直接塞进提示词——最后原样打印输出。如果 agy 报错(通常是鉴权问题),你会看到真实错误信息,Claude 只会把自己的改写作为一个明确标注的兜底方案给出,因为「一个偷偷让 buzzer 给自己 debuzz 的 debuzzer,最后只会产出一份承重的译文」。MIT 协议。

HN 评论精华

这条帖子拿到 363 分、235 条评论,是一场规模可观的集体吐槽大会。有意思的是,讨论的重心几乎完全不在这个工具本身,而在于「为什么 Anthropic 到现在还没修这个问题」,以及大量用户自行摸索出的提示词偏方。也有相当一部分人质疑:为此多跑一个模型、多付一倍 token 值不值。