Compaction OpenClaw 策略 整理

1618 words
8 minutes
Compaction OpenClaw 策略 整理

Compaction_OpenClaw_策略#

问题#

Compaction_OpenClaw_策略

标准回答#

当对话历史太长、裁剪不够用时:Compaction(压缩)及 OpenClaw 策略#

Compaction(压实/压缩):当裁剪(直接丢早期消息)已经不够用时,换用? LLM 把一大段对话历史压缩成一段精炼摘要,用摘要替换原始消息。这样大幅缩减 token 占用,但关键信息(决策、待办、结论)仍保留。

OpenClaw 的 Compaction 核心流程(4 步)分块 (Chunking):按 token 预算切分消息(默认 2 段),保留最近 3 轮对话原文,只压缩更早的历史。 逐块摘要:每个 chunk 分别发给 LLM 生成摘要;若单条消息超大(>50% 窗口),降级处理(跳过超大消息并标注省略)。 合并摘要:再次调用 LLM 将多段局部摘要融合成一份最终摘要,要求保留:任务状态、进度、用户最后请求、决策及原因、待办、约束条件。 摘要增强:追加额外上下文,包括工具调用失败记录(exit code + error)、文件操作记录、最近几轮原文摘要、从 AGENTS.md 提取的关键规则。

最终摘要替换原始消息并写回会话历史。设计理念:宁可多花 token 调用 LLM 做摘要,也不丢关键信息。


扩展知识#

1. 摘要质量检查与重试#

  • 质量审计(默认关闭,需显式启用)检查摘要是否包含 5 个必要章节:DecisionsOpen TODOsConstraints/RulesPending user asksExact identifiers
  • 启用后若审计失败,会触发重试(最多 3 次)。
  • 即使未启用审计,prompt 也会要求结构化章节。

2. 标识符严格保留策略#

LLM 容易把 UUID、文件路径、API key 等概括掉。OpenClaw 默认采用 strict 策略,要求摘要中原样保留所有不可重构的标识符(如文件名、URL、hash、端口等),并在摘要中包含 Exact identifiers 章节。

3. Memory Flush 联动#

在接近 Compaction 阈值时,会先触发一次额外 Agent 轮次(Memory Flush),让模型主动把重要信息写入 memory/YYYY-MM-DD.md 长期存储。相当于“考前再检查一遍”,防止压缩丢失关键信息。

4. Post-compaction Context 注入#

压缩完成后,从 AGENTS.md 重新注入 “Session Startup” 和 “Red Lines” 两部分,避免模型遗忘红线规则。

5. 工具调用失败信息保留#

Compaction 会专门提取并保留工具调用失败信息(exit code + error)。避免 Agent 压缩后重复尝试已知不可行的路径。


面试官追问#

Q1:Compaction 本身也要调 LLM,token 开销大吗?#

A:单次 Compaction 消耗几千 token,但能把几万 token 的历史压缩到几千 token 的摘要,后续每轮都省大量 token。长对话收益显著,总 token 消耗远低于不做压缩。

Q2:分段摘要的 chunk 大小怎么定?#

A:按模型 Context 窗口的 40% 为基准,自适应调整(最低 15%),预留约 4096 token 给摘要 prompt。在消息边界切分,不跨消息。跨 chunk 的上下文关联靠合并摘要阶段弥补。

Q3:Compaction 触发时机?#

A:按 token 数触发,每次组装 prompt 前计算当前历史占比,超过阈值即触发。不用固定轮次,因为每轮长度差异大。

Q4:strict 策略保留标识符会不会导致摘要膨胀?#

A:会,但标识符通常只占几十 token,相比丢失标识符后任务失败再重试的代价,成本低得多。过时标识符可在 Memory Flush 阶段由 Agent 主动清理。

关键点#

  • 当对话历史太长、裁剪不够用时:Compaction(压缩)及 OpenClaw 策略#

Compaction(压实/压缩):当裁剪(直接丢早期消息)已经不够用时,换用 LLM 把一大段对话历史压缩成一段精炼摘要,用摘要替换原始消息。

  • 这样大幅缩减 token 占用,但关键信息(决策、待办、结论)仍保留。
  • OpenClaw 的 Compaction 核心流程(4 步)分块 (Chunking):按 token 预算切分消息(默认 2 段),保留最近 3 轮对话原文,只压缩更早的历史。
    1. 逐块摘要:每个 chunk 分别发给 LLM 生成摘要;若单条消息超大(>50% 窗口),降级处理(跳过超大消息并标注省略)。
    1. 合并摘要:再次调用 LLM 将多段局部摘要融合成一份最终摘要,要求保留:任务状态、进度、用户最后请求、决策及原因、待办、约束条件。

