






















默认情况下,OpenClaw 使用的是传统上下文引擎,当对话变长时会截断或滑动清除旧消息。一旦这些消息消失,代理就彻底失去了对早期上下文的访问能力。这对于长期项目、复杂的调试会话,或任何跨越数天至数周的对话来说,都是一个根本性问题。
Lossless-Claw 插件用一种根本不同的方式解决这个问题:
结果:可以运行数百甚至数千轮对话,而代理永远不会"遗忘"之前发生的事。
openclaw plugins install @martian-engineering/lossless-claw
git clone https://github.com/Martian-Engineering/lossless-claw.git
openclaw plugins install --link ./lossless-claw
这一步必须。不执行的话插件加载了但不运行——默认的 legacy 引擎仍然生效。
openclaw config set plugins.slots.contextEngine lossless-claw
openclaw plugins list
你应该看到 lossless-claw 列为已启用,且 contextEngine 槽位已分配给它。
openclaw plugins update @martian-engineering/lossless-claw
# 或者一次性更新所有插件:
openclaw plugins update --all
传统上下文管理是线性的:保留最新的 N 条消息,丢弃其余。LCM 则构建一棵树:
原始消息: [m1] [m2] [m3] ... [m20] [m21] ... [m40] ... [m80] ... [m100]
↓ 分块 ↓ 分块 ↓ 分块
叶子(d0): [leaf_1: m1-m20] [leaf_2: m21-m40] [leaf_3: ...] [leaf_4: ...]
↓ ↓
凝聚(d1): [cond_1: leaf_1 + leaf_2] [cond_2: leaf_3 + leaf_4]
↓ ↓
凝聚(d2): [cond_3: cond_1 + cond_2]
↑
仍可展开
每个节点都携带元数据:时间范围、token 数量、后裔数量、源引用。代理在上下文窗口中看到的是摘要,通过检索工具可以深入任意节点获取完整细节。
引擎钩入 OpenClaw 对话流程的四个关键点:
| 阶段 | 发生什么 |
|---|---|
每次摘要尝试都遵循一个保证进度的降级链:
[Truncated for context management] 标记即使摘要模型宕机或返回垃圾,压缩也会成功。
当消息中的文件(代码粘贴、日志转储等)超过 largeFileTokenThreshold(默认 25,000 tokens)时:
~/.openclaw/lcm-files/)lcm_describe 获取完整文件这防止单个大粘贴把整个上下文窗口吃光。
用 openclaw config edit 打开配置,在 plugins.entries.lossless-claw.config 下添加设置:
{
"plugins": {
"slots": {
"contextEngine": "lossless-claw"
},
"entries": {
"lossless-claw": {
"enabled": true,
"config": {
// 所有字段都是可选的 — 默认值都很合理
}
}
}
}
}
所有设置也可通过环境变量覆盖(前缀 LCM_,如 LCM_FRESH_TAIL_COUNT=32)。环境变量优先级最高。
| 参数 | 默认值 | 说明 |
|---|---|---|
| 参数 | 说明 |
|---|---|
通用(平衡型):
{
"contextThreshold": 0.75,
"freshTailCount": 32,
"incrementalMaxDepth": -1
}
长期运行会话(数百轮):
{
"contextThreshold": 0.8,
"freshTailCount": 32,
"incrementalMaxDepth": 2
}
成本敏感(最小化摘要调用):
{
"contextThreshold": 0.85,
"freshTailCount": 16,
"summaryModel": "anthropic/claude-haiku-4-5"
}
LCM 激活后会注册三个工具,代理可随时调用来检索压缩的上下文:
lcm_grep({ pattern: "database migration", mode: "full_text" })
lcm_grep({ pattern: "error.*timeout", mode: "regex", scope: "messages" })
lcm_grep({ pattern: "deployment", since: "2026-03-01", limit: 20 })
messages、summaries 或 bothsince/before 按时间范围过滤lcm_describe({ id: "sum_abc123" })
lcm_describe({ id: "file_xyz789" })
lcm_expand_query({
prompt: "我们在 users 表的 SQL 迁移上具体讨论了什么?",
summaryIds: ["sum_abc123"]
})
lcm_grep 或 lcm_describe 不够用时使用| 需求 | 工具 | 原因 |
|---|---|---|
┌─────────────────────┐
│ OpenClaw Gateway │
└──────────┬──────────┘
│
┌────────▼────────┐
│ Agent Runtime │
└────────┬────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌───────▼───────┐ ┌───────▼───────┐ ┌───────▼───────┐
│ Bootstrap │ │ Assemble │ │ After Turn │
│ (session sync) │ │ (build prompt)│ │ (persist + │
│ │ │ │ │ compact?) │
└───────┬───────┘ └───────┬───────┘ └───────┬───────┘
│ │ │
└──────────────────┼───────────────────┘
│
┌────────────▼────────────┐
│ SQLite Database │
│ ┌──────────────────┐ │
│ │ messages │ │
│ │ summaries (DAG) │ │
│ │ context_items │ │
│ │ large_files │ │
│ └──────────────────┘ │
└─────────────────────────┘
│
┌─────────────┼─────────────┐
│ │ │
┌─────▼─────┐ ┌────▼────┐ ┌─────▼──────┐
│ lcm_grep │ │lcm_desc │ │lcm_expand │
│ (search) │ │(inspect)│ │(sub-agent) │
└───────────┘ └─────────┘ └────────────┘
Bootstrap 系统通过字节偏移和条目哈希追踪对账进度。如果 OpenClaw 在会话中途崩溃,下次启动会精确地从中断处继续——无重复摄入,无消息丢失。
扩展系统使用带 TTL 和显式撤销的作用域委托授权。子代理获得精确所需的对话的只读访问权限,在完成或超时时自动清理。
每条消息都被持久化。摘要链接回源消息。代理永远可以通过 lcm_expand_query 恢复完整细节。这与滑动窗口截断有本质区别——旧上下文一去不返。
深度感知的摘要提示词在不同层级产生不同风格的摘要: - 叶子摘要 保留具体决定、命令、错误和理由 - 中级摘要 提取主题、关键决定和未解决的张力 - 高层摘要 捕获会话弧线、重大转折点和长期约束
可以用便宜模型做摘要(如 Haiku),主对话保持在高级模型(如 Opus)。summaryModel 和 expansionModel 设置让这变得明确。
Bootstrap 系统追踪字节偏移和对账进度,崩溃后可精确恢复。
扩展系统用 TTL 和显式撤销确保子代理只读访问精确所需的对话。
Glob 模式让你排除嘈杂会话(cron、心跳)的存储,同时将子代理会话标记为无状态——享受父上下文的好处但不污染数据库。
摘要质量取决于生成它的模型。用太便宜或太小的模型做摘要可能会丢失细节。即使是好的模型,重要细节也可能被压缩掉——lcm_expand_query 可以缓解,但会增加延迟。
lcm_expand_query 会启动子代理,需要 30-120 秒。快速检索用 lcm_grep 和 lcm_describe 快得多但能力有限。在时间敏感的 workflow 中,代理可能跳过扩展,仅凭摘要工作。
SQLite 数据库随每条消息增长。长期重型会话(数千轮带大工具输出)可能产生数百兆的数据库。外部化到磁盘的大文件进一步增加。目前没有内置垃圾回收或保留策略——旧对话永久保留。
每次摘要使用一次模型调用。没有集成或验证步骤。如果模型在摘要过程中产生幻觉或误解上下文,错误会传播到 DAG 并可能影响未来的组装。
每个对话在数据库中独立。LCM 不会在不同会话或代理间自动共享上下文。检索工具上的 allConversations 标志允许跨对话搜索,但组装时没有自动跨-pollination。
FTS5(SQLite 全文搜索引擎)对中文、日文、韩文的分词效果不佳。LCM 回退到 CJK 查询的 LIKE 搜索,在大型数据库上更慢且精度更低。
每次压缩需要 LLM 调用(通常每叶子或凝聚步骤 5-15 秒)。重度压缩时会在回合完成后产生明显延迟。afterTurn 钩子按会话串行化压缩,不会阻塞其他会话。
检查上下文引擎槽位是否设置:
openclaw config get plugins.slots.contextEngine
必须返回 lossless-claw。如果是 legacy 或为空,则设置:
openclaw config set plugins.slots.contextEngine lossless-claw
如果看到 LcmProviderAuthError,摘要所用模型无法认证。检查:
- summaryModel 是否设为你有访问权限的模型?
- 提供商是否需要单独的 API 密钥?
- 尝试取消设置 summaryModel,回退到会话模型。
默认:~/.openclaw/lcm.db。可通过 dbPath 配置或 LCM_DB_PATH 环境变量覆盖。
直接检查数据库:
sqlite3 ~/.openclaw/lcm.db ".tables"
sqlite3 ~/.openclaw/lcm.db "SELECT COUNT(*) FROM messages"
sqlite3 ~/.openclaw/lcm.db "SELECT id, kind, depth, token_count FROM summaries ORDER BY created_at DESC LIMIT 10"
清空并重新开始(删除所有持久化上下文):
rm ~/.openclaw/lcm.db
rm -rf ~/.openclaw/lcm-files/
数据库和文件存储会在下次会话启动时重建。
A: 不需要。安装并激活后,LCM 在后台静默运行。正常对话工作流完全不变。代理自动管理上下文组装和压缩。只有在想检索特定历史细节时才需要使用检索工具(lcm_grep、lcm_describe、lcm_expand_query)。
A: 正常对话中影响很小。某些回合后压缩运行时你可能会注意到 5-15 秒的停顿——但这发生在后台,不会阻塞你。lcm_grep 和 lcm_describe 很快(<100ms)。只有 lcm_expand_query 慢(30-120 秒),但这是设计如此。
A: 可以。将 summaryModel 设为 anthropic/claude-haiku-4-5 等更便宜的模型。主对话可以继续用 Opus 或 Sonnet,摘要通过 Haiku 路由。这是 LCM 最实用的成本控制功能之一。
A: LCM 使用三级降级链:Normal → Aggressive → Deterministic(截断)。即使摘要模型完全宕机,deterministic fallback 也能保证压缩成功。
A: 默认情况下子代理是无状态的,从父上下文读取。你可以通过配置 statelessSessionPatterns 来控制哪些子代理写入 vs. 只读。除非显式配置,否则子代理不会污染数据库。
A: 超过 25,000 tokens 的文件外部化到磁盘(~/.openclaw/lcm-files/),用约 200 tokens 的结构摘要替换。使用 lcm_describe 可以按需检索完整文件内容。
A: 所有数据保留在本地。SQLite 数据库和外部化文件位于你机器上的 ~/.openclaw/。不会将数据发送到任何外部服务。
LCM 将 OpenClaw 从一个健忘的聊天机器人变成了真正的长期记忆系统。如果你从事复杂项目、与 AI 助手保持持续对话,或者只是讨厌讨论变长时丢失上下文——这个插件是必备的。
从这里开始:
1. 安装:openclaw plugins install @martian-engineering/lossless-claw
2. 激活:openclaw config set plugins.slots.contextEngine lossless-claw
3. 验证:openclaw plugins list
4. 完成。下一个对话就开始构建 DAG 了。
专业提示: 成本敏感的设置,在配置中添加 "summaryModel": "anthropic/claude-haiku-4-5"。摘要调用随时间累积,而 Haiku 能以很低成本很好地处理这个任务。
延伸阅读: - Lossless-claw 仓库 - OpenClaw 插件架构 - 构建 OpenClaw 插件 - 上下文引擎概念
本文基于官方 LCM 插件(Lossless Context Management)文档生成。最新信息请查阅 GitHub 仓库。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。