- Home
- Plugin
- Sessioni e messaggi
- dsh-ebbing-context
dsh-ebbing-context
light-ei/dsh-ebbing-context
Compressione del contesto a livelli per DeepSeek Harness: raccoglie i turni più vecchi in blocchi di riepilogo L1–L3 scritti dal modello e indica cosa contiene ogni livello. Riattiva il modello quando il contesto supera una soglia di dimensione o continua a crescere. Per impostazione predefinita richiede il plugin sperimentale Session Search di DSH (session_event_read / session_event_search); senza di esso, gli strumenti restano disattivati a meno che requireSessionQuery non venga disattivato.
Installazione
dsh plugin --profile web add github:light-ei/dsh-ebbing-contextREADME
Ebbing Context
模拟记忆衰退的 DSH 分层上下文压缩插件。
模型自己决定压哪里、自己写摘要;插件只写宿主本来就认识的会话事件,把旧内容一层层降成更粗的表示:
原文(逐字) → L1 块(一段的结论与数据) → L2 块 → L3 块(只剩关键词句)
越旧的越粗,但从来没有被删掉——原文仍在会话日志里,装了「会话搜索」插件就能按事件号取回。
ebbing 是"渐渐消退":降不降、降多少,由模型看着上下文压力自己决定,不是定时任务。
状态:功能完整、测试全绿,已在真机上跑通过压缩。没留下的是可复现的验证记录——当时的地图、日志与压缩前后对比都没归档。目标宿主 DSH 0.2.1-rc.3 ~ 0.2.2-alpha.2。试的时候请先备份 profile、用新会话试。 逐版变更见 CHANGELOG。
它怎么工作
- 两个工具 + 一条命令:
context_map(分层结构与占用)、compress(执行一次压缩)、/context-status(只读,同地图)。 - 键名 = 要压的那一层:
l0压原文 → L1 块;l1压 L1 → L2;l2压 L2 → L3;l3把整个 L3 区压成一块(唯一不写to的键)。 to只能从地图上抄:l0写轮号(T19),l1/l2写该区从 1 起的块序号。写错就被拒,拒绝回执里带刷新后的地图。- 级联:压深层时,比它浅且还能压的层必须同批给完,否则整批拒绝(只断一次前缀缓存)。
- 零台账:不建库、不写状态文件;层级每轮从会话表层现算,块的身份写在正文第一行
〔L1|T16–T19|ev 4121–4390〕标题。 - 提醒但不代劳:占用到线、又长了、某层超配额时,在本轮收尾把模型叫醒并附一张新地图。从不自动压缩,也不催
/compact。
完整设计(分层模型、级联、保护边界、配置、宿主约定、限制)见 docs/SPEC.md。
安装
npm 已发布:
dsh plugin add dsh-ebbing-context(也可以npm install dsh-ebbing-context)。下面两种方式也仍可用。
方式一:从 npm 装(推荐)
dsh plugin add dsh-ebbing-context
方式二:从源码目录装
git clone https://github.com/Light-EI/dsh-ebbing-context.git
dsh plugin add ./dsh-ebbing-context
方式三:手动挂到 profile
- 把仓库内容放进 profile 的
node_modules/dsh-ebbing-context/ - 在 profile 的
cordis.patch.yml里加一行dsh-ebbing-context:(路径写法见 docs/SPEC.md 的"目录与开发") - 重启 DSH
装完确认三件事:插件卡片显示运行中、context_map / compress 两个工具都在、/context-status 能出地图。
卸载(dsh plugin remove dsh-ebbing-context 之后还要做两步):
- 打开 profile 的
cordis.patch.yml,删掉dsh-ebbing-context那一节(包括面板里改过的config)。不删的话,下一次启动会因为"patch 指向的条目不存在"在 stderr 刷一条警告——不会坏,但会一直刷。 - 日志在
$DSH_HOME/logs/ebbing-context.log(滚动时还有.1/.2),卸载不会自动删,确认不需要排查后手动删掉即可。 建议关掉宿主自带的自动压缩(compaction-basic的auto,默认 80% 触发)。它一旦触发会把多层摘要重新拍平,细节永久丢失。插件照样能压,只是效果打折。关的位置取决于你的安装方式与预设。
配置
共 17 项(triggerPct、keepTurns、pruneFirst、foldCallRecord、requireSessionQuery、reservedTokens、budget.*、segment.*、title.maxTokens、notice.*),在插件面板里改,改完点「保存」才生效。
默认值、含义与拒绝规则见 docs/SPEC.md 第 6 节。
依赖与边界
- 需要宿主提供
agent/pre-step、agent/turn-stopping、agent/followup与会话表层 API。 - 默认要求装「会话搜索」(
session_event_read/session_event_search),取不回原文就不让压。 - 只做"成对替换"或"只改
tool/result正文",从不单点删节点。 - 不联网、不读文件、不收集遥测。
已知限制
- 并行调用时不折叠(也不改写返回),摘要正文会以参数形式留在上下文里(插件会提醒以后单独发)。
- 折叠只在下一次请求发出之前做;错过这一步的那条就不再折,调用记录原样留着。
- 图片无法取回,只按张数记账。
- 轮次大纲损坏(日志缺
turn/start或乱序)时,该轮报红色错误并停用。 - 区占用由插件自估(中文约 0.6 token/字、英文约 0.3 token/字),与宿主计价器接近但仍会有几个百分点的差异。
许可
MIT。
参与
Issue / PR 都欢迎。动手前请先看 docs/SPEC.md 的"依赖的宿主约定"一节;那是正确性的前提。
Plugin correlati
dsh-web-ui (dsh-chat-recovery)
zhu1090093659/dsh-web-ui
billion-context
ranxianglei/billion-context
dsh-synapse
liangmianya/dsh-synapse
dsh-archive-manager
michengai/dsh-archive-manager