dsh-memory: Implementing Human-like Long-term Memory for DSH Agents

前言

在 DeepSeek Harness(DSH)里给 agent 加「记忆」,常见做法是向量库做相似检索、把对话历史堆进上下文,或用一个简单的 key-value 表。这些方式要么不会随时间变弱,要么上下文一满就整段丢掉,也没有「被线索唤起」而不是精确查询的行为。

dsh-memory 是社区维护者 Soulmate793 发布的 DSH 插件(分类:记忆),把遗忘、巩固、线索召回、分区隔离等机制做成可运行的本地存储,数据默认只落在本机目录,无第三方 npm 依赖。下面介绍它解决什么问题、如何安装,以及七个记忆工具的典型用法。

这是什么

插件全名在仓库中为 dsh-memory(GitHub:Soulmate793/dsh-memory),当前 package 版本 1.1.0,许可证 MIT。简介概括为:Human-like memory plugin for DeepSeek Harness——艾宾浩斯式衰减、睡眠巩固、记忆分区、哈希链审计;纯本地、零外部依赖。

与「只增不减的向量库」或「无限增长的对话日志」相比,它强调:记忆有强度会衰减;被回忆会略作强化;空闲时可合并情节并升格为语义记忆;召回依赖线索词重叠而非精确匹配;自我、关系、情节等七个分区各有衰减与隐私策略(隔离区 vault 默认不参与召回)。

核心功能

记忆行为

机制 说明
艾宾浩斯遗忘 强度按指数曲线衰减;重要度、情绪越高,衰减越慢
提取强化 每次被 memory_recall 命中,基础强度回补,并更新访问时间
睡眠巩固 memory_consolidate 对情节记忆聚类合并、去重,高价值条目升格为语义记忆
线索依赖召回 IDF 加权特征重叠,并结合强度、近因、重要度与分区权重打分;无词重合则不会返回
工作记忆 最近消息的环形缓冲,过期丢弃,不写入长期库

v1.1 相关能力(README 标注)

  • 记忆分区:self / relationship / episodic / semantic / life / learning / vault,各区独立衰减、检索权重与隐私策略
  • 关系台账:为对话对象维护 relationships.json,可按人注入
  • 固定记忆:memory_pin 将关键记忆设为不遗忘(文档在「新增能力」中列出)
  • 情绪与性格:8 维情绪与性格成长,支持 emotion_set(可选模块)
  • 容量:配置 maxItems: 500000,环境变量 MEMORY_MAX_ITEMS 可覆盖
  • 锁自愈:异常退出留下的僵尸锁会被自动清理

审计与可选模块

每次写入、更新、遗忘会向 Ed25519 签名的哈希链追加事件;memory_chain_verify 可校验链连续性与和 memory.json 的对账。可选文件包括情绪、性格、人物画像、学习库、语义向量、联想图等,均位于同一 dataDir。

安装与启用

环境要求:Node.js >= 20,仓库声明无第三方 npm 依赖。

方式一:作为 DSH bundle 安装(README 推荐)

将仓库放到本机绝对路径后,通过插件管理器安装 bundle(路径需替换为你的实际目录):

plugin_manager(action: "install_bundle", target: "<绝对路径>/dsh-memory-plugin")

安装后重启 DSH,agent 会获得 7 个记忆相关工具。

方式二:手动放进 profile

  1. 把仓库目录加入 profile 的 bundle 列表
  2. 在 cordis.patch.yml 中启用 memory 行(可参考仓库自带 patch)
  3. 重启 DSH

配置片段

在 cordis.patch.yml 中插件注册示例:

- insert:
    - id: memory
      name: 'dsh-memory'
      config:
        memory:
          dataDir: ''          # 留空 = ~/.dsh/qq-memory
          maxItems: 500000     # 容量上限,超出按强度淘汰
          recallLimit: 8       # 默认召回条数
          includeVault: false  # 默认不读取隔离区

环境变量 MEMORY_DIR 可覆盖 dataDir。

典型用法

数据默认在 dataDir(留空时为 ~/.dsh/qq-memory/),主要文件包括 memory.json、memory-chain.jsonl 及链相关密钥文件;插件仅读写该目录,README 说明无网络请求。

下面示例来自仓库 README,展示记住偏好、按线索回忆、分区查询、巩固与审计:

# 记住一个偏好
memory_remember({
  text: "她喜欢下雨天,讨厌香菜",
  kind: "semantic",
  importance: 0.7,
  tags: ["preference"],
  zone: "relationship"
})

# 按场景回忆
memory_recall({ query: "她喜欢什么天气", limit: 5 })

# 只在自我区回忆
memory_recall({ query: "我是谁", zone: "self" })

# 读取隔离区(需显式允许)
memory_recall({ query: "暗号", zone: "vault", include_vault: true })

# 空闲时巩固
memory_consolidate()

# 审计
memory_chain_verify()

常用工具还包括 memory_stats(库统计)、memory_zones(分区统计)、memory_forget(软删除,链上留痕)。参数细节见仓库 docs/tools.md。

适用场景与注意

适合谁:希望在 DSH 里做长期、可衰减、可分区、可本地审计的 agent 记忆,且不接受默认「全量向量检索 + 永不忘」模型的开发者。

运行与信任边界:插件以当前 DSH 进程权限读写本地文件;安装前请自行查看源码与 MIT 许可证。memory-chain-key.pem 丢失后无法验证历史链,README 建议备份。隔离区目前策略为默认不召回,路线图提及未来可能增加加密存储,当前并非加密 vault。

共享与上限:同一机器、同一 dataDir 可在多 agent/会话间共享;多进程写入有文件锁。超过 maxItems 时按强度淘汰最弱条目。重启 DSH 不会清空已持久化记忆。

社区目录页(与 DeepSeek / 幻方无官方从属关系):skillhub.cn 插件页。源码与完整设计文档:GitHub 仓库。

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

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

Xiaoye