关于 memory-dag-compactor
Memory DAG Compactor 将 MEMORY.md 条目整理为多层摘要图,同时保留原始条目。它适用于需要跨会话检索上下文的 Agent,并支持检查、搜索和撤销摘要合并。
主要功能
- 01构建分层 DAG 摘要
- 02保留原始 MEMORY.md 条目
- 03搜索原始条目和各层摘要
- 04检查 DAG 结构与摘要溯源
- 05撤销摘要合并
适用场景
- 01压缩不断增长的 Agent 记忆
- 02从记忆摘要中查找细节
- 03查看摘要与源条目的关联
- 04撤销不合适的摘要合并
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ archieindian/ openclaw-superpowers --skill memory-dag-compactor安装后在 Claude Code 中输入/memory-dag-compactor确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
compact.pyexample-state.yamlSTATE_SCHEMA.yaml详细介绍
Memory DAG Compactor
功能
标准的记忆压缩有损——较早的条目会被截断,细节也会永久消失。Memory DAG Compactor 用受 lossless-claw 的 Lossless Context Management 方法启发的**有向无环图(DAG)**分层摘要,取代扁平压缩。
DAG 的每一层深度都使用专门设计的提示词,并针对相应的抽象层级进行优化:
| 深度 | 名称 | 保留内容 | 时间线粒度 |
|---|---|---|---|
| d0 | 叶节点 | 文件操作、时间戳、具体操作、错误 | 小时 |
| d1 | 精简 | 相较之前的上下文发生了哪些变化、做出的决定 | 会话 |
| d2 | 脉络 | 目标 → 结果 → 后续延续内容 | 天 |
| d3+ | 长期 | 闲置数周后仍有价值的长期上下文 | 日期范围 |
原始 MEMORY.md 条目绝不会被删除——它们只会被整理成可搜索的多层摘要层级。
何时调用
- 每晚 11 点自动运行(cron)——压缩当天的记忆条目
- MEMORY.md 超过可配置的阈值时(默认值:200 个条目)
- 执行长时间运行的任务之前——确保记忆精简且可搜索
- Agent 对本应存在于记忆中的内容表示“我不记得了”时
使用方法
python3 compact.py --compact # Run leaf + condensation passes
python3 compact.py --compact --depth 0 # Only leaf summaries (d0)
python3 compact.py --compact --depth 2 # Condense up to d2 arcs
python3 compact.py --status # Show DAG stats and health
python3 compact.py --tree # Print the summary DAG as a tree
python3 compact.py --search "deployment issue" # Search across all depths
python3 compact.py --inspect <summary-id> # Show a summary with its children
python3 compact.py --dissolve <summary-id> # Reverse a condensation
python3 compact.py --format json # Machine-readable output
操作步骤
步骤 1 — 运行压缩
python3 compact.py --compact
压缩器会:
- 读取 MEMORY.md 中的所有条目
- 将条目分组为若干块(默认:每个叶节点 20 个条目)
- 生成保留操作细节的 d0 叶节点摘要
- 当叶节点数量超过分支数(默认值:5)时,将其精简为 d1 摘要
- 在每个深度重复精简,直到 DAG 符合预算
- 将摘要 DAG 写入状态
步骤 2 — 跨深度搜索记忆
python3 compact.py --search "API migration"
搜索原始条目和所有深度的摘要。结果按相关性和深度排序——更深层的摘要(d0)更加详细,较浅层的摘要(d3+)则提供整体概览。
步骤 3 — 检查和修复
python3 compact.py --tree # Visualize the full DAG
python3 compact.py --inspect s-003 # Show summary with lineage
python3 compact.py --dissolve s-007 # Reverse a bad condensation
按深度设计提示词
d0(叶节点)— 操作细节
保留:时间戳、文件路径、运行过的命令、错误消息、具体数值。舍弃:对话中的冗余内容、重复尝试、冗长的工具输出。
d1(精简)— 会话上下文
保留:相较之前状态发生的变化、做出的决定及其原因、遇到的阻碍。舍弃:单个文件的细节、精确时间戳、中间步骤。
d2(脉络)— 从目标到结果的脉络
保留:目标定义、最终结果、后续延续内容、未解决的问题。舍弃:会话级细节、单项决策、使用过的具体工具。
d3+(长期)— 长期上下文
保留:项目身份、架构决策、用户偏好、重复出现的模式。舍弃:闲置 2 周后便不再重要的任何内容。
配置
| 参数 | 默认值 | 描述 |
|---|---|---|
chunk_size | 20 | 每个叶节点摘要包含的条目数 |
fanout | 5 | 触发精简前允许的最大子节点数 |
max_depth | 4 | DAG 的最大深度 |
token_budget | 8000 | 组装上下文的目标 token 数 |
状态
DAG 结构、摘要内容和谱系信息存储在 ~/.openclaw/skill-state/memory-dag-compactor/state.yaml。
字段:last_compact_at、dag_nodes、dag_edges、entry_count、compact_history。
备注
- 从不修改或删除 MEMORY.md——DAG 是覆盖在其上的结构
- 每个摘要都包含
[Expand for details about: ...]页脚,列出被压缩的内容 - Dissolve 会撤销精简,将子摘要恢复到活动集合中
- 灵感来自 lossless-claw 基于 DAG 的摘要层级和按深度设计的提示词系统