@deepseek-ai/dsh-memory-layered
DeepSeek Harness 的会自己写日记的长期记忆插件:每轮自动记原文,每 N 轮用会话自身模型蒸馏成 「两本日记 + 四类记忆」,新会话与每条新消息自动想起相关旧内容。
设计见
DESIGN.md。
一句话
以前是她「想起来才写」的记忆;现在是插件每轮自动记、定时自动整理、需要时自动想起—— 你只管聊天,她隔天醒来还接得上。
记忆目录
默认跟着工作区走:<workspace>/memory/(可用 notesDir 改成绝对路径)。
memory/
├── index.md # 索引(插件维护,先读它)
├── facts.md # 稳定事实:身份/环境/服务/路径/依赖
├── prefs.md # 用户偏好与禁忌
├── events.md # 做过的事、发生的事(新的在上)
├── lessons.md # 踩过的坑,写成「别再……」
├── diary/YYYY-MM-DD.md # ① 她自己的日记(给自己回忆;用户也能看)
├── letters/YYYY-MM-DD.md # ② 给主人的信(用户看的)
├── archive/ # 超限条目、旧索引的归档
├── .raw/YYYY-MM-DD.jsonl # 每轮原文(检索用,建议 gitignore)
└── .pending/pending.jsonl # 整理失败暂存,下一轮重试
四类文件沿用「一行一条:- YYYY-MM-DD 一句话」的格式;两本日记按 ## HH:MM 分节。
它怎么工作
- 每轮记录(0 模型调用)
agent/turn-stopping时把「用户最后一句 + 助手最终回复」截断写进.raw/YYYY-MM-DD.jsonl。 - 定时蒸馏(默认每 8 轮 1 次调用)
把新增轮次交给会话自身模型,一次产出 JSON:日记、信件、facts/prefs/events/lessons 新条目、索引关键词。
插件负责去重、限额、归档、写盘;失败进
.pending/,下次重试。 - 自动想起(0 模型调用)
- 新会话 / 上下文压缩后:注入索引 + 四类记忆 + 最近日记/信件(默认 4000 字符预算)。
- 每条新用户消息:中文按 2 字滑窗做关键词匹配,命中旧内容就补一段相关回忆(默认 1500 字符)。
- 需要细节
memory工具search,或/memory search,同时搜四类记忆、两本日记、.raw原文。
安装
需要 DSH 0.2.2-rc.3(插件依赖与运行时版本必须一致,否则 DSH 的版本门禁会拒绝加载)。
pnpm build && pnpm pack
dsh plugin --profile qqbot add ./deepseek-ai-dsh-memory-layered-0.2.1.tgz
开发期也可以直接指向源码:dsh plugin --profile qqbot add link:/path/to/dsh-memory-layered。
装完重启 dsh --profile qqbot 的进程(systemd 下:systemctl restart dsh-qqbot)。
云端部署的完整步骤(上传、AGENTS.md 替换、验证、回滚)见 docs/DEPLOY.md。
memory/.gitignore 会自动创建并排除 .raw/、.pending/——聊天原文可能含隐私,不要提交。
配置
按 id 覆盖(profile 的 cordis.patch.yml):
- id: memory-layered
config:
notesDir: memory
timeZone: Asia/Shanghai
distillEveryTurns: 8
injectChars: 4000
recallChars: 1500
recallLimit: 3
| 字段 | 默认 | 含义 |
|---|---|---|
notesEnabled |
true | 总开关 |
notesDir |
memory |
相对工作区根,或绝对路径 |
timeZone |
Asia/Shanghai |
日记/事件按哪个时区分日期 |
injectChars |
4000 | 新会话快照字符预算 |
recallChars |
1500 | 单次召回片段预算 |
recallLimit |
3 | 单次召回最多几条旧内容 |
distillEveryTurns |
8 | 每多少轮蒸馏一次;0 关闭自动整理 |
rawEnabled |
true | 是否记录每轮原文 |
rawKeepDays |
30 | 原文保留天数 |
maxFileLines |
250 | 四类单文件条目上限(超出归档) |
命令
/memory list [facts|prefs|events|lessons] # 看四类记忆
/memory diary [YYYY-MM-DD] # 看某天日记
/memory letter [YYYY-MM-DD] # 看某天信件
/memory search <query> # 搜记忆/日记/原文
/memory distill # 立即整理当前对话
面板:对话输入行 🧠 → 事实 / 偏好 / 事件 / 纠错 / 日记 / 信件 / 索引;「整理」按钮立即蒸馏。
模型工具
memory:
| action | 作用 |
|---|---|
add / replace / remove |
在 kind(facts/prefs/events/lessons)里增删改一条 |
diary / letter |
追加当天日记/信件 |
search |
搜四类记忆、日记、信件、.raw 原文 |
日常自动维护由插件完成,工具只在「用户明确要求记住/改掉」时使用。
AGENTS.md 怎么改
插件接管写入后,原来「什么时候必须记 / 分类 / 写入格式 / 拆分瘦身」这些手工规则可以删掉,
换成 docs/AGENTS.example.md 里的写法:告诉模型「插件会写,别重复写;
要立刻记住用 memory 工具;回答前先查 memory」。
安全与限制
- 不写密钥/token/密码/手机号;模型提示词里明确禁止,插件也不会把
.raw之外的内容上传。 - 所有写入都是「跨进程文件锁 + 原子写」,用户手改与自动整理不会互相截断。
- 整理失败不丢内容:原轮次进
.pending/,下一次整理时一并重试。 - 单次整理是一次模型调用;
distillEveryTurns: 0可完全关闭自动整理(仍可手动/memory distill)。 - 会话未产生模型路由(还没发过模型请求)时无法整理,会暂存到有路由后重试。
开发
corepack pnpm install
corepack pnpm typecheck
corepack pnpm test
corepack pnpm build
- 测试覆盖:
notes存储、distill解析/落盘/失败重试、recall快照/召回、automation抽取。 - Node
^22.19 || >=24;DSH0.2.2-rc.2及以上。
License
MIT(大脑图标路径取自 Lucide,ISC,见 THIRD_PARTY_NOTICES.md)
No comments yet. Be the first to write one.