Vomit: 使用 Local LLM 清理 Claude 5 的 Token 輸出
概述
Vomit 是一款開源工具,旨在攔截並重寫 Claude 5 的輸出。使用者曾將其描述為「token vomit」(token 嘔吐物)——即過於冗長、生硬且偶爾令人費解的散文風格。該工具透過另一個本地的 LLM 將 Claude 的輸出進行轉換,將這種「Claudish」風格轉化為清晰、口語化的英文。
使用 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 作為編輯器所使用的特定系統提示詞(system prompt)。該提示詞明確指示本地模型識別並移除 Claude 5 輸出中常見的特定「奇怪特性」:
- 迂迴的推理:移除偽頓悟(pseudo-epiphanies)和流暢度中干擾節奏的停頓。
- 錯誤的主語-動詞組合:確保只有人類、群體和代理(agents)執行「動作動詞」,而對象物則保持被動狀態。
- 特定的禁用詞:提示詞針對當對象物作為動作動詞使用時的詞彙,例如「carries」和「names」。
- 風格上的干擾:移除破折號(—)以防止散文中的節奏干擾。
社群對 Claude 5 散文品質的分析
Vomit 的出現引發了開發者之間關於近期 Anthropic 模型(特別是是 Opus 5)散文品質退化的廣泛討論。
「Claudish」現象
使用者回報 Claude 5 的輸出變得越來越難以閱讀,其特徵如下:
- 刻意的模糊化:使用密集的術語和生硬的隱喻來顯得更具權威感。
- 代理中心化優化:有人推測該模型可能針對「代理對代理」的通訊而非「人類對代理」的通訊進行了 RL 優化,導致了怪異的用詞與過度的自我辯護。
- 認知負擔:開發者指出,過度的冗長與「Columbo-style」結尾(在每個回應的末尾添加免責聲明)增加了解析技術資訊所需的心理負荷。
其他替代方案
除了使用 Vomit 之外,社群也建議了幾種處理「slop」(廢話)的其他方法:
- 提示詞工程:使用如「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
- 專案
- 專案