备注#

  • 本文已做格式统一与噪声清理,保留原始语义。
  • 问题#

Compaction_OpenClaw_策略

Compaction(压实/压缩):当裁剪(直接丢早期消息)已经不够用时,换用 LLM 把一大段对话历史压缩成一段精炼摘要,用摘要替换原始消息。这样大幅缩减 token 占用,但关键信息(决策、待办、结论)仍保留。

  • OpenClaw 的 Compaction 核心流程(4 步)分块 (Chunking):按 token 预算切分消息(默认 2 段),保留最近 3 轮对话原文,只压缩更早的历史。

    1. 逐块摘要:每个 chunk 分别发给 LLM 生成摘要;若单条消息超大(>50% 窗口),降级处理(跳过超大消息并标注省略)。
    1. 合并摘要:再次调用 LLM 将多段局部摘要融合成一份最终摘要,要求保留:任务状态、进度、用户最后请求、决策及原因、待办、约束条件。
    1. 摘要增强:追加额外上下文,包括工具调用失败记录(exit code + error)、文件操作记录、最近几轮原文摘要、从 AGENTS.md 提取的关键规则。
  • 本文已做格式统一与噪声清理,保留原始语义。

  • LLM 把一大段对话历史压缩成一段精炼摘要,用摘要替换原始消息。这样大幅缩减 token 占用,但关键信息(决策、待办、结论)仍保留。

  • OpenClaw 的 Compaction 核心流程(4 步)

    1. 分块 (Chunking):按 token 预算切分消息(默认 2 段),保留最近 3 轮对话原文,只压缩更早的历史。
    1. 逐块摘要:每个 chunk 分别发给 LLM 生成摘要;若单条消息超大(>50% 窗口),降级处理(跳过超大消息并标注省略)。
    1. 合并摘要:再次调用 LLM 将多段局部摘要融合成一份最终摘要,要求保留:任务状态、进度、用户最后请求、决策及原因、待办、约束条件。
  • 本文已做格式统一与噪声清理,保留原始语义。

Share Article

If this article helped you, please share it with others!

Related Posts Smart
1
OpenClaw Agent Runner 工作阶段整理
求职作战室 # OpenClaw 的 Agent Runner 是如何工作的?一次 Agent 运行经历了哪些阶段? ## 核心回答 Agent Runner 是 OpenClaw 的核心调度器(指挥中心),负责协调 LLM 调用、工具执行、错误处理等
2
长上下文openclaw如何处理 整理
求职作战室 # 长上下文openclaw如何处理 ## 问题 长上下文openclaw如何处理 ## 标准回答 LLM的上下文窗口有限,长对话时容易"爆窗",导致请求失败或Agent"失忆"。 OpenClaw的四层防护机制 Context Pruni
3
Context Window 核心约束与处理策略 整理
求职作战室 # Context_Window_核心约束与处理策略 ## 问题 Context_Window_核心约束与处理策略 ## 标准回答 # Agent 的 Context Window:核心约束与处理策略 ## 什么是 Context Wind
4
当对话历史实在太长、裁剪也不够用时,还有什么办法?什么是 Compaction?OpenClaw 的 Compaction 策略是怎样的? 整理
求职作战室 # 当对话历史实在太长、裁剪也不够用时,还有什么办法?什么是 Compaction?OpenClaw 的 Compaction 策略是怎样的? ## 问题 当对话历史实在太长、裁剪也不够用时,还有什么办法?什么是 Compaction?Op
5
Context Engine Abstraction 整理
求职作战室 # Context_Engine_Abstraction ## 问题 Context_Engine_Abstraction ## 标准回答 # OpenClaw 的可插拔 Context Engine:为什么需要抽象? 支持哪些策略? **
Random Posts Random
Profile Image of the Author
Estars
这条路要走完,才能看到世界的终点,是海纳百川,还是星火燎原。
公告
欢迎来到我的博客!这是一则示例公告。
Music
Cover

Music

No playing

0:00 0:00
No lyrics available
Categories
Tags
Site Statistics
Posts
91
Categories
5
Tags
44
Total Words
374,063
Running Days
0 days
Last Activity
0 days ago

Table of Contents