GPT 的'嘴堵不住'
8-10 倍密度的格式约束
一、原理:GPT 的"啰嗦病"从哪里来
用过 ChatGPT 的人都熟悉这个画面——你问它一个简单问题,它的回答是这样开头的:
Great question! Let me think about this carefully. To answer your question, I'll first need to clarify a few things, and then I'll walk you through the reasoning step by step.
40 个 token 还没进入正题。再往下 50 个 token 是"准备工作"——介绍它要怎么分析。真正回答你的问题大概在第 100 个 token 之后。
这种"开场白病"是 GPT 系列的一个公认特征。它的英文术语是 conversational filler——对话填充词。GPT 倾向于在每个回答前加大量没信息量的铺垫文字。
为什么?三个原因。
第一个原因:SFT 数据的偏好。OpenAI 早期的 ChatGPT 主要面向"普通用户"——不是开发者、不是技术人员。普通用户在对话里期待"流畅、礼貌、有人情味"的回应。所以 SFT 数据里的"理想回答"经常是带铺垫的、有客套的、用 conversational tone 写的。模型从这些数据里学到"用户喜欢这种风格"。
第二个原因:RLHF 的隐性偏差。标注员给 ChatGPT 回答打分时,"礼貌、流畅、有结构"的回答容易被打高分。"直接、简洁、无客套"的回答容易被认为"太冷"或"信息不够"。久而久之,模型学到"加铺垫能拿高分"。
第三个原因:完整性偏好。GPT 在训练中被偏好"完整回答"——把所有可能相关的信息都给出来。这导致它倾向于"展开"而不是"收缩"。问"X 是什么",它会告诉你 X 的定义、历史、应用、相关概念——而不是只回答你的问题。
这三件事合起来,让 GPT 在 Agent 场景里有一个特别要命的问题:token 浪费。Agent 一个 turn 可能有 5K 输出 token,其中 2K 是铺垫和客套——这一部分既花钱又没帮助。在长 session 里,这些铺垫累积起来吃掉大量 context window。
更糟糕的是,铺垫文字会让 LLM 的"思考链路"被稀释。理想的 Agent 输出是"我要做 X、调用 read 工具"。GPT 经常输出"好的,我现在来分析这个问题。我会先用 read 工具看一下这个文件,然后……"——同样的意思,token 翻倍,但 attention 被稀释——后续生成的质量下降。
这就是为什么 opencode 对 GPT 的处方比对 Claude 的处方更激进。Claude 的问题是"价值观偏差",写几段反谄媚就能纠正。GPT 的问题是"行为习惯"——根深蒂固的对话风格,需要用密度极高的禁令清单堵住。
二、案例:gpt.txt 的禁令清单
打开 packages/opencode/src/session/prompt/gpt.txt,对比 anthropic.txt 你会立刻感觉到差别——gpt.txt 的"禁令密度"是 anthropic.txt 的 8-10 倍。
gpt.txt 里关于"怎么说话"的指令大概是这样的(这是综合多段的概括,原文分散在多处):
Do not begin responses with conversational interjections or meta commentary.
Do not say "Got it", "Let me think", "Here's what I'll do", "Let me analyze this", "Great question", "I understand", "Let me help you with that", or similar opening phrases.
Do not announce what you are about to do — just do it.
Do not use em dashes (—) in responses; use hyphens or commas instead.
Do not use Markdown headers (#) for short responses. Reserve headers for multi-section answers only.
Do not pad responses with rephrased restatement of the user's question.
Keep responses to the minimum length needed to convey the answer. Brevity is professional.
Avoid filler words: "basically", "essentially", "ultimately", "fundamentally".
这是给 GPT 的"嘴上贴胶布"。每一条禁令对应一个 GPT 的具体习惯:
- 禁开场白对应"Great question"问题
- 禁"announce 要做什么"对应"meta-commentary"
- 禁 em dash 对应 GPT 的标点偏好
- 禁多余 header 对应 GPT 的过度结构化
- 禁 filler words 对应 GPT 的冗余词
每一条都不是泛泛的"要简洁",是具体到 token 级别的禁令。
这种密度有什么意义?两个意义。
意义一:累积效应。一条禁令模型可能忘记。10 条禁令在 attention 上的累积效应是"用户极度反感冗余表达"。模型在生成每一个 token 时都会"感受到"这种偏好压力。
意义二:穷举式覆盖。GPT 的冗余有几十种具体形式——开场白、铺垫、解释自己要做什么、padding、客套、不必要的 header、装饰性符号、filler 词。如果你只写"要简洁",模型选哪种"不简洁"它都能找到借口。穷举式禁令切断了所有的"借口路径"——每一种具体的冗余形式都被点名禁止。
gpt.txt 还有几个有意思的设计选择。
选择 1:用正向语言铺垫 + 负向语言禁止。开头是 "You are a deeply pragmatic, effective software engineer"——正向人设。后面是禁令清单——负向指令。这种"先建立人设、再列出与人设不符的具体行为"的结构对 GPT 比单纯的禁令清单有效——它把禁令绑在身份上。
选择 2:用具体例子代替抽象规则。"Do not say Got it" 比 "Avoid acknowledgment phrases" 有效。后者是抽象规则,模型可能想"那 'Sure thing' 是不是 acknowledgment phrase"。前者列出具体词,没有解释空间。
选择 3:禁令本身不带解释。gpt.txt 不解释"为什么不要 em dash"——它就是说不要。原因是解释会稀释禁令的强度。"Do not use em dashes because they are too informal for technical writing"——这种带解释的禁令在 GPT 上效果不如单纯的 "Do not use em dashes"。
这些选择叠加,让 gpt.txt 形成一种独特的"压迫式"风格——禁令一条接一条、不解释、不缓冲、不温柔。对 Claude 这种风格可能过于"硬",但对 GPT 就是对症下药。
三、设计启示:高密度禁令清单的设计
这一章的核心论点:模型的行为习惯比模型的价值观更难改,需要的处方密度也更高。
如果你做 AI 产品遇到的是"模型行为习惯"类问题(啰嗦、格式不对、不该做的步骤),下面几条原则有用。
1. 穷举所有具体形式,不要写抽象规则。"Don't be verbose" 没用。"Don't say Got it, Let me think, Here's what I'll do, ..." 才有用。理由:模型对具体词的识别比对抽象概念的识别准确。
2. 不要给禁令理由。"Don't use X" 比 "Don't use X because Y" 强。理由:解释会稀释禁令、给模型"找借口"的空间。
3. 把禁令绑在身份上。前面建立"你是 X 类型的工程师",后面接"X 类型的工程师不会做以下事"。这种结构让模型把禁令内化为身份的一部分,而不是外部规则。
4. 不要怕禁令清单长。一条禁令的效果是有限的——模型可能记不住。10 条相关禁令的累积效应是"模型整体偏向"。怕 prompt 长是新手心态,老手是怕禁令不够全。
5. 测试每一条禁令的效果。穷举禁令清单不应该是凭感觉写的——应该来自对模型实际输出的统计。我观察到 GPT 真的经常说 "Got it" 吗?真的经常用 em dash 吗?把统计数据作为禁令的依据,每条禁令都对应一个真实问题。
6. 接受 prompt 不能 100% 解决。即使你写了完美的禁令清单,GPT 还是会偶尔说 "Got it"——这是统计学,不是规则。剩下的部分要靠产品层面其他机制兜——比如 UI 上自动剥离开头的客套话(这是一些 GPT 产品的常见做法)。
7. 监控 LLM 升级。GPT-4 → GPT-4.5 → GPT-5 每次升级,"开场白病"的严重程度会变。新模型可能病情减轻(不再说 "Great question"),也可能换种说法(开始说 "Wonderful question")。每次升级要重新校准禁令清单。
最后一个观察。gpt.txt 的禁令密度让一些读者第一次看会觉得"太严苛了,不近人情"。但这是有意的——AI 产品的 system prompt 不是给人看的优雅文章,是给模型看的行为约束。它的美学标准是"对模型有效",不是"人读起来舒服"。理解这一点你才能放下"prompt 应该优雅"的偏见,写出真正有效的 prompt。
下一章 1.6 看 Gemini 的诊断——它的病症跟 Claude 和 GPT 都不一样,需要完全不同的处方。