中文EN

dsh-layered-memory

memory装不上npmMIT

dsh 长期记忆:对话自动蒸馏为原子事实、场景摘要与用户画像,每步模型调用前自动注入相关记忆。开箱零配置——BM25 + 向量混合检索,可选本地离线嵌入,chat/work 双族隔离。

下载量 / Downloads
1,353
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-layered-memory

沙箱测试结果

阶段结果
1 安装✗
2 列装—
3 挂载—
4 启动—
第一条错误
dsh: initialized profile web at /home/node/.dsh/profiles/web

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

<div align="center">

<img src="./assets/img/Hero.png" width="100%"

alt="DeepSeek Harness hero 横幅:对话自动分层蒸馏成记忆,模型每步前自动召回注入——右侧对话气泡逐层溶解为三层渐亮光带,流入带发光圆球与渐变轨道的玻璃胶囊(下有 日常·工作·智能·关闭 四档刻度),光丝回流示意召回注入">

dsh-layered-memory

DeepSeek Harness 的分层蒸馏记忆插件:对话在后台自动完成 L0 捕获 → L1 原子记忆 → L2 场景整合 → L3 画像蒸馏,模型每一步前自动把相关记忆注入上下文。

[English](README.en.md) · 最新发行版 · 反馈问题

![npm version](https://www.npmjs.com/package/dsh-layered-memory)

![DSH 0.1.2](https://github.com/deepseek-ai/deepseek-harness)

![MIT License](LICENSE)

</div>

快速开始

需要 Node ≥ 22.16 与 DeepSeek Harness 0.1.2-alpha.1 ~ 0.1.2-rc.1(0.10.0 起

支持到 0.1.2-rc.1,npm latest 已指向该版本;旧版插件请看

历史版本)。

两种调用方式任选(npx 前缀可替换下面任何 dsh 命令):

# 方式一:npx 直接跑官方 CLI(无需预装 dsh)
npx -y @deepseek-ai/dsh plugin --profile web add dsh-layered-memory

# 方式二:已装 dsh CLI(升级:npm i -g @deepseek-ai/dsh 并重启;
# dsh 是 pnpm 转发器,未装 pnpm 时先 npm i -g pnpm)
dsh plugin --profile web add dsh-layered-memory

# 包源备选:GitHub 仓库 / 本地路径(开发调试,link: 指向仓库,pnpm run build + 重启 dsh 即生效)
dsh plugin --profile web add https://github.com/JunNanLYS/dsh-layered-memory
dsh plugin --profile web add /path/to/dsh-layered-memory

让 Agent 安装(推荐)

如果当前 Agent 可以执行终端命令,把下面这段话完整发送给它:

请为 DeepSeek Harness 的 web Profile 安装 dsh-layered-memory 插件。

只执行下面两条命令,不要修改其他 Profile:
dsh plugin --profile web add dsh-layered-memory
dsh --profile web --dump-config

确认输出中出现 dsh-layered-memory 后告诉我安装结果。
不要替我关闭或重启正在运行的 DSH;安装完成后提醒我手动重启 DSH Web Host。

Agent 应当返回安装结果,并明确告诉你配置中是否已经出现 dsh-layered-memory。

本包声明了 dsh.bundle 组合包层(cordis.patch.yml),安装后会自动挂载插件行——

不需要再手改 $DSH_HOME/profiles/web/cordis.patch.yml。然后重启 DeepSeek Harness,

验证:~/.dsh/memory/ 下出现 conversations/ records/ scenes/ 目录和 memory.db

即插件 apply 成功;设置页出现"记忆"页面(记忆工作台五区)、输入栏出现记忆芯片

(记忆 · 智能)即 client 半边就绪。

卸载:dsh plugin --profile web remove dsh-layered-memory + 重启。数据保留在

~/.dsh/memory/,不需要时手动删除整个目录即可。

终端形态(TUI / headless)

除 web 外,同一插件可直接装进终端形态宿主:

# dsh-tui(Claude Code 风格 TUI 前门,详见 github.com/ccch1mneyyy/dsh-TUI · 官网 https://dshtui.com)
dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui   # 首次:建 profile 并装 TUI 宿主
dsh plugin --profile dsh-tui add dsh-layered-memory
dsh --profile dsh-tui
  • /memory <auto|chat|work|off> 切换当前会话档位,无参数时弹出档位选择面板;
  • 状态行:提示框上方常驻 记忆:智能 等当前档位读数;
  • /settings 设置区块:总开关、捕获、蒸馏、召回、蒸馏模型路由与输入预算可直接编辑

(与 web 设置面板同一存储;复杂路由链仍走 web / YAML);

  • headless(dsh --profile headless "一次性任务"):捕获与蒸馏照常工作,无界面元素。

web 与终端形态共享 ~/.dsh/memory/ 同一份记忆。

从源码开发

git clone https://github.com/JunNanLYS/dsh-layered-memory
cd dsh-layered-memory
pnpm install && pnpm run build
dsh plugin --profile web add .        # link: 安装,改代码后 pnpm run build + 重启 dsh 即生效
pnpm run smoke                        # 冒烟测试(先重编:见下方命令)
npx tsc src/smoke.ts --outDir dist-smoke --module nodenext --moduleResolution nodenext --target es2022 --strict --skipLibCheck --esModuleInterop

依赖管理用 pnpm(与 dsh 官方安装通道一致,版本由 packageManager 字段钉死)。

运行时数据流

<p align="center">

<img src="./assets/readme/flow.svg" width="100%"

alt="dsh-layered-memory 运行时数据流:左侧 User 与 Assistant 的会话事件流入插件(L0 捕获、L1–L3 蒸馏、检索召回、记忆工具),插件经 agent/pre-step 把相关记忆注入右侧 DSH 核心;蒸馏复用核心的 ctx.llm,数据双写 ~/.dsh/memory/">

</p>

插件挂在 dsh 原生事件上(session/event 捕获、agent/pre-step 注入),蒸馏调用复用宿主 ctx.llm。召回以消息侧注入呈现:相关记忆作为一条合成消息排在用户新消息之前,会话流里显示为"上下文注入 · memory"行(点开看命中内容)——用户能直接看到"记忆生效了";注入内容有长度预算与时间预算,超限截断/超时跳过,绝不拖慢对话。同会话去重:已注入过的记忆不再重复注入(模型上下文里已经有了,追问同类问题时省 token);上下文被 /compact 压缩或清空时自动重置,记忆可重新注入;被更新的记忆(内容变化换新 id)不受旧压制。时效加权:召回排序按 相关度 × max(0.5, 0.5^(距上次更新天数/30)) 软加权——相关度相近的候选之间新鲜记忆优先(名额自然轮转),相关度足够高的老记忆照常召回(地板保证最多损失一半排序分,长期事实不沉底);recall.decayHalfLifeDays 可调,0=关闭。

成本看板:每次蒸馏 LLM 调用(抽取/去重/L2/L3)的 token 成本按 provider/model 写入

SQLite 明细表(保留期可配置,默认 365 天,写入时滚动清理;记账失败只告警、绝不阻塞蒸馏),

设置页 → 记忆 → 洞察 → 成本 子页可视化:按模型分色的趋势折线(日/周/月粒度 + 近 N 天窗口 +

L1/L2/L3 层级过滤)、层级 × 时间窗口表格(调用数 / 输出与思考 token / 均值 / 中位数)、

按模型累计——蒸馏开销一目了然。输入按字符计(dsh 流式 usage 不含输入 token),

输出与思考按 token 计。

记忆工具(3):

  • memory_search
  • conversation_search
  • memory_read_scene

真机实录:召回注入与工具调用在对话里的样子——"上下文注入 · memory"行先带出相关记忆,模型再按需调 memory_read_scene 读取场景块,凭记忆直接作答:

<p align="center">

<img src="./assets/img/MemoryTools.png" width="60%"

alt="对话界面实录(浅色主题):用户消息"我们最近要干什么?"上方可见"上下文注入 · memory"行;助手回答前列出 4 次 memory_read_scene 工具调用(参数为 scenes 场景块的 .md 文件名),随后凭记忆梳理近期目标与推进路线">

</p>

在只开放代码执行入口的受限会话中,模型经由 run_code 间接调用记忆工具(轨迹视图中的 SUBTOOL 嵌套):

<p align="center">

<img src="./assets/img/ToolTrajectory.png" width="80%"

alt="工具调用轨迹视图:顶部彩色时间线与左侧步骤列表(SYSTEM/CONTEXT/USER/ASSISTANT/TOOL/SUBTOOL 彩色标签),run_code 工具步骤内嵌套 5 次 memory_read_scene 子工具调用(SUBTOOL 标记),右侧为所选步骤的详情面板">

</p>

分层记忆(L0–L3)

<p align="center">

<img src="./assets/img/Layers.png" width="100%"

alt="分层记忆四层(自左上向右下逐层精炼):L0 原始对话(对话气泡)→ L1 原子记忆(发光事实粒子)→ L2 场景块(玻璃文档板)→ L3 核心画像(发光晶核);层间由 LLM 提取/整合/蒸馏光束相连,宽度递减表示数据逐层精炼">

</p>

会话级记忆档位

<p align="center">

<img src="./assets/img/MemoryChip.png" width="72%"

alt="深色主题下的会话记忆芯片与级联菜单:输入栏左簇 Read Only 芯片右侧是「记忆 · 智能 ▾」芯片;点击向上弹出圆角浮层菜单,两行「记忆范围 智能 ›」「数据流 跟随全局 ›」,数据流行右侧悬停出二级子面板列出 跟随全局✓/读写/只写/暂停 四个选项">

</p>

会话侧是分散式记忆面——信息按类型住进宿主原生座位,插件不再有自有条带:

  • 记忆芯片(输入栏左簇、Read Only 芯片右侧):记忆 · {智能|日常|工作} 无边框

芯片(官方 composer chip 语法),文案是解析真值——记忆 · 只写(注入关)、

记忆 · 暂停(灰点)、记忆 · 降级(琥珀点);zh/en 双语随宿主语言切换。

  • 级联菜单(点击芯片向上展开):两行 记忆范围 {值} › / 数据流 {值} ›;数据流

选项在 hover 二级子面板(跟随全局/读写/只写/暂停),点击不固定、桥接热区保证

慢速移动不断链;键盘通路齐备(方向键巡游 + focus 揭示)。

  • 内联滑条(点「记忆范围」原地展开):三停点 日常/工作/智能,拖拽跨档时**芯片文字

实时联动**;键盘方向键/Home/End + aria-valuetext。

  • 暂停恢复快照:数据流

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:24,最后更新 2026-09-07

链接

GitHub · Homepage · npm

同类插件