长对话里出现前后矛盾,通常不是一个原因:可能是上下文窗口只看得到最近若干轮,早期信息已经不在模型眼前;也可能是会话记忆把上一轮甚至上一次会话的旧结论又塞了回来;还可能是单轮输入本身太长,关键约束在中间被漏掉。判断顺序建议固定为:先在会话记录里定位从第几轮开始丢前文,再用记忆开关做两轮对照,然后缩短单轮输入复测,最后把跨轮依赖改写成一整段单轮提示。不要在没分清原因前反复重写提示词或直接换模型。
把上下文窗口和会话记忆当成两个独立变量:窗口决定模型这一轮能看到多少前文,记忆决定系统额外补回多少旧信息。先用会话记录找出丢失位置,再用记忆开关做对照提问,随后逐步缩短单轮输入,最后把跨轮问题合并成单轮结构化提示。配置默认值会随客户端和接口版本变化,需要以实际页面或返回为准,记录长度与回答表现比猜测更可靠。
在会话记录里确认上下文被截断的位置
这一步的目标不是判断模型聪明不聪明,而是找到它从第几轮开始看不见某条前文。操作上可以先打开该会话的完整历史,从出现错误回答的那一轮往上倒查,重点看模型是否还能逐字复述更早轮次里的具体实体,例如文件名、变量名、编号、日期、人名。摘要或压缩通常会在记录里留下痕迹,比如出现「以上对话已摘要」、系统提示条、折叠的历史段,或客户端只保留最近若干条消息。
- 把每一轮用户消息和模型回答按顺序编号,从 1 开始,方便后面引用。
- 标出最后一次正确引用前文实体的轮次,记为第 N 轮。
- 标出第一次出现「不记得」「你之前没有说过」或事实颠倒的轮次,记为第 M 轮。
- 在 M 轮附近翻看是否有截断、摘要、只保留最近消息的提示;如果有,截断点通常就在 M 轮之前。
- 如果使用接口调用,检查请求体里实际发出的消息条数和顺序,而不是只看聊天界面显示的内容。
这一步能验证的是「前文是否还在本轮输入里」,不能直接证明是窗口还是记忆的问题。风险边界在于:客户端界面显示的历史,不一定等于真正发给模型的上下文,需要结合接口日志或调试输出确认。
对比开启与关闭会话记忆时的回答差异
如果记忆功能在后台把旧会话内容注入了当前请求,那即使上下文窗口没满,模型也可能把上一轮的结论带进来。判断方式是做两轮固定话术对照,一轮在开启记忆的原会话里问,一轮在关闭记忆后新建的会话里问同样的问题。
第一轮,先建立标记词,话术固定为:
请只回复「已收到」,并记住三个标记词:青色、7号、托盘。
第二轮,在原会话中提问,话术固定为:
只回答一个问题:青色、7号、托盘这三个词,是否出现在当前对话的上文里?
如果出现,逐字列出;如果没有,回复「当前上文没有」。
关闭记忆后新建会话,重复同样两轮。记录方式建议统一:截图或导出两段完整记录,标注是否会话题目、记忆开关状态、回答是否逐字命中、是否额外补充了当前对话里没有出现过的旧信息。如果关闭记忆后仍能答对,说明标记词还在上下文窗口内;如果开启记忆后答出当前对话没提过的旧话题,基本可以判断是历史记忆在注入。
调整单轮输入长度并复测
排除了前两步之后,再怀疑单轮输入过长。单轮过长时,模型不是「看不到前文」,而是这一轮本身就塞进了太多背景、示例和重复约束,中间的关键条件容易被漏掉。操作方法是从完整输入开始,逐步缩短后重问同一个问题,观察回答是否开始完整覆盖所有要点。
- 把当前这一轮的完整输入复制到单独的编辑器里,记录字符数;如果手边有 token 估算方式,也记下估算值。
- 删掉背景叙述、举例、重复要求,只保留问题、必要约束和期望的输出格式。
- 如果内容很多,按段落每次删掉一整段,或把长度减到原来的一半左右,再重问同一个问题。
- 记录每次缩短后的回答:是否覆盖了所有约束、是否出现遗漏、是否开始编造材料里没有的内容。
- 找到能稳定回答全部要点的长度区间,把它作为后续同类任务的上限参考。
这一步只说明输入长度和回答完整度之间的关系,不能直接推导出固定的长度阈值,因为不同模型、不同接口对长文本的处理方式并不一致。
把跨轮依赖改写成单轮结构化提示
如果问题本身依赖多轮追问才成立,最省事的办法是把跨轮依赖压成一整段单轮提示,让模型不再依赖前文回忆。做法是把之前几轮里的用户补充、修正、最终结论全部合并进「已知事实」,不要写「如上所述」「接着刚才」这类指代。
角色:你是……
任务:只基于下面给出的材料回答问题,不要依赖历史对话。
已知事实:
- 事实1:……
- 事实2:……
- 事实3:……
约束:
- 只使用已知事实
- 无法从给定材料判断时,直接输出「无法从给定材料判断」
- 输出格式:……
问题:……
替换项是角色、事实条目、约束和输出格式;执行位置就是新开一轮或新开会话的首条消息。验证方式是把同一份骨架分别放在开启记忆和关闭记忆的环境里问一次,如果两边的回答主体一致,说明这次任务已经不再依赖会话记忆。
记录不同配置下的行为边界
把上面几步的结果记成一条可复用的边界,比记住某一次回答更有用。每次只改一个变量,否则无法判断是窗口、记忆还是输入长度造成的变化。建议至少记录以下几项:
- 单轮输入长度:字符数或估算 token 数,以及该长度下回答是否完整。
- 上下文配置:客户端或接口中可见的窗口长度、最大输出长度等参数值。
- 会话记忆开关:开启、关闭,以及是否出现摘要或截断提示。
- 轮次编号:第几轮开始丢失前文,第几轮出现矛盾。
- 回答表现:是否逐字命中已知事实,是否引入当前对话没出现过的旧信息,是否在无法判断时承认无法判断。
这些记录的作用是形成判断顺序:先看截断位置,再看记忆开关,再看单轮长度,最后用单轮结构化的提示兜底。需要结合环境确认的部分是各配置的默认值和名称,不同客户端、不同接口版本可能不一样,以实际页面和返回结果为准。