返回目录
Agent 与会话 插件

SuperLcm-Lossless-Context

ygc3817922006-sketch/SuperLcm-Lossless-Context

SuperLcm — Lossless Context for DeepSeek Harness: fully asynchronous, cache-friendly compaction with exact recall.

Stars
2
Forks
1
Issues
0
更新
今天

PROJECT TOPICS

项目标签

INSTALL REFERENCE

安装参考

未验证
dsh plugin --profile web add github:ygc3817922006-sketch/SuperLcm-Lossless-Context

该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。

PROJECT README

README

SuperLcm — Lossless Context

English · Releases · LCM 论文

CI Release License

SuperLcm 是 DeepSeek Harness(DSH)的异步上下文压缩与无损召回插件。它不把一段长对话永久替换成一个不可追溯的扁平摘要,而是保留 DSH 原始事件日志,建立分层摘要 DAG,并让 Agent 在需要时搜索、定位、展开之前的精确上下文。

main 当前版本:0.3.0-alpha.10;最新公开 Release 仍为 0.3.0-alpha.9。建议固定 DSH 与插件版本,在独立 profile 验证后再启用到主工作区。

LCM 官方交互式动态讲解

点击上图打开论文团队的 LCM 官方交互式动态讲解

官方页面并不是一个独立的 MP4/WebM 视频,而是由网页脚本驱动的滚动交互动画;GitHub README 不能运行外部网页脚本。因此这里直接加载官方预览并链接到原始动态页面,同时在仓库内提供一份原生 GIF,把 SuperLcm 实际采用的流程完整展示出来:

SuperLcm LCM 原理动画

目录

五个核心目标

  1. 展示并实现 LCM 原理:原文永久留在 DSH 事件日志中;摘要形成层级 DAG;摘要节点保留精确源事件指针。
  2. 异步压缩,不阻塞对话:独立 Worker 和独立模型在后台准备摘要,当前 Agent 回复不等待压缩模型。
  3. 持续保持较少的活动上下文:旧历史进入 checkpoint,主模型只携带稳定摘要、必要原文和 fresh tail。
  4. 缓存更稳定、成本更低:冻结 system/checkpoint 前缀,减少前缀重写;更短的活动请求也减少输入 token 与 cache write 体积。
  5. 摘要可搜索,原文可精确取回:SQLite 只做可重建索引,lcm_expand 最终返回的是 DSH 原始事件,而不是摘要的二次转述。

1. LCM 的原理

SuperLcm 受 Clint Ehrlich 与 Theodore Blackman 的论文 LCM: Lossless Context Management 启发。推荐先看论文团队制作的 官方交互式动态讲解;论文也可在 arXiv:2605.04050 阅读。

传统压缩通常是:

原始消息 1 … 100  ──压缩──>  一个扁平摘要
                                  │
                                  └─ 摘要遗漏的细节通常无法再定位

LCM 的方式是:

DSH append-only event log(原始真源,始终保留)
   │
   ├─ events 101–130 ─> S0-A ─┐
   ├─ events 131–160 ─> S0-B ─┼─> S1-A ─┐
   ├─ events 161–190 ─> S0-C ─┘         ├─> 更高层摘要
   └─ recent events ─────────────────────┘

每个摘要节点都保留:node_id、child_ids、source event seqs

这意味着上下文可以递归压缩,但不是把过去抹掉:

  • 低层摘要覆盖一段原始事件;
  • 高层摘要可以覆盖多个低层摘要;
  • 每一层都保留向下的 DAG 边;
  • 最底层节点保留精确的 DSH event.seq
  • 需要细节时,Agent 沿节点和序号回到原始事件。

SuperLcm 不把摘要当成原文。摘要负责导航和筛选,DSH Event Log 才是最终证据。


2. 全面异步压缩:不阻塞对话

传统同步压缩把“等摘要模型完成”放在用户请求的关键路径上。上下文越长、压缩模型越慢,用户越容易看到明显停顿。

SuperLcm 的自动压缩只接受:

mode: rolling
foldTiming: background

完整流程:

sequenceDiagram
    participant U as 用户
    participant A as 当前 Agent
    participant W as 后台压缩 Worker
    participant S as DSH Session Log
    participant DB as SQLite 索引

    U->>A: 继续对话
    A-->>U: 正常回复,不等待压缩
    A->>W: 提交稳定历史快照
    W->>W: 独立 provider/model 生成摘要
    W->>S: 原子写入 start → summary → checkpoint → end
    S->>DB: 成功事务完成后增量索引

