Claude Opus 5.5 处理长对话时,先确认上下文截断发生在哪一轮

文章导读
和 Claude Opus 5.5 连续对话时,前文提到的编号、约束或数字在后续回答里消失,通常不是提示词写得不清楚,而是那部分内容已经不在本轮实际送入的上下文里。判断顺序建议是:先回看会话记录,找到模型最后一次正确引用前文的位置,再从那之后逐轮标记;定位到第一轮信息丢失后,对比该轮前后的输入长度和结构,区分是单轮输入过长,还是累积历史把早期内容挤出窗口;确认来源之后再决定拆分还是摘要,而不是先改
📋 目录
  1. A 在会话记录里标出第一轮信息丢失的位置
  2. B 对比截断轮次前后的提示词长度和结构
  3. C 把长会话拆成带摘要的短片段
  4. D 用同一组问题验证截断是否复现
  5. E 把验证结果写回会话记录表
A A

和 Claude Opus 5.5 连续对话时,前文提到的编号、约束或数字在后续回答里消失,通常不是提示词写得不清楚,而是那部分内容已经不在本轮实际送入的上下文里。判断顺序建议是:先回看会话记录,找到模型最后一次正确引用前文的位置,再从那之后逐轮标记;定位到第一轮信息丢失后,对比该轮前后的输入长度和结构,区分是单轮输入过长,还是累积历史把早期内容挤出窗口;确认来源之后再决定拆分还是摘要,而不是先改提示词。

定位上下文截断,建议按「最后正确引用轮 → 第一轮信息丢失 → 输入长度与历史条数对比 → 分段摘要 → 同题复测」的顺序走。适用场景是连续多轮、前文含实体或硬约束的对话。验证方式是让模型回答必须复用前文信息的问题,只有答错或要求重发才按截断处理;模型未主动提及不等于被截断,单次结果也不足以当成定论。

在会话记录里标出第一轮信息丢失的位置

回看的目标是定位一个具体轮次,不是一个模糊感觉。做法是从会话末尾往前翻,找到模型最后一次准确复述前文内容的位置,例如它正确说出了前面给过的订单编号、文件路径或数值阈值,把这一轮记为最后正确引用轮。再从这一轮往后逐轮检查,直到出现第一轮不再使用前文信息的回答。

每一轮要检查四类内容:实体(名称、编号、路径、版本号)、数字与阈值、否定约束(不要改某个字段、不要引入某个依赖)、格式约束(输出结构、字段顺序)。某一轮的回答必须用到这些信息却没有用到,就把该轮标记为第一轮信息丢失,它前面一到两轮记为临界区间。

需要区分「没提及」和「已丢失」。模型只是没提到前文,可能因为那一轮不需要提及。可以用一个必须复用前文的问题直接验证,比如「刚才那份配置里第三个参数是什么」。如果模型答对,说明这一轮上下文仍在;如果它要求重新提供,或者答案与既有事实冲突,再按截断处理。

Claude Opus 5.5 处理长对话时,先确认上下文截断发生在哪一轮

对比截断轮次前后的提示词长度和结构

拿到疑似截断轮以后,比较它前面几轮和它自己的输入结构。可以统计的字段有:本轮输入字符数、历史消息条数、本轮是否包含大段代码、日志、文档或工具返回结果、系统提示词是否被重复拼接。这些字段用字符数和条数就能看出趋势,不需要精确到 token。

for f in turn-*.txt; do
  printf '%s\t%s\n' $f $(wc -m < $f)
done

如果字符数在丢失轮明显抬高,多于前后轮,偏向单轮输入把窗口占满,优先压缩本轮的代码、日志和粘贴文档。如果各轮字符数接近,但历史消息条数持续增长,偏向累积历史把早期内容挤出窗口,应该从分段和摘要入手。窗口的具体大小与所用入口、客户端和账号配置有关,需要结合自己的环境确认,不建议照搬某个固定数字。

把长会话拆成带摘要的短片段

分段的思路是让每一段自己带够上下文。先让模型从上一段历史中提取事实列表,再把这份列表作为新一段的开头,而不是把整段原文一直往后拖。

Claude Opus 5.5 处理长对话时,先确认上下文截断发生在哪一轮
只做一件事:从下面的对话历史中提取已确认事实,输出成列表。
格式:
1. 目标与任务
2. 已知实体(名称、编号、路径、版本)
3. 硬约束(必须遵守)
4. 禁止项
5. 未决问题
6. 尚未验证的假设
规则:只写对话中明确出现过的内容,没有的写「无」,不要补充推测。
对话历史:(粘贴这一段历史)
以下是此前确认的事实列表,请当作既有上下文,不要重新询问:
(粘贴事实列表)
现在继续处理:(粘贴新问题)

验证事实列表有没有漏项,办法是回到上一段最后几轮,把出现过的实体、数字和约束逐条对照列表,缺哪条补哪条。也可以让模型自查一次,例如让它指出列表里没把握的条目,但最终以人工核对原始对话为准,不建议只信模型给出的摘要。

用同一组问题验证截断是否复现

调整之后要确认问题是否真的消失。设计两次提问:一次带完整历史,一次只带摘要历史,问题内容、顺序和措辞保持一致,问题本身必须指向某个早期实体或约束。然后记录两次回答里对关键实体的引用差异。

Claude Opus 5.5 处理长对话时,先确认上下文截断发生在哪一轮
  • 完整历史版答不出早期编号,摘要版答得出:截断主要来自累积历史,分段策略有效。
  • 两版都答不出:可能是单轮输入本身过长,或者提问方式没有触发对前文的复用,需要继续压缩本轮输入。
  • 两版都答得出:上一次的丢失更可能是一次偶发,保留记录,隔几轮再测一次。

复测时不要只看一次结果,也不要用「感觉变好了」作为判断依据。以回答里是否出现正确的实体、编号和约束为准。

把验证结果写回会话记录表

每次调整后把结果追加到一张表里,只记录能回看核对的事实,不覆盖旧行。字段建议如下:轮次、输入长度(字符数和历史消息条数)、是否引用前文、缺失内容、调整动作。

轮次输入长度是否引用前文缺失内容调整动作
记录起点轮字符数 / 历史条数是,说明引用了哪个编号或约束无无
疑似丢失轮字符数 / 历史条数否列出未再出现的实体与约束压缩本轮输入或拆段
复测轮字符数 / 历史条数按实际结果填写按实际结果填写保留摘要开头或继续调整

填表时「是否引用前文」要写具体依据,例如回答了哪个编号;「调整动作」写实际执行过的操作,例如拆段、加入事实列表、删掉本轮大段日志。几轮之后再回看这张表,就能判断截断属于哪一类,以及哪一步调整真正起了作用。