上下文溢出 3 层恢复模式
OpenClaw 实现了一个复杂的 3 层恢复策略,用于处理 agent 执行期间的上下文溢出错误。
位置
src/agents/pi-embedded-runner/run.ts:684-845
常量
恢复层级
第 1 层:检测
检测溢出错误来自:
- 提供商错误响应
- SDK 自动压缩失败
- 令牌限制超出消息
第 2 层:自动压缩
最多 3 次尝试压缩会话:
压缩策略:
- 使用
trigger: "overflow"调用compactEmbeddedPiSessionDirect() - 递增全局尝试计数器
- 成功时:重试提示
- 失败时:进入第 3 层
第 3 层:工具结果截断
对于有超大工具结果的会话:
截断策略:
- 识别超过上下文窗口显著部分的工具结果
- 截断超大结果,同时保留元数据
- 不重置
overflowCompactionAttempts(保持全局上限强制执行)
第 4 层:中止并报错
如果所有恢复尝试都失败:
面向用户的消息:
- 清晰解释问题
- 可操作的建议:
/reset、/new或更大模型 - 保留错误元数据以供调试
诊断日志
每个溢出事件生成一个诊断 ID: