同一会话里前一轮已经确认的信息,到下一轮被推翻,通常不是单一原因。更常见的是两件事叠在一起:这一轮的历史消息根本没有带上,或者带上了,但你先后写下的约束本身互相打架,模型只能来回挑一个执行。判断顺序建议反过来:先固定原文,再分离变量,最后才谈改提示词。凭记忆回忆「它刚才说错了」几乎没法定位,因为你也记不清自己上一轮到底写了什么。
先别急着归因于模型记性差。把同一会话每轮的提问原文和回复原文逐字贴出来,标出矛盾出现的轮次;再把互相冲突的约束句单独列一张表,看冲突点是字数、语气、格式还是事实口径。然后开一个新会话,只带必要历史重问一次:如果结论变稳定,问题多在自己的多轮指令;如果仍然矛盾,再检查历史拼接、会话长度截断和是否有重复生效的系统级设定。不打开会话历史或调试入口时,只能得到倾向性判断。
把同一会话的每轮输入输出原文贴全
这一步的目的是固定复现材料。很多「前后不一致」在回看原文后会变成「我上一轮其实没说过」或者「我上一轮说的是另一种条件」,靠回忆描述现象会把判断带偏。建议从会话第一轮开始编号,每轮贴完整提问原文和完整回复原文,不截断、不改写、不用省略号代替中间内容,并在出现反转的轮次上做标记。
除了对话本身,还要顺手记几个环境项,因为它们决定后面怎么验证:当前是否开启会话记忆或历史携带、是否始终在同一个会话窗口里、中途有没有刷新页面或新建会话、当前选择的模型或模式有没有变过。这些信息用一两行记录即可,不需要长篇说明。
轮次 1
提问原文:(完整粘贴)
回复原文:(完整粘贴,不截断)
矛盾标记:否
轮次 2
提问原文:(完整粘贴)
回复原文:(完整粘贴)
矛盾标记:是
矛盾点:轮次 1 确认的地址口径,在轮次 2 被写成另一个
会话环境
是否开启记忆/历史携带:
是否同一会话窗口:
中途是否刷新或新建会话:
当前模型或模式:
如果贴完发现矛盾只在第 3、4 轮之后才出现,而前两轮正常,那么「历史被截断」的嫌疑会明显上升,可以直接跳到下一节的做法去验证。
挑出互相冲突的约束句单独标注
很多所谓上下文丢失,其实是自己在多轮里写了两条不能同时满足的约束。做法是把所有带「必须、不要、只、一定、控制在」这类词的句子逐条摘出来,排在一起看冲突点。常见冲突集中在四类:
- 字数与详略:一边要求「尽量简短」,一边要求「每一步都展开说明」。
- 语气与立场:一边要求「中立陈述」,一边要求「直接给明确推荐」。
- 格式:一边要求「用表格输出」,一边要求「用连贯的段落写」。
- 事实口径:先定义了某个前提,后续轮次又按另一个前提发问,两个前提没有被明确替换。
[约束 A] 回复控制在三句话以内
[约束 B] 把每个关键步骤都展开讲清楚
冲突点:字数/详略,两条同时生效时只能二选一
[约束 C] 结论里不要出现主观判断
[约束 D] 直接给出你认为最合适的方案
冲突点:语气/立场,C 和 D 在同一轮里互相抵消
如果同一轮里就存在这样的两条约束,模型在轮与轮之间反复横跳属于可预期的结果,不需要再去找上下文的原因。真正需要排查的是:冲突句分别写在哪几轮,后一条是否明确覆盖了前一条。没有明确说「以下内容替换上一条」时,模型通常会两条都试图满足。
开新会话只带必要历史重问一次
这一步用来区分两种原因。开一个全新会话,不要带完整历史,只手写必要信息重问同一问题。必要历史建议只包含三块:已经确定且不再变的事实、当前这一轮要解决的具体问题、本轮期望的输出格式。其余寒暄、闲置轮次、已经作废的旧结论都去掉。
背景(仅此一次):
- 已确认事实:(例如地址、时间范围、角色设定)
- 当前问题:(一句话)
本轮要求:
- 输出格式:
- 需要保持不变的口径:
然后做对照:
- 新会话结论稳定,且和旧会话某一轮一致:矛盾多来自你的多轮指令内部打架,或旧会话里某条被后来的话推翻。
- 新会话结论仍然摇摆:先确认历史是否真的被带上,再查看会话长度或历史条数的截断设置。
- 新会话结论稳定但和你预期不同:说明你原本的口径没写清楚,问题不在上下文,而在表述。
需要说明的是,上述判断基于页面行为和配置可观察项,属于倾向性结论;在看不到会话拼接细节的情况下,不能直接断定是哪一层把历史丢掉。
整理出对多轮对话有效的提示写法
把前一步验证到的结论固化下来,下一次就不用再试一遍。
背景信息放在开头,一次说清。角色、范围、已确定的固定事实统一写在第一段,后续轮次不再重复粘贴,避免同一事实出现两个版本。
每轮需要重申的内容只有三样:本轮要解决的具体问题、本轮要求的输出格式、相对于上一轮发生变化的前提。发生变化时要写明替换关系,例如「上一轮的地址作废,以本轮给出的为准」。
需要删除的重复约束包括:和当前轮无关的旧格式要求、意思重复但措辞不同的两条限制、已经失效的旧结论。多轮里最容易积累的就是这类重复,它们不会报错,但会让输出在几轮之间来回改口。
背景(只在第一轮写一次)
- 角色与范围:
- 已确定事实:
每一轮
- 本轮问题:
- 输出格式:
- 与上一轮的变化:无/(写明替换掉哪一条)
约束写法
- 只保留一条字数或详略要求
- 只保留一条语气要求
- 事实口径变更时必须显式声明替换
按这个写法再跑一次同样的多轮任务,如果矛盾消失,说明原因在提示层,不在上下文层;如果换新会话、精简约束后仍然前后不一致,建议先确认会话历史是否被截断、有没有重复生效的设定,再考虑更换提问方式,而不是继续在同一句提示词上反复微调。