上下文压缩失败怎么办:DeepSeek Harness 的 compaction 报错、阈值与恢复顺序
compaction 失败有两种:摘要生成不出来,和摘要太长被截断。 两者都指向上下文压力,但处理方式不同;先看是哪一句,再决定调阈值还是换模型。
两种 compaction 报错
两句报错,分别对应「质量」与「长度」。
| 报错 | 含义 | 先查什么 |
|---|---|---|
| compaction could not produce a useful summary | 摘要不可用 | 历史规模与模型能力 |
| compaction summary reached the output token limit | 摘要触到输出上限 | 输出上限与摘要长度 |
前者是「压不出有用的东西」。 历史太长、主题太散或模型输出能力不足,都会导致摘要质量差;系统判定不可用后放弃。
后者是「压出来了但太长」。 摘要本身触到输出上限,被截断;通常发生在历史很大、要求保留细节很多时(来源)。
两句都可能伴随继续截断提示。 看到 response still truncated 一类信息,说明连续尝试也没成功;这时不要继续点重试。
为什么会失败
压缩失败不是单一原因,四个因素最常见。
- 历史规模过大。 一次要压的内容太多,摘要装不下或质量下降。
- 输出上限偏小。 模型单次输出有限,摘要写到一半被截。
- 主题过于分散。 会话里混了多个不相关任务,摘要难以取舍。
- 模型能力不足。 小模型做长摘要容易丢主线,系统判定不可用。
四个因素的共同点是「输入与输出不匹配」。 输入太大、输出太小,压缩必然失败;调参只能缓解,不能消除。
先看历史规模,再看输出上限。 顺序反了,会在模型上反复换,而问题在历史。
先判断:自动还是手动
自动压缩与手动压缩的失败处理不同。
- 自动压缩: 达到阈值自动触发;失败后可能反复尝试,表现为每轮都报错。
- 手动压缩: 由你主动触发;失败后可以换时机、换模型再试。
- 判断方法: 看报错是否在固定轮次出现,或是否与你的操作对应。
- 自动失败: 先停在一个稳定点,再做一次手动恢复。
- 手动失败: 换模型或缩小范围后重试。
自动失败最容易被忽略。 它不声不响地反复尝试,直到把会话卡住;看到固定轮次报错,就要怀疑自动压缩。
手动压缩更可控。 可以先保存关键结论,再触发压缩;失败也不影响正在做的事。
恢复顺序:从轻到重
按代价排序,先做不丢历史的。
- 保存关键结论。 把重要决定、文件路径、待办写进一条新消息或外部笔记。
- 新建会话。 用摘要或关键结论开新会话,绕开已经过大的历史。
- 调整阈值。 提前触发压缩,避免历史堆到极限;阈值太低会增加调用次数。
- 换输出能力更大的模型。 摘要需要更长输出时,换模型比调参有效。
- 拆分历史。 把会话按任务拆成几个,减少单次压缩压力。
- 清理无关内容。 删除大段日志、重复附件与无效对话,降低输入规模。
新建会话是最稳的止损。 它不依赖压缩成功,能立刻恢复工作;代价是丢失部分上下文,需要手动补关键信息。
调阈值要与换模型一起考虑。 只调阈值不换模型,摘要仍可能被截断;只换模型不调阈值,压缩频率不变。
两次失败后的处理
连续两次压缩失败,说明当前路径走不通。 换方法,不要继续重试。
- 停止自动重试,避免反复写入失败记录。
- 用关键结论开新会话。
- 在新会话里只保留必要背景,不要整段复制旧历史。
- 需要旧细节时,用检索或日志找回,而不是让压缩重来。
- 记录失败时的历史规模、模型与阈值,供下次调整。
两次失败是信号,不是偶然。 同样的输入、同样的模型,再试一次结果大概率相同。
新会话也要控制规模。 把旧历史整段搬过去,等于把问题复制一遍;只带关键结论与必要引用。
预防:别让历史堆到极限
压缩失败可以预防,核心是控制历史规模。
- 阶段性收尾。 一个任务结束后,把结论写下来,开新会话继续下一个。
- 少贴大块内容。 长日志、整份文件尽量用路径或摘要代替。
- 定期清理。 删除无关附件与重复对话,减少输入体积。
- 关注阈值提示。 出现压缩提示时就开始收敛,不要等到失败。
- 选合适的模型。 长会话用输出能力更强的模型,减少摘要截断。
预防的成本低于恢复。 每次任务收尾多写两行结论,比事后重建上下文省事。
下一步
先看是哪句报错,再按代价恢复。 想理解压缩机制,看《DeepSeek Harness 上下文压缩是什么》;想看窗口溢出排查,看《上下文窗口溢出》;想看输出上限,看《输出 token 上限回答被截断》。
常见问题
compaction could not produce a useful summary 意思是压缩没有产出可用摘要,不等于会话损坏。历史数据通常还在,只是压缩这一步失败;先保留现场,再换模型或调整阈值重试。
compaction summary reached the output token limit 与普通输出截断相关但不同。前者是压缩摘要本身太长、触到输出上限;后者是普通回答触到上限。
压缩失败后继续对话可能反复触发压缩失败,导致每轮都报错;历史文件一般不丢,但后续写入可能受影响。先停在同一现场,做一次恢复,再继续。
调大压缩阈值能减少触发频率,但不解决历史过大的根本问题。模型输出上限太小时,摘要必然被截断,这时应换输出能力更大的模型或拆分历史。
相关术语
- compaction
- compaction 是 DeepSeek Harness 为腾出上下文窗口而压缩历史对话的过程,通常生成摘要替换早期内容。— DeepSeek Harness 官方文档
- 摘要
- 摘要是压缩后的历史替代内容,保留主线与关键结论,细节可能丢失。— DeepSeek Harness 官方文档
- 上下文窗口
- 上下文窗口是模型单次请求能容纳的 token 总量,超过后需要压缩或截断。— DeepSeek Harness 官方文档
- 输出上限
- 输出上限是单次生成允许的最大输出长度,压缩摘要也受它约束。— DeepSeek Harness 官方文档
来源
- DeepSeek Harness 官方文档· deepseek-harness
- dsh CLI README· deepseek-ai
- deepseek-harness 仓库· deepseek-ai