dsh-memory-layered:DSH 双层有界文件记忆

前言

在 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。

插件以当前 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 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