上下文压缩失败怎么办:DeepSeek Harness 的 compaction 报错、阈值与恢复顺序

故障排查发布于 2026-11-01作者: DeepSeek Plugin 插件市场
compaction上下文压缩压缩失败上下文窗口DeepSeek Harness
compaction 失败有两种典型报错:摘要无法生成与摘要达到输出上限。本文讲清两者差别、触发条件与阈值关系,并给出清历史、换模型、调阈值、新开会话的恢复顺序与验证方法。

compaction 失败有两种:摘要生成不出来,和摘要太长被截断。 两者都指向上下文压力,但处理方式不同;先看是哪一句,再决定调阈值还是换模型。

两种 compaction 报错

两句报错,分别对应「质量」与「长度」。

报错含义先查什么
compaction could not produce a useful summary摘要不可用历史规模与模型能力
compaction summary reached the output token limit摘要触到输出上限输出上限与摘要长度

前者是「压不出有用的东西」。 历史太长、主题太散或模型输出能力不足,都会导致摘要质量差;系统判定不可用后放弃。

后者是「压出来了但太长」。 摘要本身触到输出上限,被截断;通常发生在历史很大、要求保留细节很多时(来源)。

两句都可能伴随继续截断提示。 看到 response still truncated 一类信息,说明连续尝试也没成功;这时不要继续点重试。

为什么会失败

压缩失败不是单一原因,四个因素最常见。

  1. 历史规模过大。 一次要压的内容太多,摘要装不下或质量下降。
  2. 输出上限偏小。 模型单次输出有限,摘要写到一半被截。
  3. 主题过于分散。 会话里混了多个不相关任务,摘要难以取舍。
  4. 模型能力不足。 小模型做长摘要容易丢主线,系统判定不可用。

四个因素的共同点是「输入与输出不匹配」。 输入太大、输出太小,压缩必然失败;调参只能缓解,不能消除。

先看历史规模,再看输出上限。 顺序反了,会在模型上反复换,而问题在历史。

先判断:自动还是手动

自动压缩与手动压缩的失败处理不同。

  1. 自动压缩: 达到阈值自动触发;失败后可能反复尝试,表现为每轮都报错。
  2. 手动压缩: 由你主动触发;失败后可以换时机、换模型再试。
  3. 判断方法: 看报错是否在固定轮次出现,或是否与你的操作对应。
  4. 自动失败: 先停在一个稳定点,再做一次手动恢复。
  5. 手动失败: 换模型或缩小范围后重试。

自动失败最容易被忽略。 它不声不响地反复尝试,直到把会话卡住;看到固定轮次报错,就要怀疑自动压缩。

手动压缩更可控。 可以先保存关键结论,再触发压缩;失败也不影响正在做的事。

恢复顺序:从轻到重

按代价排序,先做不丢历史的。

  1. 保存关键结论。 把重要决定、文件路径、待办写进一条新消息或外部笔记。
  2. 新建会话。 用摘要或关键结论开新会话,绕开已经过大的历史。
  3. 调整阈值。 提前触发压缩,避免历史堆到极限;阈值太低会增加调用次数。
  4. 换输出能力更大的模型。 摘要需要更长输出时,换模型比调参有效。
  5. 拆分历史。 把会话按任务拆成几个,减少单次压缩压力。
  6. 清理无关内容。 删除大段日志、重复附件与无效对话,降低输入规模。

新建会话是最稳的止损。 它不依赖压缩成功,能立刻恢复工作;代价是丢失部分上下文,需要手动补关键信息。

调阈值要与换模型一起考虑。 只调阈值不换模型,摘要仍可能被截断;只换模型不调阈值,压缩频率不变。

两次失败后的处理

连续两次压缩失败,说明当前路径走不通。 换方法,不要继续重试。

  1. 停止自动重试,避免反复写入失败记录。
  2. 用关键结论开新会话。
  3. 在新会话里只保留必要背景,不要整段复制旧历史。
  4. 需要旧细节时,用检索或日志找回,而不是让压缩重来。
  5. 记录失败时的历史规模、模型与阈值,供下次调整。

两次失败是信号,不是偶然。 同样的输入、同样的模型,再试一次结果大概率相同。

新会话也要控制规模。 把旧历史整段搬过去,等于把问题复制一遍;只带关键结论与必要引用。

预防:别让历史堆到极限

压缩失败可以预防,核心是控制历史规模。

  1. 阶段性收尾。 一个任务结束后,把结论写下来,开新会话继续下一个。
  2. 少贴大块内容。 长日志、整份文件尽量用路径或摘要代替。
  3. 定期清理。 删除无关附件与重复对话,减少输入体积。
  4. 关注阈值提示。 出现压缩提示时就开始收敛,不要等到失败。
  5. 选合适的模型。 长会话用输出能力更强的模型,减少摘要截断。

预防的成本低于恢复。 每次任务收尾多写两行结论,比事后重建上下文省事。

下一步

先看是哪句报错,再按代价恢复。 想理解压缩机制,看《DeepSeek Harness 上下文压缩是什么》;想看窗口溢出排查,看《上下文窗口溢出》;想看输出上限,看《输出 token 上限回答被截断》。

来源:DeepSeek Harness 官方文档、dsh CLI README、deepseek-harness 仓库

常见问题

compaction could not produce a useful summary 是什么意思,会话坏了吗?

compaction could not produce a useful summary 意思是压缩没有产出可用摘要,不等于会话损坏。历史数据通常还在,只是压缩这一步失败;先保留现场,再换模型或调整阈值重试。

compaction summary reached the output token limit 和输出截断是同一个问题吗?

compaction summary reached the output token limit 与普通输出截断相关但不同。前者是压缩摘要本身太长、触到输出上限;后者是普通回答触到上限。

压缩失败后如果继续对话会发生什么,会不会把之前的聊天记录弄丢?

压缩失败后继续对话可能反复触发压缩失败,导致每轮都报错;历史文件一般不丢,但后续写入可能受影响。先停在同一现场,做一次恢复,再继续。

调大压缩阈值到底有没有用,什么情况下应该直接换一个更大的模型?

调大压缩阈值能减少触发频率,但不解决历史过大的根本问题。模型输出上限太小时,摘要必然被截断,这时应换输出能力更大的模型或拆分历史。

相关术语

compaction
compaction 是 DeepSeek Harness 为腾出上下文窗口而压缩历史对话的过程,通常生成摘要替换早期内容。— DeepSeek Harness 官方文档
摘要
摘要是压缩后的历史替代内容,保留主线与关键结论,细节可能丢失。— DeepSeek Harness 官方文档
上下文窗口
上下文窗口是模型单次请求能容纳的 token 总量,超过后需要压缩或截断。— DeepSeek Harness 官方文档
输出上限
输出上限是单次生成允许的最大输出长度,压缩摘要也受它约束。— DeepSeek Harness 官方文档

来源