Vomit: 使用 Local LLM 清理 Claude 5 的 Token 輸出

概述

Vomit 是一款開源工具,旨在攔截並重寫 Claude 5 的輸出。使用者曾將其描述為「token vomit」(token 嘔吐物)——即過於冗長、生硬且偶爾令人費解的散文風格。該工具透過另一個本地的 LLM 將 Claude 的輸出進行轉換,將這種「Claudish」風格轉化為清晰、口語化的英文。

使用 Go 語言開發,Vomit 的設計理念是完全本地化,不含遙測功能且無外部依賴,確保重寫文本的處理過程完全保留在使用者的機器上。

核心功能與安裝

Vomit 透過利用 LLM hooks 來即時替換 Claude 的輸出,或者以非侵入模式運行以轉換會話日誌。

安裝與設定

為了安裝與配置 Vomit,使用者需遵循以下步驟:

  1. 安裝二進位檔go install github.com/zachahn/vomit@latest
  2. 初始化連接:執行 vomit init 以設定本地 LLM 的連接詳情。
  3. 配置 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
  • 專案
  • 專案