Vomit:用另一个 LLM 清洗 Claude 5 的 token 呕吐物

查看原文 HN 讨论

文章摘要

Vomit 是 Zach Ahn 写的一个 Go 工具,功能一句话说完:把 Claude 的「token 呕吐物」通过一个本地 LLM 转换成英语。完全本地运行,没有遥测,没有外部依赖,GPL v3 许可。

它的工作方式是挂进 Claude Code 的 hook 体系:缓冲 Claude 的输出,把消息转发给本地 LLM(作者一直用 gpt-oss:20b),等它重写,然后通过 MessageDisplay hook 把修正后的版本显示在会话里,替换掉原来那堆 token。安装是 go install github.com/zachahn/vomit@latest,然后 vomit init 配置本地 LLM 连接,vomit scrub -claude 会给出用 hook 替换 Claude 输出的说明。此外还有非侵入式的旁路模式:vomit list 列出 Claude 会话标识、vomit tail [<session_identifier>] 翻译指定会话(或跟随最新的那个)。它兼容 Llama.app、Ollama,以及「任何用 OpenAI API 的东西」。作者推荐的组合是 Llama.app 加通过它下载的 GPT-OSS 20B。

README 里的免责声明写得很实在:本地 LLM 只能看到 Claude 试图表达的内容(无法访问任何动作或文件),所以它会有一点幻觉;速度挺慢;「完全是 vibe-coded 的,只在 Mac 上测过」;有可能你会彻底错过 Claude 的原始信息,可以用 AgentsView 之类的工具拿回原文,因为 Vomit 在运行时不改动任何东西(技术上只往 TMPDIR 写文件)。

配套博客(zachahn.com/posts/1787191554)交代了动机,语气相当情绪化:他讨厌读 Claude 的「解释」,读的时候血压会升高。他认为荒谬的地方在于——我们按 token 付钱给 Anthropic,然后再花 token 预算去写「该怎么说话」的指令,结果 Claude 要么完全无视,要么把文字弄得更糟,最后只能放弃这个会话、换个会话重试一遍循环。他猜测原因可能是预训练里没包含好的散文写作,也许和人们观察到的「不懈的主动性(relentless proactivity)」行为有某种相关。他把 Vomit 定位为一个「艺术项目」,并给了一个真实例子:他让 Claude 改写 git 历史后的汇报,原文有「一个警告,而且是真的警告(One caveat, and it’s a real one)」这种小标题、破碎的名词短语列表和大量被动构造;经 GPT-OSS-20B 重写后变成连贯的第一人称叙述——我 force-push 了分支、我核对了本地和远端都在同一个 commit、老的 tip 仍能在 GitHub 上通过完整 SHA 拉到、我删掉了 FETCH_HEAD 并 expire 了 reflog、如果你想让那些 commit 在 GitHub 侧也不可达,可以找 GitHub Support 跑 GC 或删库重建。他的感慨是:竞争对手(OpenAI)那个免费的、小的、20B 参数的开源模型,在写作上打败了 Anthropic 的旗舰 Opus 模型,这件事很疯狂;而更关键的判断是——「我不认为值得花这么多 token 去求 Claude 写好一点。它做不到。我们是工程师,我们造解决方案。」

HN 评论精华

这条帖子 303 分、297 条评论。作者 zachahn 全程在评论区活跃。讨论主线有三条:一是集体确认「Opus 5 的散文风格确实退化了」并交换各种缓解方案;二是一场关于「抱怨 LLM 文风是不是无病呻吟」的正面冲突;三是对成因的技术推测。此外还有一条明显偏离主题的支线,是关于 Anthropic 在 HN 上口碑变化的讨论。