如果你常年用Claude Code写代码,大概率被"这是load-bearing的""honest take""you're absolutely right"这几句话磨到耳朵起茧。GitHub上有个issue专门吐槽这事,编号#53454,底下附和的人不少。最近有开发者想出一招:写个脚本把这些高频废话替换成滑稽词——"load-bearing"变成"cooked","honest take"变成"spicy doodad","you're absolutely right"变成"I'm a complete clown"。
方法不复杂,但它顺手撬开了一个更值得琢磨的问题:这类"嘴瘾"到底能不能治好,又该谁来治。
MessageDisplay到底改了什么
先把机制说清楚。MessageDisplay是Claude Code官方文档记录的正式hook事件,不是野路子挖出来的漏洞。它在每条助手消息要显示到终端前触发,接收一段含delta、index、final等字段的JSON,脚本返回一个新的displayContent,就能替换掉即将显示的文字。
关键在于它只管"显示"这一步。Claude实际生成的文字、写进transcript的记录、通过API或Agent SDK拿到的原始文本,一个字都不会变。脚本执行超时(默认10秒)或报错,系统直接回退显示原文。交互模式下同一条消息可能因为流式分批多次触发这个hook,但用claude -p或调用Agent SDK时,整条消息只触发一次——这决定了这套玩法基本只在你盯着终端看的时候才起效,自动化调用或日志分析,统统看不到"cooked"这种词。
Claude的嘴瘾不是个例
"load-bearing"能被单独拎出来吐槽,不是巧合。有非正式统计翻过约6万条Claude回复,光"load-bearing"这个词就出现了188次。搭配它的还有一整套固定修辞——"honest take""ground truth""blast radius""footgun""baked in",以及那个经典句式"not X but Y"。这些说法在reddit和GitHub上被吐槽很久了,本质是模型在对齐训练里收敛出的一批听起来专业、信息量却接近零的口头禅。它们的问题不在难听,在制造虚假的确定感——模型说"honest take"的时候,并不比不说更诚实。
横向比一比更看得清楚。ChatGPT的毛病更像模板客服腔,一句"it's important to note"能套进任何场景;Gemini容易在长对话里字面重复提示词,严重时直接退化成文字循环。三家模型语病不一样,根子却类似:都是某种表达模式在训练里被过度强化,变成了各家品牌自带的口癖。
显示层的把戏,治不了生成层的病
这也是这个hook脚本最诚实的地方——它从没打算治本,只是让你笑出来。真正想解决问题的人,已经摸索出更接近治本的路子:在系统提示里直接写明禁用这些词,并要求模型用具体的依赖关系和失败场景描述来替代空洞修辞。据反馈这种做法效果明显更好,因为它逼着模型在生成阶段就换一种说话方式,而不是等说完了再被人偷换字眼。
- 提醒.MessageDisplay改的只是眼前这块屏幕,transcript和API返回的原文不受影响,拿它当"驯服模型"的工具没有意义。
谁该为AI的口头禅负责
这事有点像产品经理和工程师的经典分工困境——一个负责用户看到的界面,一个负责底层到底在算什么,界面好看不代表底层被真的改好了。Claude Code把hook权限开放给用户,本意是给安全审计、日志记录这类正经场景用,结果被拿来玩梗,恰好说明用户对"风格治理"有真实需求,只是官方还没有在生成层给出对应的开关。
显示层能让你笑,生成层才决定Claude到底怎么说话
Anthropic会不会在默认系统提示或后续模型版本里主动收敛这类修辞,目前没有看到公开表态。但这类吐槽反复出现,本身就是信号——用户不是嫌弃某几个词难听,是嫌弃AI说了太多不解决问题的漂亮话。这个hook脚本好笑,也顺带提醒了一件正经事:真正该被"cooked"的,从来不是这几个词,是模型说话时习惯性的虚张声势。
