Lowfat: 一款用於減少 LLM Token 使用量的可插拔式 CLI 過濾器

Lowfat 是一款輕量級的 CLI 工具,透過在命令列輸出到達 AI agent 之前進行過濾,來降低 AI token 成本。藉由去除 CLI 回應中的雜訊,它能防止 context window 膨脹並降低 LLM API 調用的財務成本。

核心架構與設計理念

Lowfat 被建構成一個可組合、優先考慮本地端的 utility,並遵循 UNIX 風格的管道(piping)原則。其設計強調使用者控制權與可擴展性,而非「魔術」般的自動化過濾。

  • Local-First: 工具本身不包含任何遙測數據,確保數據保留在使用者控制之下。
  • Composable: 允許使用者透過管道將內建過濾器與自定義過濾器混合使用。
  • Lightweight: 以包含極簡核心的小型單一二進位檔形式發佈。
  • User-Owned: 使用者可以透過 lowfat history 追蹤最常使用的命令,以識別最需要進行自定義的地方。

安裝與整合

Lowfat 可以透過 Cargo (cargo install lowfat) 或 Homebrew (brew install zdk/tools/lowfat) 安裝,GitHub Releases 也提供預建的二進位檔。

Agent 整合

Lowfat 提供幾種透明整合至 AI agent 工作流的方法:

  • Claude Code: 可以作為 PreToolUse hook 加入 .claude/settings.json 中,用以過濾 Bash 命令。
  • Shell Integration: 在設置了 CLAUDECODE=1CODEX_ENV 的環境中會自動啟動,或者可以透過在 shell 設定檔中加入 eval "$(lowfat shell-init zsh)",藉由 LOWFAT_ENABLE=1 強制啟動。
  • OpenCode: 透過 lowfat opencode install 進行整合,該指令會將插件寫入 ~/.config/opencode/plugins/lowfat.ts 以透明地重寫命令。
  • Pi Agent:~/.pi/agent/settings.json 中使用 shellCommandPrefix 欄位進行配置。

直接使用

使用者可以手動在任何命令前加上前綴來過濾其輸出,例如 lowfat git statuslowfat docker ps

管理與可擴展性

Lowfat 包含一套用於監控節省情況與擴展功能的工具:

  • 監控: lowfat stats 提供終身 token 節省量,而 lowfat stats --audit 則顯示最近的插件執行情況。
  • 配置: lowfat info 顯示目前啟用的過濾器以及特定命令的 pipeline(例如 lowfat info git)。
  • 自定義: 使用者可以使用 lowfat level ultra 設定過濾的強度,或使用環境變數進行一次性覆蓋(例如 LOWFAT_LEVEL=lite lowfat git log)。
  • 插件開發: 可以使用 lowfat plugin new <name> 來建立插件腳架,並使用 lowfat plugin doctor 進行驗證。

社群洞察與權衡

雖然 Lowfat 的目標是優化 token 使用量,但社群討論強調了幾種關鍵的權衡與 context 管理的替代策略。

過濾過度的風險

幾位使用者對過度激進的過濾可能會移除關鍵資訊(例如特定的 stack traces)表示擔憂。一位使用者指出,這類工具中有時會「比幫助 agent 還更讓人困惑」,導致 agent 為了補償缺失的數據而進行更多次的 API 調用,從而抵消了成本節省。

後置過濾的策略性替代方案

對於「執行後過濾」的批評者建議,根本原因通常是 agent 使用了過於寬泛的命令。

"The bigger problem is agents defaulting to the broadest command possible. kubectl get -o yaml when a jsonpath query would give 1/50th the tokens. filtering after the fact works, but you're still paying for the round trip."

替代建議包括:

  • 教導 Agent 變得精確: 鼓勵 agent 寫出精確的查詢(例如使用 jsonpath),而不是過濾寬泛的輸出。
  • Response Truncation with Pointers: 截斷輸出但告知 LLM 該完整文本可以在特定的暫時性檔案路徑中找到,從而允許 LLM 僅查詢必要的部份。
  • Local Pre-Filtering: 使用廉價的本地端 LLM 來識別並提取 CLI 輸出中僅有的「有意義」的部分,在將其傳遞給更大、更昂貴的模型之前進行處理。

基準測試與主張說法

對於高百分比節省量的宣稱存在懷疑態度。部分使用者認為,減少特定命令的輸出 token 數量並不等於任務的整體的 token 使用量減少,因為整體的 prompt 與 agent 的推理過程仍然會消耗大量的資源。

Sources