liu-joy2026/dsh-selective-memory ↗★ 0
dsh-selective-memory
选择性记忆:给 DeepSeek Harness 的跨会话记忆库(项目区/温度区、深度分层、心情、三信号检索、写入守卫) 适合需要AI跨会话记住工作事实、个人偏好及情绪状态的用户。
Install
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:liu-joy2026/dsh-selective-memoryREADME
Read the full README ↗dsh-selective-memory(选择性记忆)
给 DeepSeek Harness 用的跨会话记忆库插件。
不是「把一切存下来」的记忆,是会选择 的记忆:分得清工作事实和心里的事,记得住当时的感受,知道什么该沉下去。
模型可以主动写入、检索、整理记忆;设置里有一个「记忆库」页面可以直接看和改。数据落在一个普通 JSON 文件里,重启不丢。
设计取向:不只是「记住事实」,也记「当时的心情」。
两个区
| 区 | 放什么 | 默认深度 |
|---|---|---|
项目区 project | 工作事实、技术方案与决策、踩过的坑与教训、待办、项目约定 | 5 |
温度区 warm | 偏好、忌讳、情绪与心情、重要的话、约定与承诺、想留住的片段 | 1 |
深度 是每条记忆的第二维:0 最深刻,数字越大越浅。0 只留给温度区——工作事实再重要也只到 1。每个深度层最多 4 条,满了自动往浅处顺延,也可以显式让某条旧记忆退一级(displace)。
心情(mood) 是第三维:一条记忆可以带一个 12 字内的感受(开心 / 累 / 委屈 / 感动 / 心动)。检索和面板都会显示。
模型工具
| 工具 | 作用 |
|---|---|
memory_write | 写一条(zone + content + 可选 title / tags / mood / depth) |
memory_search | 三信号检索(关键词 idf + 标签 + 深度),可限定区 |
memory_list | 按深度列出,可限定区 |
memory_get | 按 id 取全文 |
memory_update | 改标签和深度 |
memory_mark | 标有效 / 过时(不删) |
memory_delete | 按 id 删除 |
memory_sediment | 一次总结同一话题的 1-5 条(带 based_on 自动把旧条目标过时) |
memory_tidy | 体检:找出完全重复、高度相似、长期没更新的条目;确认后只自动处理完全重复 |
检索怎么工作
关键词:中文二元组 + 英文词,BM25 式 idf 加权,标题命中加倍
标签: query 词命中 tags 单独一路
融合: RRF(k=20),权重 1.0 / 0.8
截断: top_k=5,深度只做同分排序
三个取舍:
- 不设总分阈值 ,但只命中高频词时返回空——宁可搜不到,也不塞噪声
- 出现在一半以上记忆里的词不参与打分,免得淹掉区分词
- 返回按深度优先,深度 0 永远在最前
系统提示里有什么
prompt.md:记忆库的使用规则。运行时从插件目录读,可以直接改或清空 ;没有这个文件就用内置默认- 记忆索引 :启动时列出库里最靠前的 12 条(
id | 标题),让模型知道「有什么」 - 写入守卫 :连续 6 轮没写入,下一轮提示里会出现一句「该写记忆了」。用
systemPrompt.context动态渲染,不常驻、不破坏缓存
设置页
设置 → 记忆库 :
- 项目区 / 温度区两个标签,带
/的绿红计数 - 搜索、新建、编辑、删除(二次确认)
- 每条显示来源(用户写 / AI 记)、
♡ mood、标签、深度 - 一键隐藏 / 显示过时记忆(只影响显示,不影响检索)
安装
需要 DeepSeek Harness 0.2.x。桌面版的 profile 由应用独占管理,所以不要 用 dsh plugin add(会被拒绝),改 profile 的 package.json:
- 打开
%USERPROFILE%\.dsh\profiles\desktop\package.json(macOS/Linux 是~/.dsh/profiles/desktop/package.json) - 在
dependencies里加一行:
"dsh-selective-memory": "github:liu-joy2026/dsh-selective-memory"
- 在
dsh.profile.bundles数组里加一项"dsh-selective-memory" - 在该目录跑一次
pnpm install(用 DSH 自带的那个 pnpm 也行) - 重启 DeepSeek Harness,设置 → 记忆库 就能看到
本地开发可以直接指路径:
"dsh-selective-memory": "link:E:/path/to/dsh-selective-memory"
Windows 上从 GitHub 拉取可能很慢或失败,必要时挂代理(
git config --global http.proxy)或用镜像。
数据位置
$DSH_HOME/storages/memory-bank/store.json
也可以用环境变量 DSH_MEMORY_BANK_DIR 指定目录名。
纯文本、可读、可手动备份;写入用临时文件 + rename,避免写一半损坏。
日志在同一目录的 memory-bank.log:中文摘要在前,英文原文在后,启动时轮转。
结构
lib/index.js 宿主侧:工具、系统提示、RPC、写入守卫(唯一真源)
lib/store.js 存储层(零依赖,可单独测试)
lib/client.js 设置页(React,无需构建)
lib/log.js 日志
prompt.md 记忆库行为规则(可改)
cordis.patch.yml bundle 声明
tests/ 检索回归集
本仓库没有构建步骤 :
lib/是手写的可运行 JS,直接就是产品。
测试
node tests/run-retrieval.mjs
跑 tests/retrieval-cases.json 里的用例,看每个问题能不能在 top5 命中期望条目,输出通过率和失败明细。已知局限的用例标 soft: true,不算回归。
已知限制
- 没有向量检索(关键词 + 标签 + 深度已经够用,等库大了再说)
- 没有「每步自动召回」:目前靠模型主动
memory_search+ 启动时的索引 - 没有导出 / 导入
- 设置页还没有按标签筛选
License
MIT