前言¶
在 DeepSeek Harness(DSH)里跑多轮、跨会话任务时,模型默认只依赖当前上下文。关掉窗口或换一个新会话,项目结构、用户偏好、上一轮纠正过的教训往往要重新交代一遍。常见做法是往 system prompt 里塞长文档,或靠外部笔记手动粘贴——前者容易破坏 KV 缓存、后者难以按需检索。
meow-memory 是 Phant0Meow 维护的 DSH 记忆类插件,在每个工作区用 SQLite 维护结构化记忆库,通过首轮快照注入、逐条关键词命中和空闲时的 dream 整理,把 soul、user、project 等七层信息跨会话保留下来。下面介绍它的定位、能力与安装方式。
这是什么¶
meow-memory(npm 包名 meow-memory,仓库 Phant0Meow/dsh-meow-memory)面向 DeepSeek Harness 的跨会话记忆场景。记忆数据存放在工作区下的 .dsh-meow/memory.db,基于 Node 内置的 node:sqlite,无额外原生依赖。
核心理念分两条线:静态记忆手册(数据总览、工具用法、写作准则)以固定 section 注册在 system prompt 里,文本恒定、利于 provider 的 KV 缓存;动态内容(soul/user 全量、设计原则、记忆导引)作为第一条真实用户消息的前缀注入,从第二轮起每条用户消息再做关键词命中。模型需要深入内容时,调用 memory_search、memory_project 等工具检索。
当前版本 0.17.0,MIT 许可证。GitHub 约 37 stars。社区目录页:SkillHub — dsh-meow-memory。
七层记忆与存储结构¶
记忆按层级分表存储,每条记录带 UUID 与时间前缀,id 顺序即创建顺序:
| 层级 | 含义 |
|---|---|
soul |
AI 自身相关信息 |
user |
用户基本信息与偏好 |
project |
项目信息,含 subcategory(overview/structure/decisions/quotes/ops/todo) |
fact |
原子事实 |
lesson |
教训与纠正 |
topic |
进行中的讨论话题,可带目标句 |
rules |
设计原则与行为准则 |
全局适用的条目,project 填 "全局"(与留空区分)。同时适用于多个项目时,用英文逗号分隔,如 "dsh, femwa"。检索与命中按「包含当前项目名或全局」判定。
会话级已见记录写在 .dsh-meow/sessions/<id>.json:注入过的 id 不重复注入;收到会话压缩信号(compaction/*)时释放已见记录,压缩后可再次被命中。
注入与检索机制¶
首轮长期记忆块:第一条真实用户消息前注入固定格式——===== 长期记忆 ===== → 【关于你】(soul 全量)→ 【关于user】(user 全量)→ 【设计原则】(全局 rules 且 importance≥2)→ 【记忆导引】(用法说明 + 用户所有 project 列表)→ ===== 长期记忆结束 ===== + 本轮用户prompt:。首轮不跑关键词命中;即使首条用户消息与插件通知同批到达,快照仍挂在真实用户消息上。
每消息关键词命中:从第二条用户消息起,对 fact/lesson/rules/topic 检索(范围 = 全局 + 当前 project 锚定),top-2 命中以「可能相关的记忆,仅供参考:」前缀注入。打分基于条目关键词(LLM 提取或自动 bigram),结合 idf、覆盖率、按时间戳的艾宾浩斯衰减、importance 权重与 title 加成。未锚定 project 时,命中只搜全局,避免闲聊误伤项目记忆。
当前 project 锚定:memory_remember、memory_search、memory_update、memory_project 带 project 参数即锚定该会话的当前项目。
缓存友好:静态 meow-memory:guide section(order 130)在 system prompt 注册一次;memory_search 默认 top10 中前 5 条按相关度取(不排除已见),后 5 条绕开已见补齐。
工具集¶
插件向模型暴露一组 memory_* 工具,常用能力如下:
memory_remember:写入记忆。必填content、project、keywords、importance,缺失会报错引导重填;支持自动去重合并,返回读回确认。memory_search:BM25 检索,支持level、project、status、days过滤;默认 top10,返回归属、完整 id、相对时间与关键词列表(不含原文)。memory_project:project参数必填。按子标签分组输出项目全景,todo 区显示「已完成:」最近 5 条与「To do list:」,末尾附记忆库与会话历史定位说明。memory_find_similar:查重与冲突检测。memory_read/memory_update:读取与更新,含status(active/archived/stale)、importance、goal、keywords等字段。memory_dream:手动触发本窗口记忆整理。
记忆时间戳以 updated_at(最后更新时间)为准;dream 封存或 memory_update 刷新时更新。
按窗口 dream 整理¶
窗口空闲达到 idleMinutes(默认 180 分钟)且非峰时抑制时段时,该窗口的主 agent 在空闲时整理记忆。整理范围为本窗口建立或提取过(注入、检索、memory_read)的记忆,以窗口最后一次对话时间戳冻结知识。
整理分三轮:第 1 轮处理 project/fact/lesson/rules/soul/user;第 2 轮处理 topic;第 3 轮在项目涉及具体项目时追加项目总结(调 memory_project 复查并精简,旧条目归档)。长期稳定的 rules 默认 2 天内有更新才进入重审清单(dream.rulesReviewDays),避免无意义刷新。
峰时抑制按 timeZone(默认 Asia/Shanghai)计算:默认 09:00–12:00、14:00–18:00 及各自开始前 15 分钟(suppressLeadMinutes)不自动触发;进行中的 dream 不打断。无 live agent 且超过 24 小时的旧窗口、已归档会话不处理。
不想等空闲触发时,在输入框输入 /dream 可立即唤起本窗口整理(与 memory_dream 同语义,不受峰时抑制)。左侧会话行「…」菜单可设置「跳过梦境整理记忆」,被跳过的窗口不再被空闲定时器自动 dream,手动 /dream 与 memory_dream 仍可用。
dream 防重复机制包括:DB 原子 60 秒检查节流、dream_pending 幂等抢占、未收尾 dream 自动补收尾、跨实例孤儿收尾。
反思与客户端 UI¶
连续 ≥7 个工具 step(默认 reflectTurns)后,插件会询问模型自上次整理以来是否有值得记忆的内容;若最后一步已是 memory_* 则视为已主动记忆,不重复反思。
客户端还提供:
- 首轮长期记忆与关键词命中注入折叠为「▸ 已注入记忆」横条,点开查看全文,用户 prompt 以气泡直接显示。
- 反思轮与 dream 轮默认折叠为横条(如「新增记忆 N 条」「记忆梦境任务」),可展开查看 Think、tool call 等细节。
- 会话列表中,dream 整理后无新活动的会话显示淡黄色月牙标识;dream 进行中为呼吸灯月牙。状态通过
/meow-memory/dream-eventsSSE 推送。
安装与启用¶
插件以当前 DSH 进程权限运行,安装前建议阅读源码与 MIT 许可证。DSH 采用「一切皆插件」的装配方式;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。
通过 npm(推荐)¶
在 profile 的 node_modules 中安装(loader 在此解析插件):
cd $DSH_HOME/profiles/web # 默认 home: ~/.dsh/profiles/web
npm install meow-memory
在 profile 的 package.json 中将包加入装配 bundles(v0.9.0 起推荐写法):
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "meow-memory"]
}
}
插件自带 dsh.bundle.patch,bundle 机制会自动装配。新增插件请走 bundles 数组,勿依赖 profile patch 的 insert 寻址。
重启 dsh web 后,新会话自动加载插件。
手动安装¶
- 将包复制或软链到 profile 的
node_modules:
mkdir -p ~/.dsh/profiles/web/node_modules
ln -s /path/to/meow-memory ~/.dsh/profiles/web/node_modules/meow-memory
- 同样将
meow-memory加入dsh.profile.bundles。 - 重启
dsh web。
配置项¶
所有字段可选,可通过 profile patch 或 cordis.patch.yml 覆盖:
- id: meow-memory
name: 'meow-memory'
config:
enabled: true # 总开关
projectDir: '.dsh-meow' # 记忆目录(相对工作区)
hitTopK: 2 # 每条用户消息关键词命中上限
reflect: true # 连续工具轮后自动反思
reflectTurns: 7 # 触发反思所需的连续工具轮数
dream:
enabled: true
idleMinutes: 180 # 空闲 ≥180 分钟允许 dream
suppressWindows: # 峰时抑制时段(按 timeZone)
- start: '09:00'
end: '12:00'
- start: '14:00'
end: '18:00'
suppressLeadMinutes: 15
checkMinutes: 15
timeZone: 'Asia/Shanghai'
运行要求¶
零运行时依赖:node:sqlite(Node ≥22.13 默认可用;22.5–22.12 需 --experimental-sqlite)加自包含 esbuild 产物 lib/index.js,无原生模块。
适用场景与注意¶
适合需要跨会话保留项目上下文、用户偏好与教训纠正的 DSH 工作流——例如长期维护同一仓库、多窗口并行但共享记忆库的场景。双实例共享同一记忆库时,跳过 dream 等状态持久保存、天然一致。
注意:记忆质量依赖模型主动调用 memory_remember 与 dream 整理;关键词命中基于条目关键词而非全文,写入时 keywords 字段值得认真填写。峰时抑制时段内不会自动 dream,紧急整理请用 /dream。