长会话不再被截断的压缩摘要卡住
发布时间:2026-08-24
标签:会话 上下文压缩 可靠性
NextClaw v0.42.3 修复了一条会让长会话反复失败的路径:压缩摘要达到 provider 输出上限后,旧版本会丢弃结果并保留原 checkpoint,下一条消息因此再次触发同样的失败。
现在,摘要被截断不再直接等于会话失败。NextClaw 会先确认继续任务所需的内容是否完整,再决定安装、重试或降级恢复。
当前结果
| 场景 | v0.42.3 的行为 |
|---|---|
| 摘要正常完成 | 安装完整 checkpoint |
| 截断发生在关键内容之后 | 保留已闭合的关键前缀,丢弃未完成的低优先级尾部 |
| 截断发生在关键内容之前 | 最多进行三次总调用,并让每次输入严格变小 |
| 三次仍无法得到合格摘要 | 停止调用模型,保留近期原文继续会话 |
| 鉴权、配置或网络终态错误 | 立即返回真实错误,不伪装成摘要问题反复请求 |
可验证的摘要边界
压缩提示会让模型按优先级输出当前请求、工作状态、安全约束和继续执行要求,并在这些必需内容之后写入完成标记。
运行时只安装已经闭合的部分。完成标记之前被截断,说明关键内容不完整;标记之后的可选尾部被截断,则只丢弃未完成的尾部。这样,NextClaw 不需要凭文本长度猜测半份摘要是否安全。
重试必须带来真实进展
对同一份历史原样重试,往往只会再次碰到同一个输出上限。恢复路径因此同时限制调用次数和输入规模:总调用最多三次,每一次都移除更旧的非保护历史,并保留近期任务与约束。
如果下一次请求没有实际变小,运行时不会为了凑次数继续调用 provider。
最后的出口保留近期原文
三次摘要都不合格时,NextClaw 不会发起第四次模型请求。它会从仍受保护的 system/service 锚点和最近消息中建立一个确定性 checkpoint。
这条路径会主动舍弃较旧历史,但近期内容仍来自原始消息,不会生成没有来源的新事实;原始 journal 也会继续保留。它提供的是一个有明确边界的恢复出口,而不是把降级结果包装成完整摘要。
更贴近实际安装空间的预算
摘要输出上限现在从最终可安装空间推导。目标仍最多为 4,000 token,但 provider 不再使用互不关联的固定 8,000 token 上限;默认只留最多 10% 的受控完成余量,并在安装前再次校验实际大小。
当目标为 4,000 token 时,常见输出上限是 4,400,而不是 8,000。余量用于完成当前结构,不会让摘要目标翻倍。
能力边界
- provider 的鉴权、配置或网络终态错误仍会失败;压缩恢复不能替代一个可用的主模型。
- 最终的近期原文恢复会舍弃旧历史,因此保证的是会话可继续,不是上下文零损失。
- token 数来自运行时估算,最终请求仍受具体模型的上下文上限约束。
下一步会继续观察实际长会话中的摘要调用次数、截断原因、安装大小与降级恢复比例,让压缩恢复在不同模型上保持可预测。