dsh-memory-guardian:面向 DeepSeek Harness 的可治理长期记忆

前言

在 DeepSeek Harness(DSH)里给 Agent 加「记忆」,常见做法是存进去、搜出来。实际跑起来还会遇到几类麻烦:密码或 Token 被写进本地文件、同一偏好被新旧两条记录静默覆盖、一次召回把整库内容塞进 Prompt,以及事后说不清「记住了什么、为什么被召回」。Memory Guardian 是社区维护者 Ukashi0 发布的记忆类插件,走本地优先路线,在读写之外补上来源、作用域、冲突审核、召回预算和 Web 治理面板。它不依赖 Memmy、ExpMem 或向量库,也不会主动访问网络。

这是什么

插件 npm 包名为 dsh-memory-guardian,当前版本 0.1.1-beta.1(Beta),许可证 MIT。一句话定位:面向 DeepSeek Harness 的可治理长期记忆——自带本地存储、三个模型工具,以及 Settings 里的原生 Web 面板,让跨会话记忆可解释、可审核、有上下文上限。

维护者与仓库:Ukashi0/dsh-memory-guardian。社区目录页:SkillHub 插件页。

与普通 Memory 插件的差异

资料里归纳了四块额外能力:

  1. 记忆安全:密码、Token、私钥等在写入磁盘前直接拒绝;邮箱、手机号等个人信息默认进入隔离区,需人工批准。
  2. 记忆准确性:同一 semantic key 出现新旧不同内容时不静默覆盖,建立冲突并进入 Review Queue。
  3. 上下文预算:单次召回同时限制条数(maxRecallItems)和正文字符数(maxRecallChars)。
  4. 可解释性:保留来源、作用域、重要性、召回次数、风险和生命周期;Privacy Ledger 记录治理事件。

v0.1 使用本地词法检索,不含 Embedding,零第三方运行时依赖,结果可审计。

核心功能

Web 面板

安装后在 DSH 中打开 Settings → Memory Guardian。主要页面:

页面 用途
Memory Vault 浏览 Active、Review、Archived,查看来源与作用域,固定或归档
Recall Lab 输入查询,模拟召回,看重相关性得分与预算消耗
Review Queue 新旧内容对比,选择替代、并存或拒绝;未批准不会进入召回
Privacy Ledger 创建、去重、隔离、召回、归档与凭据拦截记录

界面跟随 DSH 明暗主题,支持键盘焦点、移动端布局与 prefers-reduced-motion。

模型工具

向 Agent 注册三个工具:

工具 说明
memory_remember 保存长期信息;自动去重、敏感检测与冲突隔离
memory_search 词法相关性检查后按相关性、重要性、新近度与固定状态排序;整组执行受预算约束
memory_forget 归档指定记忆并立即排除出召回,可在面板恢复

插件还会注入简短 Memory Policy,说明何时搜索、何时保存及禁止保存的内容。

明确「记住」语句

开启 captureExplicitRequests(默认 true)时,用户用固定格式表达保存意图会被识别,例如:

记住:这个项目统一使用 pnpm
请记住发布前必须运行 npm test
remember: I prefer concise answers

普通聊天不会被整段自动抓取。

数据模型与冲突

每条记录包含:正文、semantic key、分类、标签、重要性、作用域(global/project/agent/team)、来源(session/event)、状态(active/quarantined/archived)、风险、冲突,以及创建/更新/最后召回时间与可选过期。

同一 key 已对应「VS Code」又保存「Zed」时,新记录进 Review Queue,而不是两条矛盾记忆同时影响模型。审核可选 replace(替代旧 Active)或 coexist(并存,召回时带备选提示)。项目作用域使用规范化后的绝对工作目录(来自 Session 的 cwd 或面板选择),路径文本规范化,不调用 realpath。

安装与启用

要求:DeepSeek Harness 0.1.2-rc.1 或更高,Node.js 22 或更高,运行模式以 Web Profile 为主(Host 存储与模型工具也可用于包含所需服务的其他 Profile)。

已发布测试版使用 beta 标签。本机已有 dsh 命令时:

dsh plugin --profile web add dsh-memory-guardian@beta
dsh web

无全局 dsh 时可用 npx:

npx @deepseek-ai/dsh plugin --profile web add dsh-memory-guardian@beta
npx @deepseek-ai/dsh web

本地开发或 tgz 包安装见仓库 README;通过本地目录链接安装时需保留该目录。插件不依赖 Context Sentinel。

Bundle 默认会插入如下配置片段(可在 DSH 配置中调整):

- insert:
    - id: memory-guardian
      name: dsh-memory-guardian
      config:
        maxRecords: 10000
        maxRecallItems: 8
        maxRecallChars: 6000
        captureExplicitRequests: true
        quarantinePersonalData: true

常用配置项:

配置项 默认值 说明
storagePath ~/.dsh/memory-guardian/store.json 本地 JSON 存储
maxRecords 10000 最大记录数(上限 100000)
maxRecallItems 8 单次召回最大条数(上限 50)
maxRecallChars 6000 召回正文字符预算(256–100000)
captureExplicitRequests true 是否识别「记住:……」等明确请求
quarantinePersonalData true 邮箱、手机号、身份证号是否需人工批准
auditLimit 500 本地治理记录数量(上限 5000)

升级前建议备份 store.json;不要让多个 DSH 进程同时写同一存储文件。

典型用法

会话内:让 Agent 调用 memory_remember / memory_search / memory_forget,或发送上述「记住:」格式消息。

面板内:在 Recall Lab 调试查询与预算;在 Review Queue 处理冲突或个人信息的 approve / reject(需当前记录的 reviewToken,过期会 HTTP 409)。

HTTP API(Web Profile,同源):GET /memory-guardian/api/snapshot、POST .../search、POST .../mutate、GET .../export。冲突批准示例:

{
  "action": "approve",
  "id": "<待审核记录 ID>",
  "resolution": "replace",
  "expectedToken": "<当前 reviewToken>"
}

resolution 可为 replace 或 coexist;拒绝新记录用 "action": "reject"。

适用场景与注意

适合:需要在单机、离线环境下做长期记忆,且在意凭据误存、个人信息隔离、语义键冲突和 Prompt 膨胀的 DSH 开发者;希望用面板审计召回与治理流水线的团队内 Web Profile 使用。

注意:

  • 插件以当前 DSH 进程权限读写本地 JSON;本地存储没有额外加密,不可信环境应配合磁盘加密或受保护目录。
  • 检索是词法匹配,不保证语义正确;冲突检测依赖稳定的 semantic key。
  • 不要把 DSH Web 无额外访问控制地暴露到不可信网络。
  • 安装前请自行查看仓库源码与 MIT 许可证;实际兼容性需按你使用的 DSH 版本验证。SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。

结尾

Memory Guardian 把「能记住」推进到「能治理」:本地存储、敏感拦截、冲突审核、有界召回和可观测面板在同一插件内完成。若要试用或贡献,可从 SkillHub 目录页 进入说明,或直接查看 GitHub 仓库 的安装命令与 docs/privacy-and-security.md 威胁模型。

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

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

Xiaoye