你写好了 system prompt,第一轮模型语气精准——简短、第二人称、没有营销废话。三轮之后它又开始写”在当今快速变化的数字化时代”。到第十轮,它已经擅自加上了 bullet 标题、emoji,整体调子变成了企业博客的官腔。Prompt 没变,模型没变。变的是你的风格指令相对于会话里其他内容的”有效权重”。风格漂移几乎都是”软约束 vs 硬约束”的问题:你告诉模型你想要”什么感觉”,但没给它”必须满足什么规则”。
本文讲清楚漂移的原因,以及怎么把软风格描述翻译成模型可以自检的可测约束。
常见原因
1. 用形容词描述风格,没给规则
“punchy”、“专业”、“温暖”、“简洁”这些词对应不到具体行为。模型把它们解析成训练分布里带该标签的文本的平均态——也就是你最不想要的企业博客口吻。
如何判断:你的风格指令里 0 个数字、0 个禁用词、0 条结构规则,全是形容词。
2. 早期风格示例被挤出上下文
长会话里,模型主要锚在最近 10-20k token。如果你的风格锚是 turn 1 第一段,而你现在已经在 turn 25,它可能直接出了上下文窗口。模型就回到默认。
如何判断:漂移和轮次强相关。前 3 轮没事,第 8 轮之后开始走样。
3. 软提示和内容争优先级
如果你最近一条 user message 里塞了一大段技术说明,末尾加一句”保持口语化”,模型把技术段落当成主导框架,“口语化”只是个提示。提示打不过体量。
如何判断:内容多 + 风格指令短时漂移最严重。
4. 根本不是漂移,是采样方差
temperature 0.9 下,同一 prompt 不同 run 风格本来就不一样。你看到的不是漂移而是方差,但修法一样:收紧约束。
如何判断:在全新会话里跑同一 prompt 多次,风格仍然每次不同。
5. 模型快照中途换了
某些平台会悄悄轮换模型版本。你为上周的快照调好的语气在新快照上失效。
如何判断:漂移和日期相关,和轮次、prompt 内容无关。
动手前先确认
- 保存一份”风格正确”和一份”风格漂了”的输出,方便对照差异。
- 记下模型名、temperature、用的是哪个平台或 API。
- 在新对话里跑同一 prompt,区分漂移和采样方差。
- 看平台 changelog 最近一周有没有模型快照更新。
- 确认 system prompt 或 project instructions 真的加载了——有些 UI 会悄悄截断。
需要收集的信息
- 完整风格指令原文,包括它在 prompt 里的位置。
- 第一次漂移出现在第几轮。
- 模型、temperature、top-p 以及任何平台侧参数。
- “好”和”差”的两段输出并排。
- 漂移发生时整个对话的总 token 数。
最短修复路径
前 3 步通常解决大多数情况。
Step 1:把形容词换成可测规则
软描述换成可数约束:
| 形容词 | 可测规则 |
|---|---|
| ”punchy" | "每句不超 15 字。任意一句不能以’在’开头。" |
| "专业" | "无感叹号。无第二人称。无口语缩略。" |
| "温暖" | "每段至少出现一次’我们’。标题不加粗。" |
| "简洁" | "全文不超 120 字。不超过 4 句。” |
模型判断”这句是不是 ≤15 字”远比判断”这句是不是 punchy”靠谱。
Step 2:给一个显式风格锚
贴 2-3 句目标语气示例,明确标注:
风格示例(请完全按这段语气写):
"先去 Dashboard 拿环境变量。粘到 .env.local。
重启 dev 服务。如果还报错,说明你拿错 key 了。"
一个具体锚比三页形容词管用。
Step 3:每 N 轮重锚一次
长会话里在第 6、12、18 轮重新粘一遍风格块。是重复,但确实有效。更好的做法:把风格块挪进 system prompt / Project 指令 / .cursorrules,让它顶住上下文压力。
Step 4:加自检尾巴
每个 prompt 后面加:
写完后用以下规则核对:
- 规则 1:<每句 ≤15 字>
- 规则 2:<无感叹号>
- 规则 3:<以动词开头>
有违反的句子重写后再核一遍。
给清单时模型自审能力还不错。
Step 5:钉死模型 + temperature
如果你是在 gpt-5-2026-04-01 temperature 0.3 上调出了正确语气,就锁死。新快照会漂。用 API 或显式选模型的 UI,别用”默认”——默认会偷偷变。
Step 6:格式漂移 → 强制结构化格式
如果漂的是结构(bullet vs prose、JSON vs Markdown),用结构化模板硬框:「只返回符合此 schema 的 JSON:{"summary": string, "next_step": string}。无散文、无注释。」结构可以强制,语感不行。
怎么确认已经修好
- 三次全新会话里跑同一 prompt,每次输出都通过你的全部规则。
- 一个 10 轮会话里,第 1、5、10 轮输出都通过规则,没退化。
- 让没参与的人读一段输出,描述语气;描述要和你的目标吻合。
- 把旧”漂了”的输出和新输出 diff,原本失败的规则现在过了。
如果还是没修好
- 缩到只有一条规则的 prompt——如果连一条都钉不住,问题在模型/平台,不在 prompt。
- 从 chat UI 切到 API;UI 有自己的 system prompt 会盖掉你的。
- 换一个模型族——不同模型遵守约束的可靠度差很多。
- 如果风格要的是个人深度声音(你的写作而不是泛风格),用 5-shot 你自己的真实写作做示例,比规则更准。
预防建议
- 维护一份”风格块”,每次新 prompt 和 Project 指令都贴。
- 重复性工作绝不靠”message 里塞一句风格提示”——一定上 system prompt 或 project 级。
- 风格锚保持短:最多 2-3 句。长锚会被平均。
- 每周审一次漂移:跑一个固定 prompt,和上周对比。
- 品牌语气把 模型 + temperature + 风格块 三件套打包,作为一个完整配置。
- 格式重要时优先要结构化输出(JSON、schema),别用”散文 + 格式规则”。
相关阅读
标签: #排查 #Prompt #Prompt 质量 #风格漂移