DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

MingHuanYue /

MingHuanYue/dsh-tide-memory

Verified

潮汐记忆:给 DeepSeek Harness 一份会淡忘、会过时、看得见的长期记忆(带设置页图形界面)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@1da0e4dd

潮汐记忆 · dsh-tide-memory

DSH Plugin Hub license dsh

给 DeepSeek Harness 里的会话一份会淡忘、会过时、看得见的长期记忆。

别人的记忆插件多数是「存下来 + 全塞回去」;潮汐记忆的取舍是: 证据够不够决定它进不进上下文,鲜活度只决定它排多前。

它解决的三个具体问题

  1. 忘了该记的 —— 跨会话之后,你上次交代的边界、偏好、约定全没了。
  2. 记得太多反而更笨 —— 把一摞旧事全塞进提示词,模型开始在不相关的地方乱套用。
  3. 记忆是个黑盒 —— 你不知道它为什么想起那一条,也没法纠正。

三条设计取舍(跟别家不一样的地方)

取舍 潮汐记忆 常见做法 为什么
进不进 证据分 C = s/(s+2),低于阈值(默认 0.35)根本不进 按相似度 top-k 全塞 top-k 总会给你 k 条,哪怕一条都不相关
淡忘 事件半衰期 30 天,带情绪 7 天,事实类永不衰减 无衰减 / 全部按时间排 情绪浓的事该记得更久,画像和约定不该淡
过时 标 supersededBy,新旧都留,可回看 直接覆盖或删除 「他以前住哪」也是信息,删了就没了

再加一条工程上的:没有 900KB 的用户词典。分词靠二元组 + 单字(二元组权重 1、单字 0.5), idf 用记忆库自己的 df 现算。少一份词典,换个领域也不会水土不服。

装上

从 GitHub 装(推荐,插件市场也是这么发命令的):

dsh plugin --profile desktop add github:MingHuanYue/dsh-tide-memory   # 桌面端
dsh plugin --profile web add github:MingHuanYue/dsh-tide-memory       # 命令行 web 端
# 装完重启一次 DSH,设置页里才会出现「潮汐记忆」

从 npm 装(发布之后可用):

dsh plugin --profile desktop add dsh-tide-memory

本地源码装(改代码调试用):

dsh plugin --profile desktop add file:D:/path/to/dsh-tide-memory

用起来

给它工具(模型自己会调):

  • tide_remember —— 记一条:text / kind(event 或 fact)/ imp 01 / emo 01 / keys
  • tide_recall —— 按线索找:query / limit
  • tide_forget —— 标过时(不是删)
  • tide_stats —— 库里现在多少条、多少还活着

给人看的界面:设置 → 潮汐记忆

  • 记忆库下拉:每个工作区一个库,显示条数和最近一条的时间
  • 手动记一条:选「事件/事实」和重要度
  • 搜索 + 过滤:还在的/事实/事件/钉住的/已过时/全部
  • 每条卡片:类型、鲜活度百分比与色条、被想起次数,按钮有 钉住 / 改 / 标过时 / 删
  • 看它怎么想起来的:最近几轮注入的 trace,每条的 C(证据)、P(排序分)、act(鲜活度)
  • 设置区:开关、事件半衰期、情绪半衰期、每轮最多几条、证据阈值、字数上限

记忆存在哪

$DSH_HOME/tide-memory/
├── config.json          # 全局设置
├── trace.jsonl          # 注入日志(「怎么想起来的」)
├── stores/<key>.jsonl   # 每个库一行一条
└── cold/<key>.jsonl     # 冷宫:淡到快没了又没被想起的(没删,能翻回来)

一行长这样:

{"id":"ly3k9x","t":1761215000000,"last":1761215000000,"kind":"fact",
 "text":"主人不喜欢别人替他做决定,什么事都要先问一句",
 "keys":["决定","边界"],"imp":1,"emo":0.5,"hits":3,"pinned":false,"supersededBy":null}

纯 JSONL,随手 grep 就能翻,也能自己写脚本搬进搬出。

打分怎么算的

act = kind 是 fact ? 1 : 0.5 ^ (天数 / 半衰期)
C   = s / (s + 2)          // s = 命中词的 idf × 词权重 之和
P   = C × (0.55 + 0.25·act + 0.15·imp + 0.05·emo)
  • C 低于阈值 → 不进上下文(默认 0.35:一条明确命中就过半,两条更稳)
  • 进的那几条按 P 排序,最多 6 条 / 800 字
  • act 低于 0.05 且从未被想起的事件 → 挪进冷宫

调阈值是这套东西最有效的一个旋钮:觉得它乱想起来就调高,觉得它太健忘就调低。

排障

装完起不来:先看 profile 的 package.json 有没有被工具写成带 BOM 的 UTF-8。

$p = 'D:\nodejs-data\dsh-home\profiles\desktop\package.json'
[System.IO.File]::WriteAllText($p, [System.IO.File]::ReadAllText($p), (New-Object System.Text.UTF8Encoding($false)))

设置页没出现「潮汐记忆」:重启 DSH;还没出现就 dsh --profile desktop --dump-config 看 bundle 名单里有没有 dsh-tide-memory。

从 GitHub 装报 exit code 128:pnpm 把 github: 解析成 SSH 了。

git config --global url."https://github.com/".insteadOf "git+ssh://git@github.com/"

权限与隐私

  • 只读写 $DSH_HOME/tide-memory/ 下的自己的 JSONL 文件,不碰别的目录。
  • 不联网:没有云端、没有 embedding 服务、没有 key。分词和检索全在本地算,一次几十毫秒。
  • 记忆只有两个来源:模型主动调 tide_remember,或者你在设置页手动记一条。
  • 每轮注入了哪几句,会同时写进 trace.jsonl,设置页里能直接看(C / P / act 三个数)。
  • 想清空:删掉 stores/ 下对应的 *.jsonl,或者在设置页逐条删。卸载插件不会删数据,重装还在。

兼容性

  • DSH >= 0.1.7-rc.1(见 package.json 的 engines.dsh),Node >= 22。
  • 图形界面挂在设置页,桌面端和 web 端都能用(client 走 dsh.client 声明,platform: web)。
  • 记忆库按工作区分桶:同一个工作目录下的会话共用一个库,换项目不串味。
  • 已知显示层小瑕疵:设置页的库下拉里偶尔会出现一行 ws-xxx__ 的重复名, 那是文件名把中文折成了下划线(同一份数据),不影响读写,重启后按 safeKey 归并就没了。

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 1da0e4dde5ad

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout