liu-joy2026/dsh-selective-memory ↗★ 0

dsh-selective-memory

选择性记忆:给 DeepSeek Harness 的跨会话记忆库(项目区/温度区、深度分层、心情、三信号检索、写入守卫) 适合需要AI跨会话记住工作事实、个人偏好及情绪状态的用户。

Package
dsh-selective-memory
Compatibility
Unverified
Version
0.2.0
License
MIT
Last updated
Oct 23, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:liu-joy2026/dsh-selective-memory

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 永远在最前

系统提示里有什么

  1. prompt.md :记忆库的使用规则。运行时从插件目录读,可以直接改或清空 ;没有这个文件就用内置默认
  2. 记忆索引 :启动时列出库里最靠前的 12 条(id | 标题),让模型知道「有什么」
  3. 写入守卫 :连续 6 轮没写入,下一轮提示里会出现一句「该写记忆了」。用 systemPrompt.context 动态渲染,不常驻、不破坏缓存

设置页

设置 → 记忆库 :

  • 项目区 / 温度区两个标签,带 / 的绿红计数
  • 搜索、新建、编辑、删除(二次确认)
  • 每条显示来源(用户写 / AI 记)、♡ mood、标签、深度
  • 一键隐藏 / 显示过时记忆(只影响显示,不影响检索)

安装

需要 DeepSeek Harness 0.2.x。桌面版的 profile 由应用独占管理,所以不要 用 dsh plugin add(会被拒绝),改 profile 的 package.json:

  1. 打开 %USERPROFILE%\.dsh\profiles\desktop\package.json(macOS/Linux 是 ~/.dsh/profiles/desktop/package.json)
  2. 在 dependencies 里加一行:
"dsh-selective-memory": "github:liu-joy2026/dsh-selective-memory"
  1. 在 dsh.profile.bundles 数组里加一项 "dsh-selective-memory"
  2. 在该目录跑一次 pnpm install(用 DSH 自带的那个 pnpm 也行)
  3. 重启 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