# 这是什么
Lossless Claw 是 OpenClaw 的 无损上下文管理插件,基于 Voltropy 的 LCM 论文。它替换掉 OpenClaw 原生的滑动窗口截断(聊到一定长度就扔旧消息),改用一种 DAG(有向无环图)摘要系统:每条消息都永久保留在 SQLite 里,上下文窗口只装摘要,需要细节时随时展开。
# 对比:有 vs 没有
对话超过上下文窗口(例如 200k tokens)后,最早的消息被直接丢弃。
结果:你问我三天前的架构分析,我只能说"抱歉我忘了"——哪怕当时讨论了好几个小时。你得重新发一遍。
每条消息存 SQLite,超出窗口时用 LLM 自动压缩成摘要。上下文里只放摘要+最近消息,需要细节可以随时展开。
结果:你问我三天前的架构分析,我不仅记得,还能展开到细节。你没有任何重复劳动。
# 工作原理
核心流程
- 持久化:每一条消息写入 SQLite 数据库,按会话组织
- 摘要叶节点:上下文窗口快满时,用配置的 LLM 把最早的 N 条消息压缩成一条摘要(leaf summary),称为 d1 节点
- 摘要层叠压缩:随着对话继续,多条 d1 摘要再压缩成一条更上层的 d2 节点,d3、d4 同理——形成一个 DAG
- 上下文组装:每轮对话从 DAG 顶层取摘要 + 最近原始消息,拼成给模型的 prompt
- 按需展开:agent 可以调用
lcm_expand/lcm_grep/lcm_describe工具,翻出摘要背后的原始消息细节
DAG 结构示意
# 关键特性
- 无损:原始消息永不被删除,随时可从摘要展开到原始内容
- 多层级压缩:d1(原始摘要)→ d2(压缩摘要)→ d3+(更高层抽象),无上限
- 三种查询工具:
lcm_grep(全文搜索)、lcm_describe(描述节点)、lcm_expand(展开节点到细节) - 延迟压缩:当 provider 缓存尚热时,把压缩推迟到维护阶段,避免打断对话流畅度
- 缓存感知:检测 Anthropic / 其他 provider 的缓存 TTL,在缓存有效期内不做压缩
- 无状态会话:子 agent 等临时会话可以读取历史但不写入 LCM,不会污染数据库
- 大文件处理:>25k token 的文件块自动拦截,单独存储和摘要
- 会话迁移:自带 CLI 工具,可将现有 JSONL 会话文件倒入 LCM 数据库
- 终端 TUI:Go 写的终端界面,支持摘要修复、重写、跨对话复制
# 实际场景演示
场景一:跨天项目讨论
第 1 天:你发了一份项目的技术文档,让我分析架构设计,给了详细拆解(~100 条消息)。
第 3 天:问了上千条别的之后,你问"那个数据库分库方案确定用 sharding 还是按租户隔离?"
超出窗口,信息已丢弃。我只能道歉让你重发。
上下文里自动放了摘要:"讨论了数据库架构,两方案对比:sharding(跨租户查询复杂、运维成本高)vs 按租户隔离(更适合≤100 租户场景),最后推荐后者。"
如果还不够,我调 lcm_expand 展开到原始细节。
场景二:当前对话
你明天接着问:"昨天查的 Lossless Claw 最新版本多少?"
要么希望 memory 碰运气存了,要么你重说一遍。
摘要里有:"用户于 2026-07-28 查询 Lossless Claw,4.9k stars,最新兼容 OpenClaw 2026.5.12+,0.10.x 版本。关键功能:DAG 摘要、延迟压缩、session 迁移 CLI"。展开到更细也不在话下。
# 安装与配置
一行安装
安装后会自动替换 OpenClaw 的原生上下文引擎。之后重启 gateway 即生效。
推荐起步配置
或用插件配置等价的 JSON:
可用命令
/lossless— 查看版本、状态、数据库大小、摘要健康度/lossless backup— 备份当前 LCM 数据库/lossless rotate— 压缩当前会话 transcript,不换 session/lossless doctor— 扫描并修复损坏的摘要/lcm— 短别名,效果同上
# 版本兼容
| Lossless Claw 版本 | 最低 OpenClaw 版本 | 说明 |
|---|---|---|
| ≥ 0.10.0 | 2026.5.12 | 需要 api.runtime.llm.complete 摘要能力 |
| memory supplement 支持 | 2026.5.28 | 需要 buildMemorySystemPromptAddition |
| 最新配置文档 | 2026.5.22 | 需要 context-engine 运行时能力校验 |
如果 OpenClaw 版本较低,可以停留在 lossless-claw@0.9.4 并去掉 0.10.x 专属配置。