🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

记忆消退压缩 Light-EI/dsh-ebbing-context

DeepSeek Harness
Light-EI4 天前有提交已提供中文文档扫描:含敏感能力

把旧对话逐层压成粗摘要,原文仍可检索取回

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Light-EI/dsh-ebbing-context
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 6 处,展示前 6 条)
  • 写入本地文件
    lib/log.js:26
    mkdirSync(candidate, { recursive: true })
  • 读取本地文件
    lib/log.js:46
    if (statSync(path).size < MAX_BYTES) return
  • 写入本地文件
    lib/log.js:54
    renameSync(`${path}.${i}`, `${path}.${i + 1}`)
  • 删除本地文件
    lib/log.js:58
    rmSync(`${path}.${KEEP_FILES}`, { force: true })
  • 写入本地文件
    lib/log.js:61
    renameSync(path, `${path}.1`)
  • 写入本地文件
    lib/log.js:90
    appendFileSync(path, `${line}\n`)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

模拟记忆衰退的 DSH 分层上下文压缩插件:原文 → L1 → L2 → L3,越旧分辨率越低,但从不删除。

README

由 DeepSeek 最新模型翻译生成
Ebbing Context 模拟记忆衰退的 DSH 分层上下文压缩插件。 模型自己决定压哪里、自己写摘要;插件只把四条宿主本来就认识的会话事件写进日志,把旧内容一层层降成更粗的表示: 原文(逐字) → L1 块(一段的结论与数据) → L2 块 → L3 块(只剩关键词句) 越旧的内容分辨率越低,但从来没有被删掉——原文仍在会话日志里,装了「会话搜索」插件就能按事件号取回。 名字里的 ebbing 是“渐渐消退”。它模拟的是记忆的自然衰退,不是曲线、也不是定时任务:降不降、降多少,由模型看着上下文压力自己决定。 ⚠️ 状态:尚未在真机上安装运行过 代码是完整的,单元测试与冒烟测试全绿(blocks 47 / compress 11 / callfold 18 / config 11 / prestep 12 / usage 8 / map 8),但还没有人在真实的 DSH 里装过它。第一次安装请: 1. 先备份 profile 目录; 2. 装完先看插件卡片是否变成「运行中」;停在「未运行」说明 load 失败,DSH 日志里会有一条 import 相关的错误; 3. 确认两个工具 context_map / compress 与命令 /context-status 都在; 4. 先在一个新会话里试,别在长会话上试。
展开完整文档(README 剩余 1 节)
Ebbing Context

模拟记忆衰退的 DSH 分层上下文压缩插件。

模型自己决定压哪里、自己写摘要;插件只把四条宿主本来就认识的会话事件写进日志,把旧内容一层层降成更粗的表示:

原文(逐字) → L1 块(一段的结论与数据) → L2 块 → L3 块(只剩关键词句)

越旧的内容分辨率越低,但从来没有被删掉——原文仍在会话日志里,装了「会话搜索」插件就能按事件号取回。

名字里的 ebbing 是“渐渐消退”。它模拟的是记忆的自然衰退,不是曲线、也不是定时任务:降不降、降多少,由模型看着上下文压力自己决定。

⚠️ 状态:尚未在真机上安装运行过

代码是完整的,单元测试与冒烟测试全绿(blocks 47 / compress 11 / callfold 18 / config 11 / prestep 12 / usage 8 / map 8),但还没有人在真实的 DSH 里装过它。第一次安装请:

1. 先备份 profile 目录;
2. 装完先看插件卡片是否变成「运行中」;停在「未运行」说明 load 失败,DSH 日志里会有一条 import 相关的错误;
3. 确认两个工具 context_map / compress 与命令 /context-status 都在;
4. 先在一个新会话里试,别在长会话上试。

目标宿主:DSH 0.2.1-rc.3 ~ 0.2.2-alpha.2。用到的每个接缝都对着这两版的源码核对过,但核对不等于跑通。

它怎么工作

- 两个工具 + 一条命令:context_map(看当前分层结构与占用)、compress(执行一次压缩)、/context-status(只读,内容和地图一致)。
- 键名 = 要压的那一层:l0 压原文区头部 → 产物是 L1 块;l1 压 L1 区头部 → L2 块;l2 压 L2 区头部 → L3 块;l3 把整个 L3 区压成一块(唯一不写 to 的键)。
- to 只能从地图上抄:l0 写轮号(T19),l1 / l2 写该区从 1 起的块序号。写错就被拒,拒绝回执里带着刷新后的地图。
- 级联:压深层时,比它浅、且还能压的层必须在同一批里一起给,否则整批拒绝。这样做是为了只断一次前缀缓存。
- 零台账:不建数据库、不写状态文件。每轮的层级都是从 session.surface.nodes 现算出来的,块的身份写在块正文第一行(〔L1|T16–T19|ev 4121–4390〕标题)。
- 提醒,但不代劳:占用到 75%、自上次提醒后又长了一大截、或某一层超出设计配额时,插件会在一轮收尾把模型叫醒并给一张新地图——压不压、压哪里,仍然由模型决定。它从不自动压缩,也不催你敲宿主的 /compact。

