你认真写了 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 句能预测出你想要的输出。
如果还是没修好
- 规则挪到 system prompt 或 project 指令。
- 用结构化输出(JSON schema、tool use)——格式固定时近期偏好影响小。
- 换更强模型——有些对近期偏好更鲁棒。
- 缩短 prompt——长 prompt 放大近期偏好。
预防建议
- 每个 prompt 结尾都重申硬规则,不要只留交付指令。
- 硬规则默认 MUST / DO NOT / MUST NOT。“应该”留给真正的偏好。
- 三明治模板:顶部规则、底部规则、交付指令最后但引用规则。
- 聊天工作把硬规则放 system prompt / project 指令,不要放 user message。
- 发送前滚到 prompt 底部问:“这读起来像最终决定吗?”
- 警惕”顺便”和”哦还有”——这是重构信号,不是 append 信号。