压缩/摘要失败

概述

本指南涵盖 OpenClaw 代理中的对话压缩和摘要失败,基于 src/agents/compaction.ts。随着对话增长,OpenClaw 使用 LLM 驱动的摘要将上下文保持在模型限制内。当此操作失败时,代理可能停止响应或产生错误。

症状

摘要错误

  • 日志消息: "Full summarization failed"
  • 日志消息: "Partial summarization also failed"
  • 代理使用最小降级摘要继续

上下文窗口超限

  • LLM 提供者返回上下文长度错误
  • token 计数超过模型最大值
  • API 调用期间消息被拒绝

代理停止响应

  • 长对话后无响应
  • 代理日志中有关消息处理的错误
  • 多次交互后会话似乎冻结

超大消息警告

  • 日志条目指示特定消息过大
  • 消息从摘要中排除
  • 降级注释添加到摘要中

根本原因

1. 超大消息(第 236-247 行)

单个消息对于摘要来说太大:

function isOversizedForSummary(message: ConversationMessage): boolean {
  const estimate = estimateTokens(message);
  // 消耗上下文显著部分的消息
  return estimate > OVERSIZED_THRESHOLD;
}

检测: 每条消息的 token 估计 阈值: 基于上下文窗口大小配置 影响: 消息从摘要中排除,在降级中注明

2. LLM API 错误

摘要请求期间的提供者端失败:

常见原因:

  • LLM API 网络超时
  • 速率限制(429 错误)
  • 模型不可用(503 错误)
  • 无效的 API 凭据

恢复: 使用退避自动重试

3. 中止信号触发

摘要的外部取消:

常见原因:

  • 用户取消代理操作
  • 会话超时
  • 系统关闭信号

恢复: 立即降级,不重试

恢复机制

渐进式降级系统(第 205-272 行)

OpenClaw 实现三层降级策略: