AI 输出风格漂移——怎么把风格钉死

system prompt 没动、模型没换,几轮之后 AI 又开始写"快速变化的数字化时代"——这是软约束 vs 硬约束的问题。本文教你把形容词风格翻成模型可自检的可测规则。

你写好了 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,原本失败的规则现在过了。

如果还是没修好

  1. 缩到只有一条规则的 prompt——如果连一条都钉不住,问题在模型/平台,不在 prompt。
  2. 从 chat UI 切到 API;UI 有自己的 system prompt 会盖掉你的。
  3. 换一个模型族——不同模型遵守约束的可靠度差很多。
  4. 如果风格要的是个人深度声音(你的写作而不是泛风格),用 5-shot 你自己的真实写作做示例,比规则更准。

预防建议

  • 维护一份”风格块”,每次新 prompt 和 Project 指令都贴。
  • 重复性工作绝不靠”message 里塞一句风格提示”——一定上 system prompt 或 project 级。
  • 风格锚保持短:最多 2-3 句。长锚会被平均。
  • 每周审一次漂移:跑一个固定 prompt,和上周对比。
  • 品牌语气把 模型 + temperature + 风格块 三件套打包,作为一个完整配置。
  • 格式重要时优先要结构化输出(JSON、schema),别用”散文 + 格式规则”。

相关阅读

标签: #排查 #Prompt #Prompt 质量 #风格漂移