如何使用 MessageDisplay Hook 替換 Claude 的重複性用語
如何使用 MessageDisplay Hook 替換 Claude 的重複性用語
使用 Hook 替換 Claude 的重複性用語
核心結論: 您可以透過安裝一個 MessageDisplay hook 來抑制 Claude 偏好的流行語(例如 load‑bearing、honest take),該 hook 會執行一個微型腳本,在輸出內容到達您的螢幕之前進行重寫。
為什麼 Hook 很重要
Claude 經常在程式碼解釋和散文文字中插入相同的慣用語——load‑bearing seams、honest takes、spicy doodads。使用者回報這些重複性用語非常刺耳,特別是在閱讀預期具有人類語氣的非技術性文本時。此 hook 提供了一個即時、由使用者控制的修復方案,而無需重新訓練模型。
Hook 的實作方式
- 建立替換腳本 (
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,
}
}))
- 賦予腳本執行權限:
chmod +x ~/.claude/hooks/wordswap.sh
- 在
~/.claude/settings.json中註冊 hook:
{
"hooks": {
"MessageDisplay": [
{ "hooks": [ { "type": "command", "command": "$HOME/.claude/hooks/wordswap.sh" } ] }
]
}
}
- 重新啟動 Claude(或開始新對話)。此 hook 會在每次顯示訊息時自動執行,即時替換定義好的用語
社群反應
“我並不介意當我在用 Claude 寫程式碼時它使用那些典型的 Claude 式用語。但我更困擾的是當我在閱讀部落格文章、電子郵件或其他形式的散文文字時,看到那些同樣的 Claude 式用語。” – doctoboggan
“LLM 現在每天透過數十億個 token 進行廣播,散播著單一模型的用語偏好,因此任何特異的用語都會顯得非常突兀。” – infogulch
“我建立了一個技能來審查其寫作,並讓它編輯自己的輸出(例如程式碼註解)。這很有幫助,但預設的詞彙量仍然感覺很有限。” – pocketarc
“我已在我的
CLAUDE.md中儲存了指令,以避免使用這些陳腔濫調,但模型的趨勢仍然是過度複雜化。” – btbuildem
這些評論說明了兩個更廣泛的觀點:
- 風格偏好是一種真實的使用體驗問題,當 LLM 的輸出被當作人類寫作的文本時。
- 使用者端的後處理(hooks、自定義指令、或自我編輯技能)是主要的緩解策略,直到模型提供商開放更細粒度的風格控制。
擴展此方法
增加更多模式:
replacements字典可以包含任何您覺得煩人的用語,例如 “substrate”、“steelman”、“或 “production ready”。動態配置:將對應關係儲存在一個獨立的 JSON 檔案中,並讓腳本本機執行時載入,從而實現無需編輯腳本即可進行即時更新。
條件邏輯:使用
datapayload 來偵測訊息角色(例如assistant對比system),並且僅重寫 assistant 訊息。結合其他 hook types:Claude 支持多種 hook types(例如
MessageSent、ToolCall)。您可以將它們串聯起來,以以過濾輸入與輸出。
潛在的權衡 (Trade-offs)
延遲 (Latency):hook 會增加一個微小的處理步驟;大多數使用者回報延遲可以忽略不計,但極高吞吐量的對話會可能察覺到幾毫秒的延遲。
上下文損失 (Context loss):替換用語會改變 Claude 生成的迭代 (token) 序列,這可能會影響下游基於 token 的分析(例如日誌解析)。如果您需要原始的
delta,請保留一份原始副本。模型行為 (Model behavior):一些研究人員認為,改變模型的輸出可能會微妙地影響其內部的注意力模式。目前尚無具體證據,但如果您依賴 Claude 用於高度敏感的推理任務,這值得監警視。
核心結論
如果 Claude 的招牌用語會打斷您的閱讀流,使用 MessageDisplay hook 提供了一個輕量級且可逆的解決方案。透過定義一個簡單的替換對應關係,您可以在不犧牲其底層能力的情況下,重新奪回對於模型語氣的控制權。