安装

三种方式,都还没在真机上验证过。npm 包尚未发布(名字已占位为 dsh-ebbing-context),下面第一条等上架后才可用。

方式零(npm,上架后)

npm i -g dsh-ebbing-context
dsh plugin add dsh-ebbing-context

方式一(推荐,源码目录)

dsh plugin add "C:\path\to\dsh-ebbing-context"

方式二:在 profile 的 cordis.patch.yml 里加一行 insert:

- id: dsh-ebbing-context
name: ./index.js # 或包名 dsh-ebbing-context

⚠️ name 只写目录、没写入口文件时,Loader 解析不到会只写一行日志就放弃,插件不会启动,界面只显示「未运行」。所以要么用 dsh plugin add,要么把 name 写成 ./index.js。

配置

设置入口:侧栏「插件」→ 找到 Ebbing Context → 行详情页(系统「设置」里的插件清单是只读的)。

15 项,全部是普通配置项,保存在 profile 的 cordis.patch.yml 里:

| 分组 | 项 |
| 配额 | budget.l1 / budget.l2 / budget.l3(各层占可用输入的百分比) |
| 单块上限 | segment.l1 / segment.l2 / segment.l3 / title.maxTokens |
| 提醒 | notice.enabled / notice.growthTokens / triggerPct |
| 行为 | keepTurns / pruneFirst / foldCallRecord / requireSessionQuery / reservedTokens |

建议关掉宿主自带的自动压缩(compaction-basic 的 auto,默认在 80% 时触发)。它一旦触发,会把这里的多层摘要重新拍平成一段高层摘要,细节永久丢失——插件本身不受影响,但效果会打折。本插件不能替你改那一行(它在 profile 的 group 里),需要你自己在 cordis.patch.yml 里写 config: { auto: false }。

依赖与边界

- 需要「会话搜索」插件(session_search 等工具)。requireSessionQuery 默认为 true:一旦取回原文的能力不存在,compress 与 context_map 都会拒绝执行并说明原因——宁可上下文大着,也不做不可逆的事。想在没有它的情况下也能压,把这个开关关掉。
- 不依赖任何特定模型;不调用模型。
- 不实现 ctx.compaction、不改宿主压缩插件、不注册 message projection、不拦截网络。

已知限制

- 不自动压缩:所有压缩都由模型在对话中主动发起。
- 并行调用时折叠降级:如果模型把 compress 和别的工具放在同一条消息里并行发,调用记录只能改成「折地图、留每个键的结果」,参数里那份摘要副本要到下一次覆盖它的压缩才会消失。
- 图片不单独记账:宿主自带的图片离线化只处理最老的图片,被压缩遮掉的图片不会额外记录(块里会写一行图片台账)。
- 空节点、缺轮次大纲、缺会话搜索等异常情形都有守卫与明确报错,但这些守卫只在合成会话上跑过,真机行为待验证。

许可与出处

MIT。

插件里检查点前导语(This is an automatically generated checkpoint …)与被压内容边界标签(<compacted-summary> / </compacted-summary>)的文字抄自 DSH 自带的 @deepseek-ai/dsh-compaction-basic(MIT)——宿主界面与日志靠这段文字识别检查点,必须逐字节一致。除此之外没有复制任何代码。

当前实现的完整规范见 docs/SPEC.md;设计推演与取舍见 机制与实现路径。

参与

欢迎开 Issue 与 Discussion:使用中遇到的问题、对分层策略的想法、真机验证结果都很有用。

Pull Request 同样欢迎,但请先开 Issue 说明要改什么——这个插件的多数行为(提示词措辞、拒绝条件、折叠时机)都是针对宿主具体行为定的,改错一处可能让整个会话压不动,所以大改动需要先对齐设计。

本地跑测试(无依赖,Node ≥ 20):

npm test

同一个测试集在 CI 里跑 Node 20 与 22 两档(见 .github/workflows/test.yml)。

安全问题不要开公开 Issue,走 私密报告,细节见 SECURITY.md。
预览分享卡片长什么样 ↓Light-EI/dsh-ebbing-context
分享 · DeepSeek Harness Hub
Light-EI/dsh-ebbing-context

把旧对话逐层压成粗摘要,原文仍可检索取回

这是你的仓库?认领条目

回到顶部