关键点:

  • 当前回复不 await 摘要模型。自动压缩路径不会把后台模型耗时加到当前对话延迟里。
  • 使用独立 provider/model。后台任务绝不偷偷回退到当前 Agent 或 custom-subagent 的模型。
  • 独立 AbortController。当前请求结束不会无条件取消已经安全启动的摘要工作。
  • 先固定快照,再生成摘要。尾部可以继续增长;如果选中的历史区间被改写,结果会被丢弃并重新准备,不会覆盖错误范围。
  • 提交是原子的。只接受完整的 compaction/start → compaction/summary → checkpoint user/message → compaction/end 生命周期。
  • 压缩计算本身并没有凭空变快。节省的是用户等待压缩的时间:计算提前在后台完成,离开当前回复的关键路径。

默认策略会原样保留最近 24 个 surface node 和至少 32k fresh token;64k 左右的安全历史批次可以提前在后台准备。ready 摘要只有在 soft/hard pressure 或 overflow 需要释放上下文时才提交到活动 surface。


3. 持续保持较少的活动上下文

长上下文容量大,不等于每一轮都应该把所有历史重新发送给模型。

SuperLcm 把上下文分为三部分:

冻结前缀:SYSTEM + CHECKPOINT 01 + CHECKPOINT 02 + …
可压缩区:较新的 raw history
新鲜尾部:最近消息、工具调用和当前任务状态

好处:

  • 减少无关历史干扰。模型更容易聚焦当前目标、约束和最近证据。
  • 保留输出空间。输入越小,留给推理、工具结果和最终回答的 token 余量越大。
  • 降低长上下文注意力稀释。旧细节不是消失,而是从“每轮强制携带”变成“相关时按需拉取”。
  • 延迟更稳定。每轮输入不再随着会话历史无限线性增长。
  • 重要细节仍能回来。摘要命中后,通过 lcm_expand 读取精确原始事件。

这里的目标不是把上下文压到越小越好,而是在 fresh tail、当前任务完整性和旧历史可召回之间保持有界平衡。


4. 缓存优化与更低的缓存成本

Prompt Cache 最依赖的是从请求开头开始逐字一致的最长前缀。如果每次压缩都重写最前面的摘要,后面的内容即使相同,也可能因为前缀变化而无法复用。

SuperLcm 使用冻结前缀:

SYSTEM · CHECKPOINT 01 · CHECKPOINT 02 │ RAW HISTORY │ FRESH TAIL
└──────────── 逐字冻结的缓存前缀 ────────────┘

规则:

  1. system message 不进入普通折叠范围;
  2. 已提交 checkpoint 默认不再改写;
  3. 新一轮压缩只处理冻结前缀之后的 raw history;
  4. 只有硬上限压力、且后段历史已经无法释放足够空间时,才允许低频合并旧 checkpoint;
  5. 不猜测供应商 Prompt Cache 的 TTL,也不依赖“等缓存变冷再压缩”。

成本收益来自两部分:

  • 更稳定的前缀:提高已有 Prompt Cache 内容继续命中的机会,减少反复 cache write;
  • 更短的活动上下文:每轮发送的输入 token、更改后的 uncached tail 和新写入缓存的体积都更小。

具体命中率、读缓存价格、写缓存价格和 TTL 由模型提供方决定,因此项目不宣称一个虚假的固定节省百分比。


5. LCM 怎么做到无损,并拉回以前的上下文

“无损”的准确含义

无损的是原始事件可恢复性和来源链,不是摘要文本本身逐字包含所有细节。

摘要 checkpoint
   │  marker: node_id + child_ids
   ▼
SQLite DAG node
   │  source_seqs: [101, 102, 103, ...]
   ▼
DSH append-only Session Event Log
   │
   └─ 精确原始 JSON 事件

每个提交后的摘要都会附带版本化机器标记:

<!-- dsh-lcm:v1:<base64url-json> -->

标记中包含稳定 node_id 和子摘要 child_ids。真正的原始事件序号来自成功的 DSH 压缩事务,而不是相信摘要文本里任意声称的 ID。SuperLcm 只从具有真实 compact-checkpoint source 的事件建立父子边,避免用户文本伪造 DAG。

从摘要拉回原文

  1. Agent 用 lcm_grep 搜索摘要和/或原始事件;
  2. lcm_describe 查看节点层级、父子关系和源事件范围;
  3. lcm_expand 根据 source_seqs 从当前 DSH Session Event Log 读取原始 JSON 事件;
  4. 单个事件太大时,通过 source_offsetevent_char_offset 继续分页,直到 next = null
  5. lcm_expand_query 可以先搜索多个摘要,再在一个共享字符预算内展开最相关原文。

因此主上下文可以只保留摘要,但旧消息、工具调用和结构化事件仍可精确回来。

为什么 SQLite 损坏也不会丢原文

DSH Event Log 是唯一原文真源;SQLite 是可删除、可重建的派生索引。SuperLcm 只索引完整成功的压缩生命周期:

