Vomit: 使用本地 LLM 清理 Claude 5 的 Token 输出
概述
Vomit 是一款开源工具,旨在拦截并重写 Claude 5 的输出。用户将其描述为“token vomit”(token 呕吐)——即过于冗长、生硬且偶尔难以理解的散文。该工具通过一个独立的本地 LLM 将 Claude 的输出进行管道传输,从而将“Claudish”(Claude 风格)的文风转化为清晰、口语化的英语。
使用 Go 语言构建,Vomit 设计为完全本地化运行,无遥测功能且无外部依赖,确保重写文本的处理过程保留在用户的机器上。
核心功能与安装
Vomit 通过利用 LLM hooks 来实时替换 Claude 的输出,或者通过非侵入模式运行来翻译会话日志。
安装与设置
要安装和配置 Vomit,用户需遵循以下步骤:
- 安装二进制文件:
go install github.com/zachahn/vomit@latest - 初始化连接:运行
vomit init来设置本地 LLM 的连接详情。 - 配置 hooks:运行
vomit scrub -claude来设置替换 Claude 输出的指令。
使用模式
- 侵入模式 (Invasive Mode):通过 hooks 直接替换 Claude 的输出。
- 非侵入模式 (Non-Invasive Mode):允许用户使用诸如
vomit list(查看会话标识符)和vomit tail(翻译特定或最近的会话)等命令在侧边进行翻译。
支持的本地 LLM 后端
Vomit 兼容任何使用 OpenAI API 的 LLM 提供商,包括:
- Llama.app (推荐模型:GPT-OSS 20B)
- Ollama
技术实现: “Claudish” 翻译提示词
Vomit 的有效性依赖于本地 LLM 作为编辑者所使用的特定系统提示词。该提示词明确指示本地模型识别并移除 Claude 5 输出中常见的特定“奇怪特征”:
- 迂回的推理:移除伪顿悟和流向中干扰性的节奏。
- 错误的主谓组合:确保只有人类、群体和代理执行“动作动词”,而对象保持被动状态。
- 特定的禁用词:提示词针对在对象作为动作动词使用时,如 “carries” 和 “names” 之类的词。
- 风格化的干扰:移除破折号 (—) 以防止散文中的节奏干扰。
社区对 Claude 5 文风的分析
Vomit 的创建引发了开发者之间关于近期 Anthropic 模型(特别是 Opus 5)文风质量退化的更广泛讨论。
“Claudish” 现象
用户报告称 Claude 5 的输出变得越来越难以阅读,其特征为:
- 刻意的模糊化:使用密集的术语和生硬的隐喻来听起来更具权威性。
- 以代理为中心的优化:有人推测该模型已针对代理对代理的通信进行了 RL 优化,而非针对人类对代理的通信,从而导致了奇怪的词汇选择和过度的自我辩解。
- 认知负担:开发者注意到,冗长和“Columbo 风格”的页脚(在每个响应的末尾添加免责声明)增加了解析技术信息的心理努力。
替代方案
除了使用 Vomit,社区还建议了其他几种处理“slop”(废话)的方法:
- 提示词工程 (Prompt Engineering):使用诸如 “You must use ASD-STE100 Simplified Technical English (STE)” 的咒语,或使用诸如 “Caveman” 之类的工具来强制使用更简单的风格。
- 模型切换:转向 Codex 或开源权重模型(例如,Muse Glimmer 30B)进行技术写作。
- 版本降级:一些用户报告称 Opus 4.6 是最后一个没有这些文风问题版本的版本。
- 官方设置:Claude Code 的近期更新引入了
outputStyle: concise选项以减轻冗长。
理论原因
一些贡献者认为,奇怪的散文是模型推理过程的副产品。该理论认为,“奇怪”的推理散文对于模型的内部循环和系统化思维是有效的——这提高了编码和数学性能——但在没有经过最后的“人性化”阶段之前,无法转化为可交付的、人类可读的答案。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- 项目
- 项目