如何使用 MessageDisplay Hook 替換 Claude 的重複性用語

如何使用 MessageDisplay Hook 替換 Claude 的重複性用語

使用 Hook 替換 Claude 的重複性用語

核心結論: 您可以透過安裝一個 MessageDisplay hook 來抑制 Claude 偏好的流行語(例如 load‑bearinghonest take),該 hook 會執行一個微型腳本,在輸出內容到達您的螢幕之前進行重寫。


為什麼 Hook 很重要

Claude 經常在程式碼解釋和散文文字中插入相同的慣用語——load‑bearing seamshonest takesspicy doodads。使用者回報這些重複性用語非常刺耳,特別是在閱讀預期具有人類語氣的非技術性文本時。此 hook 提供了一個即時、由使用者控制的修復方案,而無需重新訓練模型。


Hook 的實作方式

  1. 建立替換腳本 (wordswap.sh)。該腳本會讀取 Claude 的 JSON delta,進行不區分大小寫的 regex 替換,並發送新的 JSON payload。
#!/usr/bin/env python3
import json, re, sys

# Map of phrase → replacement.  Add or edit entries to suit your taste.
replacements = {
    "seam": "whatchamacallit",
    "you're absolutely right": "I'm a complete clown",
    "honest take": "spicy doodad",
    "load-bearing": "cooked"
}

data = json.load(sys.stdin)
text = data.get("delta") or ""
for phrase, replacement in replacements.items():
    pattern = r"\b" + re.escape(phrase) + r"\b"
    text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)

print(json.dumps({
    "hookSpecificOutput": {
        "hookEventName": "MessageDisplay",
        "displayContent": text,
    }
}))
  1. 賦予腳本執行權限
chmod +x ~/.claude/hooks/wordswap.sh
  1. ~/.claude/settings.json 中註冊 hook
{
  "hooks": {
    "MessageDisplay": [
      { "hooks": [ { "type": "command", "command": "$HOME/.claude/hooks/wordswap.sh" } ] }
    ]
  }
}
  1. 重新啟動 Claude(或開始新對話)。此 hook 會在每次顯示訊息時自動執行,即時替換定義好的用語

社群反應

“我並不介意當我在用 Claude 寫程式碼時它使用那些典型的 Claude 式用語。但我更困擾的是當我在閱讀部落格文章、電子郵件或其他形式的散文文字時,看到那些同樣的 Claude 式用語。”doctoboggan

“LLM 現在每天透過數十億個 token 進行廣播,散播著單一模型的用語偏好,因此任何特異的用語都會顯得非常突兀。”infogulch

“我建立了一個技能來審查其寫作,並讓它編輯自己的輸出(例如程式碼註解)。這很有幫助,但預設的詞彙量仍然感覺很有限。”pocketarc

“我已在我的 CLAUDE.md 中儲存了指令,以避免使用這些陳腔濫調,但模型的趨勢仍然是過度複雜化。”btbuildem

這些評論說明了兩個更廣泛的觀點:

  1. 風格偏好是一種真實的使用體驗問題,當 LLM 的輸出被當作人類寫作的文本時。
  2. 使用者端的後處理(hooks、自定義指令、或自我編輯技能)是主要的緩解策略,直到模型提供商開放更細粒度的風格控制。

擴展此方法

  • 增加更多模式replacements 字典可以包含任何您覺得煩人的用語,例如 “substrate”、“steelman”、“或 “production ready”。

  • 動態配置:將對應關係儲存在一個獨立的 JSON 檔案中,並讓腳本本機執行時載入,從而實現無需編輯腳本即可進行即時更新。

  • 條件邏輯:使用 data payload 來偵測訊息角色(例如 assistant 對比 system),並且僅重寫 assistant 訊息。

  • 結合其他 hook types:Claude 支持多種 hook types(例如 MessageSentToolCall)。您可以將它們串聯起來,以以過濾輸入與輸出。


潛在的權衡 (Trade-offs)

  • 延遲 (Latency):hook 會增加一個微小的處理步驟;大多數使用者回報延遲可以忽略不計,但極高吞吐量的對話會可能察覺到幾毫秒的延遲。

  • 上下文損失 (Context loss):替換用語會改變 Claude 生成的迭代 (token) 序列,這可能會影響下游基於 token 的分析(例如日誌解析)。如果您需要原始的 delta,請保留一份原始副本。

  • 模型行為 (Model behavior):一些研究人員認為,改變模型的輸出可能會微妙地影響其內部的注意力模式。目前尚無具體證據,但如果您依賴 Claude 用於高度敏感的推理任務,這值得監警視。


核心結論

如果 Claude 的招牌用語會打斷您的閱讀流,使用 MessageDisplay hook 提供了一個輕量級且可逆的解決方案。透過定義一個簡單的替換對應關係,您可以在不犧牲其底層能力的情況下,重新奪回對於模型語氣的控制權。

Sources