compaction/start
    ↓
compaction/summary(带 marker 和 shadowedSeqs)
    ↓
user/message checkpoint(真实 compact source)
    ↓
compaction/end(无 error)
    ↓
写入 SQLite

不完整、失败、source 不匹配的事务不会进入索引。SQLite 丢失后,lcm_reindex 可以重新扫描 DSH 日志并恢复节点、边和精确序号。


SQLite 里到底放了什么

默认数据库:

~/.dsh/SuperLcm/lcm.sqlite

路径按当前操作系统解析,可用 DSH_SUPERLCM_DB 指定完整路径,或通过 DSH_HOME 改变 DSH 主目录;运行时代码使用 Node.js node:pathnode:os.homedir(),没有 macOS 专用路径。

表/索引 内容 是否存原始 transcript
lcm_nodes summary JSON/text、node ID、child IDs、source seqs、事件范围、模型、provider、状态
lcm_edges 当前 session 内的 parent → child DAG 边
lcm_nodes_fts 摘要文本的 FTS5 全文索引
lcm_scan_state 每个 session 的增量扫描高水位
lcm_index_state 旧版 committed-end cursor 的兼容迁移状态

数据库启用 WAL、事务写入和 (session_id, node_id) 复合身份:

  • 父会话和 fork 子会话不会互相覆盖;
  • 节点、边和 FTS 行一起事务更新;
  • SQLite 失败不会回滚已经成功写入的 DSH canonical transaction;
  • lcm_doctor 默认只读,只有显式 repair: true 才重建派生索引。

召回工具

工具 用途
lcm_grep 搜索摘要、原始事件或两者
lcm_describe 查看节点摘要、层级、来源、父子关系和模型信息
lcm_expand 按精确序号恢复原始事件,支持大事件分页
lcm_expand_query 搜索摘要并在共享预算内展开相关原文
lcm_reindex 从 DSH 事件日志增量刷新或重建 SQLite
lcm_doctor 检查 DAG、指针、缺失节点、悬空边和 SQLite 完整性

安装与启用

要求 Node.js 22.16+,并要求当前 DSH 仍提供官方 compaction、LLM、tools 和 session/event 接口。

安装公开 Release

Web profile:

dsh plugin --profile web add "https://github.com/ygc3817922006-sketch/SuperLcm-Lossless-Context/releases/download/v0.3.0-alpha.9/SuperLcm-0.3.0-alpha.9.tgz"

ACP profile:

dsh plugin --profile acp add "https://github.com/ygc3817922006-sketch/SuperLcm-Lossless-Context/releases/download/v0.3.0-alpha.9/SuperLcm-0.3.0-alpha.9.tgz"

安全启用

发布包内的 cordis.patch.yml 默认只挂载六个召回工具,不会自动再挂一个压缩提供方。启用 SuperLcm 压缩时,应当替换现有 compaction provider,而不是并排追加第二个 provider

name: SuperLcm
mode: rolling
summarizationProvider: openai
summarizationModel: gpt-5.6-sol
# 可选:主压缩模型失败后只重试一次,不会回退到主 Agent。
fallbackSummarizationProvider: anthropic
fallbackSummarizationModel: claude-sonnet-4-5
tailCount: 24
minRetainTokens: 32000
pressureFoldTokens: 20000
foldBatchTokens: 64000
softActiveTokens: 160000
hardActiveTokens: 220000
foldTiming: background

备用路由可留空;若配置,provider/model 必须成对填写且不能与主路由相同。只有主路由失败且任务未取消时才调用一次备用路由;备用也失败时会保留两次错误,不再继续重试,更不会使用主 Agent 模型。

160k/220k 是面向大上下文模型的起始值,不应直接复制给小上下文模型。完整策略见 缓存策略,启用前验收步骤见 VALIDATION.md

开发验证

npm run validate
npm pack --dry-run

CI 覆盖 Windows、Linux、macOS 的 Node.js 22,并在 Linux 上额外覆盖 Node.js 24。自动测试不等于所有 DSH 版本的真实 Agent-loop 认证;正式 profile 应固定版本并完成一次真实压缩、召回、fork 隔离和重启验收。

许可证与署名

MIT。详见 LICENSETHIRD_PARTY_NOTICES.md

SuperLcm 是独立项目,不隶属于 Voltropy、Martian Engineering 或 DeepSeek。仓库没有复制 LCM 官方交互站点、Lossless Claw 或 DSH 的源代码;README 通过官方公开 URL 展示其预览卡片,并明确链接回原始交互页面。

CLASSIFICATION EVIDENCE

分类依据

项目类型插件
功能分类Agent 与会话
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: context-compaction、context-management、prompt-cache、sqlite。