@ruqinhu/dsh-memory: DSH Long-Term Memory with Character Limit

前言

在 DeepSeek Harness(DSH)里跑智能体时,「记住用户偏好、项目约定、运维规则」往往靠会话内上下文或手写 system prompt。上下文会随轮次被挤掉;prompt 越写越长,又和每次请求一起计费。社区里也有把记忆文件整段塞进 prompt 的做法,但缺少硬上限时,规则被静默截断、没人察觉的情况并不少见——README 里引用的 Hermes 部署曾出现 MEMORY 超 cap 约 68%、USER 超 cap 约 100% 仍无告警的例子。

@ruqinhu/dsh-memory 是维护者 ruqinhu 发布的 DSH 插件(社区目录分类:记忆),用两份 § 分隔的 Markdown 文档、可配置的字符上限,以及搜索、按 id 读取和带证据的维护流程,把「记忆即 prompt 上下文」这件事做成可预期、可拒绝超限写入的机制。下面介绍它是什么、能做什么、如何安装与日常使用。

这是什么

一句话:面向 DeepSeek Harness 的持久化 agent 记忆插件——整文件注入(在预算内)、关键词搜索、以及有界的维护与冷条目采样。

默认在 ~/.dsh/memory 下维护 MEMORY.md( durable 规则,默认 cap 2200 字符)和 USER.md(用户画像与长期偏好,默认 cap 1375 字符)。超限写入会被拒绝,而不是静默截断。

核心机制与功能

两份文档与硬 cap

文档 默认 cap 内容
MEMORY.md 2200 字符 durable 规则
USER.md 1375 字符 用户画像与长期偏好

记忆随每次请求作为 prompt 上下文注入,因此 cap 是设计约束,不是可选优化。

注入策略

两份文档合计 ≤ 6000 字符时,整份 inline 注入;超过则改为 id + 首行索引,需要时再 memory_get(id) 拉全文(多一次工具调用,但避免挤占工作上下文)。

条目 id 与搜索

  • 条目 id 由 (target, text) 哈希得到,10 位十六进制,前缀 m- / u-;改文案会换 id(有意为之,避免 positional id 在压缩后 silently 指错条目)。
  • memory_search 做关键词匹配;中文用 bigram,ASCII 按 ≥2 字符词切分。
  • memory_recall(需 enableRecall)在 1500 字符预算内按分数注入,放不下的条目跳过,不截断半条规则。

使用证据与维护

侧车文件 .entry-index.json 记录 hits、firstSeenAt、lastHitAt。inline 注入的条目不计数,因此统计是下界。memory_maintenance 会备份、轮转、报告用量,并列出「冷」条目样本:未使用达 staleAfterDays(默认 45 天)、且条目年龄大于 staleMinAgeDays(默认 14 天),最多 12 条、按体积优先——是样本,不是全量清单。

若环境中存在 skill registry,插件会注册 memory-curation skill(enableSkill 默认 true);无 registry 时跳过注册,插件仍可加载。

工具一览

工具 用途
memory_read 读整份文档及用量、条目数
memory_get 按 id 读单条条目全文
memory_search 关键词搜索,返回带分数的 id
memory_recall 搜索并渲染可直接用的块(需开启 recall)
memory_write 替换整份文档(超限拒绝)
memory_append 追加一条(超限拒绝)
memory_replace 精确子串替换,压缩时的基本操作
memory_maintenance 备份、轮转、用量报告、冷条目列表

README 建议:每周用定时任务调用 memory_maintenance,再用 memory_replace 合并或删除条目,直到用量回到 cap 以内。

已知边界(资料原文)

  • 自动 recall 默认关闭;仅在注入切到索引模式后才有典型收益。
  • 跨设备无共享与锁;跨文档重复条目不检测。
  • cap 单位是字符而非 token,换语言环境需重新评估。

安装与启用

插件以当前 DSH 进程权限读写 memoryDir,安装前请自行审阅源码与 MIT 许可证。

官方安装命令(来自 README):

dsh plugin add @ruqinhu/dsh-memory

常用配置项(默认值见 README):

键 默认 含义
memoryCap 2200 MEMORY.md cap
userCap 1375 USER.md cap
enableInjection true 作为动态 prompt 上下文注入
backupKeep 12 保留的备份目录数
memoryDir ~/.dsh/memory 文档与备份位置
enableRecall false 注册 memory_recall
enableAutoRecall false 每轮自动 recall
recallBudgetChars 1500 单次 recall 字符上限
staleAfterDays 45 多久未用视为 cold
staleMinAgeDays 14 更年轻的条目不列入 unused
enableSkill true 有 registry 时注册 memory-curation

运行时依赖 @deepseek-ai/schemastery;@deepseek-ai/dsh-skill 为可选 peer,缺失时无 skill,不影响插件本体。

典型用法

1、安装并确认 enableInjection 为 true 后,智能体每轮会在预算内看到记忆内容或索引。

2、需要查某条规则时,先搜索再按 id 读取。README 实测示例:memory_search("网关") 得到 id(如 m-efa7252010),再 memory_get 返回完整条目(示例中为 95 字符),侧车 hits 会增加。

3、写入或追加前留意 cap;若被拒绝,用 memory_maintenance 看用量与 cold 样本,用 memory_replace 做压缩,而不是指望截断。

4、可选:开启 enableRecall 注册 memory_recall;索引模式下再考虑 enableAutoRecall(默认关)。

适用场景与注意

适合:需要在 DSH 里长期保存少量高价值规则与用户偏好、且希望超限写入失败而非静默丢内容的开发者或运维型 agent 部署。

注意:

  • 插件与 DSH 同进程权限,记忆目录含备份,部署环境需自行隔离与备份策略。
  • recall 失败会被吞掉,不会拖垮整轮对话;侧车损坏会在下次 sync 时当空重建。
  • 社区目录 skillhub.cn 为独立生态站点,与 DeepSeek / 幻方无官方从属关系;星标等页面元数据以目录为准(资料抓取时为 0)。

结尾

@ruqinhu/dsh-memory 把长期记忆收成两份有 cap 的文档、可导航的 content-derived id,以及拒绝超限写入和带采样的维护路径,适合在 DSH「一切皆插件」的架构里替代无上限的整文件堆 prompt。

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

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

Xiaoye