Claude Opus 5 接长对话总丢前文 / 该截断还是分段喂?

文章导读
先别在两种做法之间选,先用同一段出过问题的对话各跑一遍,看哪一个把“指代丢失”压得更少。判断标准不是回答读起来顺不顺,而是模型是否在某一轮开始把前文出现过的人物、变量或结论当成新的东西。经验上,长程指代密集的任务(多轮排障、逐条追问条款、多轮改同一份代码)优先分段喂;每轮彼此独立、可自洽的单轮问答优先截断。边界也要先说清:分段会增加输入体积和维护摘要一致性的成本,截断是不可逆丢弃,二者都不是“修复
📋 目录
  1. A 在会话记录里标出前文被丢弃的位置
  2. B 分别用截断与分段两种方式跑同一段对话
  3. C 统计两种方式下指代丢失的次数
  4. D 按任务类型确定切换判断
A A

先别在两种做法之间选,先用同一段出过问题的对话各跑一遍,看哪一个把“指代丢失”压得更少。判断标准不是回答读起来顺不顺,而是模型是否在某一轮开始把前文出现过的人物、变量或结论当成新的东西。经验上,长程指代密集的任务(多轮排障、逐条追问条款、多轮改同一份代码)优先分段喂;每轮彼此独立、可自洽的单轮问答优先截断。边界也要先说清:分段会增加输入体积和维护摘要一致性的成本,截断是不可逆丢弃,二者都不是“修复模型记忆”,只是把前文组织成模型当次能看到的样子。

遇到长对话答非所问,先做一次对照实验:同一段会话分别用截断(只保留最近若干轮加首条系统提示)和分段(按话题切段,每段带结构化摘要)各跑一遍,记录指代丢失的次数与发生轮次。丢失集中在早期铺垫、后续反复回指人物或变量名的任务,选分段;每问独立、答案不依赖历史的任务,选截断即可。判断依据来自你自己的会话日志,不要凭单次回答的流畅度下结论;也不要把调参后的好转当成模型的固定能力。

在会话记录里标出前文被丢弃的位置

先把会话导出成逐轮记录,别只看最后那条错误回答。每条记录至少包含:轮次号、用户输入的一句话摘要、模型的回答是否引用了前文已出现的实体、是否出现“答非所问”。判定“答非所问”的口径要事先写死,建议用下面三条之一就算一次:模型把你已经给过的信息当成新信息反问;模型用“你提到的 X”指代,但 X 在本次输入里找不到;模型把 A 的属性安到 B 上。

{"turn": 18, "user_digest": "追问第三版报价里 A 客户的折扣口径",
 "assistant_reused_prev": false, "lost_ref": true,
 "missing_entity": "A 客户 / 折扣口径", "note": "把 A 客户当成新客户重新问预算"}

这个字段结构可以按你的日志表改,但 turn、lost_ref、missing_entity 三项建议保留,后面统计全靠它们。找到第一条 lost_ref 为 true 的轮次,那就是“前文被丢弃开始起作用”的位置,而不是模型整体变差的位置。注意:如果第一条丢失出现在很早的轮次,说明问题可能不在窗口长度,而在系统提示或输入拼接方式,先排除这两项再谈截断。

分别用截断与分段两种方式跑同一段对话

两种方式必须面对同一份内容,否则比较没有意义。把原始会话原样存档,两种策略都从这份存档出发,只是喂法不同。

  • 截断:保留首条系统提示、最近若干轮原文,中间的轮次直接丢弃。可以额外附一段“已确认事实”清单来兜底,但清单本身算作你新加的输入,要在记录里标明。
  • 分段:按话题边界把会话切成若干段(换任务、换对象、换交付物即为边界),每段先压成结构化摘要,再把“上一段摘要 + 本段原文”一起喂进去。
对照项截断分段
输入组织系统提示 + 最近 N 轮原文累计摘要 + 当前段原文
保留最近若干轮、首条系统提示全部段的摘要、当前段全文
丢弃较早轮次原文,不可恢复较早段原文,只留摘要
典型失效早期定下的人物、变量、结论被忘掉摘要漏写细节,导致回指含糊

分段用的摘要模板可以直接抄这一版,替换项在方括号里:

【已确认事实】
- 人物/角色:[谁提出的、谁负责]
- 变量与取值:[字段名、版本号、金额口径]
- 已定结论:[已经拍板的事项]
- 未决问题:[下次要继续追问的]
【本段原文】第 [X]-[Y] 轮
...
【本次要求】只回答本轮问题;所需信息不在上面时,直接说明缺什么,不要猜。

统计两种方式下指代丢失的次数

把主观感受变成一张能对照的表。口径建议:只在“模型输出中的指代在当次输入里找不到指称对象”时计一次;同一轮里同一实体的多次回指记为一次,不同实体分别记。这样两边的数字才可比。

Claude Opus 5 接长对话总丢前文 / 该截断还是分段喂?
策略丢失次数发生轮次涉及人物或变量名
截断[填][填,如 18、24、31][填,如 A 客户、v3 报价、折扣口径]
分段[填][填][填]

填表时留意两件事:一是丢失是否整体后移(后移也算改善,说明策略只是把边界推远了,任务再长还会撞上);二是丢失是否集中在摘要没覆盖到的细节上,如果是,优先改摘要模板而不是换策略。不要用回答“读起来是否自然”当替代指标,那和能不能接上前文是两回事。

按任务类型确定切换判断

长程指代多的任务,推荐分段。理由是这类任务的价值就在链条上:前面定过的角色、字段名、口径,后面每一轮都要回指,丢掉任何一段都会让后续回答失去指称对象。分段保留的是“压缩后的全部历史”,代价是摘要维护成本,以及摘要写漏时的隐性失真。

单轮问答类任务,推荐截断。理由是每问独立,答案不依赖更早的对话,保留最近几轮足以处理轻微追问,丢弃早期轮次不会造成可观察的损伤,输入体积也更可控。

两者混合时,用分段做主干、段内做截断:每段只保留摘要加最近几轮原文。切换前先过一遍这份清单:

  1. 后续轮次是否要反复提到前面出现过的人物或字段名?是,倾向分段。
  2. 丢掉中间五轮,答案是否仍然成立?是,倾向截断。
  3. 是否出现“摘要里没写、但后面被追问”的细节?是,先补摘要模板再谈换策略。
  4. 日志里首次 lost_ref 是否出现在会话很早的位置?是,先查系统提示与输入拼接。
  5. 当前窗口预算是否已接近上限(含输出与系统提示余量)?是,分段优先。
  6. 任务是否要求一致性高于细节完整度(如逐条核对条款)?是,分段并固定摘要字段。

改完之后用同一段存档会话重跑,验证方式很直接:看丢失次数是否减少、首次丢失轮次是否后移、涉及的关键实体是否还在。若两者表现接近,选维护成本更低的那一种,通常就是截断。最终选择需要结合你的会话长度分布和输入成本确认,不要把它当成一次调参就固定的设置。