模型按"最后一句"走,无视前面的规则

Prompt 末尾的一句"顺便提一下"会覆盖你开头写好的规则。

你认真写了 12 句规则,末尾顺手加一句”哦,口语化一点”。输出无视了 12 条里的 10 条,全口语化。认真规则说”用正式英语、引用来源、返回 JSON”,那句口语化只是顺嘴一说。模型听了顺嘴那句,因为它在最后。语言模型的”近期偏好”是真实且承重的:prompt 末尾的 token 拿到不成比例的注意力,尤其当你前面的规则没被标成硬约束时。你写在最后的东西会被读成”最终决定是……”。

本文讲为什么最后一句会赢,以及怎么让顶部规则不被结尾的顺嘴一句改写。

常见原因

1. 顺嘴的那句紧贴交付指令

离”现在写答案”越近权重越大。如果你结尾是”顺便短一点”,“短”就赢过前面所有规则。

如何判断:删掉最后一句,输出回到遵守前面规则的状态。

2. 前面规则没标硬

如果你的规则写成 prose(“用 JSON 比较好”)而不是祈使句(“必须返回合法 JSON”),模型当成偏好。一句”给个简短摘要就行”就能覆盖偏好。

如何判断:你的规则用”应该”、“最好”、“尽量”——软情态。

3. 长 prompt 稀释前面注意力

2000 字 prompt 里,前 200 字到生成时已经”远”了,后 200 字”近”。模型在本地注意。

如何判断:短 prompt 里有效的规则,长 prompt 里失效。

4. 对话历史叠加近期偏好

聊天会话里,你最新的 message 离回答最近。前面轮次(即使规则严格)会被最近一条 casual message 压过去。

如何判断:第 1 轮的规则第 2 轮还守,第 8 轮就丢了。

5. Prompt 末尾没重锚

很多认真的 prompt 结尾是”现在写答案”。最后没重提规则,近期偏好就反过来不利于规则。

如何判断:你最后一段是任务,不是规则。

动手前先确认

  • 从下往上读 prompt。最后 3 句是模型最注意的。
  • 识别哪些是硬规则、哪些是偏好。
  • 删掉最后一句重跑。输出变好就找到覆盖源了。
  • 同内容换顺序跑。仅顺序就能修。
  • 聊天会话里检查你最新 message 有没有把前面轮次的规则压下去。

需要收集的信息

  • 按顺序的完整 prompt 文本。
  • 无视规则的输出。
  • 删除最后一句后的输出。
  • 规则挪到末尾后的输出。
  • 聊天场景:完整对话历史。

最短修复路径

Step 1:Prompt 结尾放硬规则,不要只放交付指令

三明治模式:

[顶部]
非协商规则:
- 返回合法 JSON
- 字段 "summary" ≤50 字
- 每个论断附来源

[中间:上下文、示例]

[底部——交付前重申]
硬规则提醒:合法 JSON、summary <50 字、附来源。

现在产出。

模型最注意末尾,所以规则也要放末尾。

Step 2:软情态换成 MUST / DO NOT

差:  "尽量保持简短。"
好:  "必须 ≤100 字。不许超过。"

差:  "尽量用 JSON。"
好:  "只返回合法 JSON。JSON 块外任何 prose 都算违规。"

模型对 MUST / DO NOT 的约束力解析比情态动词稳。

Step 3:后期补充挪到结构槽位

有”顺便”的念头,不要 append。把它编辑进结构里对应的槽:

差:  [12 句规则] ... 哦还有口语化一点。
好:  [顶部]
      语气:口语(允许缩略、第二人称优先)
      [12 句规则]
      [底部:重申硬规则 + 语气]

Step 4:聊天会话每几轮重锚

长 chat 里在最新 message 里重贴硬规则:

(延续第 1 轮任务。规则:<重申 3 条最硬的>。)
现在做:<新请求>。

或者把规则挪到 system prompt / project 指令里,让它彻底躲开近期漂移。

Step 5:审最后 3 句

发任何 prompt 前先读最后 3 句。如果会让陌生人误解,重写。最后 3 句承担 50% 的引导。

Step 6:能用 schema 就用 schema 收尾

末尾一个正式 schema 是最强的近期锚:

输出 schema(只返回这个):
{
  "summary": "<string, max 50 words>",
  "sources": ["<url>", ...]
}

schema 因具体且在最后而占主导。

怎么确认已经修好

  • 删掉最后一句输出不变(顶部规则守住了)。
  • 末尾加一句口语化的话,输出不翻成口语(底部硬规则顶住了)。
  • 聊天里第 1 轮的规则一直到第 10 轮都守住。
  • 陌生人读最后 3 句能预测出你想要的输出。

如果还是没修好

  1. 规则挪到 system prompt 或 project 指令。
  2. 用结构化输出(JSON schema、tool use)——格式固定时近期偏好影响小。
  3. 换更强模型——有些对近期偏好更鲁棒。
  4. 缩短 prompt——长 prompt 放大近期偏好。

预防建议

  • 每个 prompt 结尾都重申硬规则,不要只留交付指令。
  • 硬规则默认 MUST / DO NOT / MUST NOT。“应该”留给真正的偏好。
  • 三明治模板:顶部规则、底部规则、交付指令最后但引用规则。
  • 聊天工作把硬规则放 system prompt / project 指令,不要放 user message。
  • 发送前滚到 prompt 底部问:“这读起来像最终决定吗?”
  • 警惕”顺便”和”哦还有”——这是重构信号,不是 append 信号。

相关阅读

标签: #排查 #Prompt #Prompt 质量 #Prompt 工程