前言¶
在 DeepSeek Harness(DSH)里跑长会话时,模型往往只能依赖当次上下文;换工作区或开新对话后,团队约定、项目偏好和未完成的结论容易丢失。常见做法是手抄笔记、改 AGENTS.md,或依赖外部向量库——前者维护成本高,后者与 DSH 会话链路脱节。下面介绍社区插件 dsh-memory-layered(npm 包名 @deepseek-ai/dsh-memory-layered):在 Harness 内用文件落地 全局 + 按项目 两层记忆,由模型维护、用户可干预,并带字符预算、版本回滚与 TTL。
这是什么¶
dsh-memory-layered 是 DSH 的「记忆」类插件,维护者 pomelotea-yuzu(package 作者字段为 yuzu-tea-duck)。它把可注入模型的条目写在 $DSH_HOME/memories/ 下的 MEMORY.md,元数据与归档、版本快照分文件存放;设计细节见仓库内 DESIGN.md。
- 目录页:https://www.skillhub.cn/plugins/pomelotea-yuzu/dsh-memory-layered
- GitHub:https://github.com/pomelotea-yuzu/dsh-memory-layered
- 当前 package 版本:0.1.0,许可证 MIT
插件以当前 DSH 进程权限读写本地文件;安装前请自行审阅源码与许可证。SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
双层记忆与有界注入¶
- global:跨项目的事实与约定。
- project:
:当前工作区,与 DSH workspaceRegistry映射。
每层有独立字符预算(默认 global 2000 + project 2000)。超限则拒写,由模型在本回合做整合(hermes 式合并/删减);整合仍放不下的条目 append 到 ARCHIVE.jsonl(可检索、不参与注入、不物理删除)。
版本化、TTL 与用户干预¶
- 每次写入前打快照,
/memory undo可回滚。 - 临时事实可设 TTL,到期进入归档。
- 模型通过
memory工具写入;你可用/memory斜杠命令或手改MEMORY.md(外部编辑若不能 round-trip,会备份并拒绝写入,即漂移检测)。
会话搜索与 Web 记忆面板¶
memory search(及/memory search)可搜注入层、归档,并在配置允许时搜 DSH 会话历史(ctx.sessionQuery)。- Web 对话页输入行有记忆按钮,弹层展示全局/项目两层及使用率。
会话交接摘要¶
长对话切换前,可在记忆弹层的「交接摘要」分区手动生成摘要:host 读取最近 handoffTurns 轮(默认 20),经会话路由调用模型,产出结构化交接(标题 + 目标/结论等小节,默认总长 ≤1500 字符),写入各作用域的 handoffs.jsonl,不占 MEMORY.md 预算。新会话可自动携带最近一条交接(项目层优先、全局兜底),或用手动「带入」预填输入框。注意:快照与交接在会话开始时冻结,需在旧对话生成后再新建对话才会自动携带。
存储布局¶
记忆根目录默认为 $DSH_HOME/memories/(可通过配置 dir 修改):
$DSH_HOME/memories/
├── global/
│ ├── MEMORY.md
│ ├── memory.meta.json
│ ├── ARCHIVE.jsonl
│ ├── handoffs.jsonl
│ └── versions/
└── projects/<workspace-uuid>/
└── (同结构)
会话开始时注入一条冻结快照(<system-reminder> 块,含两层条目与使用率);中途写入只改磁盘文件,不改当次快照前缀,便于 KV cache 整会话有效。
安装与启用¶
本地 link 安装(README 示例路径,请换成你本机克隆目录):
dsh plugin --profile web add "link:D:/dsh_plugin/dsh-memory-layered"
或通过 npm:
dsh plugin --profile web add @deepseek-ai/dsh-memory-layered
装完后重启 dsh web 并刷新页面;并检查 profile 下 node_modules/@deepseek-ai 是否为真实目录(README 引用 hyls9527 仓库 README 中的注意项)。Node 要求:^22.19 || >=24。
配置¶
在 profile 的 cordis.patch.yml 中按插件 id 覆盖:
- id: memory-layered
config:
globalCharLimit: 4000
nudgeInterval: 0
常用字段(默认值以 README 为准):
| 字段 | 默认 | 含义 |
|---|---|---|
memoryEnabled |
true | 开关 |
globalCharLimit |
2000 | global 层字符预算 |
projectCharLimit |
2000 | project 层字符预算 |
nudgeInterval |
10 | 无写入多少轮后提醒;0 关闭 |
versionsKeep |
100 | 版本快照保留数 |
recallLimit |
10 | search 默认返回条数 |
recallSessionHistory |
true | search 是否含会话历史 |
handoffEnabled |
true | 交接摘要开关 |
handoffCharLimit |
1500 | 交接摘要字符上限 |
handoffMaxKeep |
10 | 每作用域保留交接条数 |
handoffTurns |
20 | 生成时摘取最近轮数 |
handoffAutoCarry |
true | 新会话是否自动携带最近交接 |
若要让 memory search 的会话历史部分生效,DSH 的 session-query-sqlite 默认 openAt: never 时会静默降级;可在 profile 补丁中开启:
- id: session-query-sqlite
config:
path: ':memory:'
openAt: first-search
典型用法¶
三个入口¶
| 入口 | 谁 | 动作 |
|---|---|---|
memory 工具 |
模型 | add / replace / remove / batch / archive / search |
/memory 命令 |
你 | list / undo / drop / set-ttl / search(直执行,不进模型) |
手改 MEMORY.md |
你 | 任意编辑;round-trip 则生效 |
/memory 命令¶
/memory list [global|project]
/memory undo [n]
/memory drop <id|子串>
/memory set-ttl <id|子串> <1d|7d|ISO日期>
/memory search <query>
对话里说「记住…」也可触发模型调用 memory 工具。写入流程为:预算检查 → 原子写盘;超限则本回合整合,单回合整合失败超过 3 次会强制停止(ERR_CONSOLIDATION_LIMIT)。
适用场景与注意¶
适合:需要在 DSH Web 里长期保留「跨项目约定 + 单仓库上下文」、希望模型自主整理记忆且你要能 undo、设 TTL、搜归档和会话历史的开发者。
限制(README 已知项):
- 单目录单进程集;多 agent 各自记忆需多个插件行且不同
dir。 - 无 prompt 注入扫描,信任本地记忆文件(与信任 AGENTS.md 类似)。
nudge按轮次而非墙钟。- 注入形态为持久 user message,非系统提示词段(仓库外插件无法注册新事件词表)。
错误码如 ERR_OVER_BUDGET、ERR_DRIFT、ERR_UNREADABLE 等见仓库 README「错误码」表。
结尾¶
dsh-memory-layered 把 DSH 记忆做成双层、有界、可版本回滚的文件体系,并接上斜杠命令、搜索、Web 面板与会话交接,适合在 Harness 生态里做「模型策展 + 人工兜底」的持久上下文。更多说明见 SkillHub 目录页 与 GitHub 仓库。