前言¶
在 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 记忆插件——整文件注入(在预算内)、关键词搜索、以及有界的维护与冷条目采样。
- 维护者:ruqinhu
- 仓库:https://github.com/ruqinhu/dsh-memory
- 社区目录:https://www.skillhub.cn/plugins/ruqinhu/dsh-memory
- 许可证:MIT(见仓库 LICENSE)
- 当前 package 版本(资料来源 package.json):0.3.2
- peer 对齐的 DSH 版本:0.2.1-rc.5;运行时 Node 22+,无 native 模块
默认在 ~/.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。