前言¶
在 DeepSeek Harness(DSH)里跑 Agent,常见痛点是:偏好、项目约定、禁止事项写在对话里,换会话或新开窗口就丢;若把长文塞进技能或磁盘文档,模型又不一定在每轮都读到。社区插件 dsh-destinywind-memory(维护者 rickwindman)用 SQLite 持久化记忆,并把条目注入每一个会话的系统提示;v2 起放弃 Markdown 文件存储,避免正文里的 ##、注释等被解析器静默拆条或改义。下面介绍它做什么、怎么装、怎么用。
这是什么¶
dsh-destinywind-memory 是 DSH 的「记忆」类插件:在 Web GUI 设置里增删记忆,可选 HTTP API 脚本改数,Host 侧把全库写入系统提示,并对「硬性约束」再做运行时强化。实现上不修改 DSH 其它文件,纯插件通过 dsh.bundle.patch 接入。
- 目录页:skillhub.cn/plugins/rickwindman/dsh-destinywind-memory
- 源码与说明:github.com/rickwindman/dsh-destinywind-memory(MIT,当前 package 版本 2.0.0)
- 运行环境:Node ≥ 22.5(使用内置
node:sqlite,无额外原生依赖)
核心功能¶
设置页「记忆」¶
设置导航新增「记忆」页(settings.section Slot,order: 16),位置在「插件」之下、「技能」之上。可添加(带可选标签)、浏览、删除条目,或点「刷新」重新读取。
SQLite 原样存取¶
记忆保存在 SQLite 文件 memory.sqlite,正文写进去是什么、读出来就是什么,不受 Markdown 语法影响。
默认路径(Windows 示例):
%USERPROFILE%\.dsh\destinywind-memory\memory.sqlite
DSH_HOME 环境变量可覆盖 DSH 数据根目录。表结构含 memories(id、title、text、created_at)与 tags(按条目关联、保留标签顺序)。限制(资料原文):正文最多 8000 字符(超出截断)、标签最多 12 个、条目最多 1000 条。v2 不再维护 Markdown 镜像;memory.md 仅在自 v1 升级时读一次并改名为 memory.md.v1.bak。
三层注入,让约束更难被跳过¶
插件把记忆拆成「硬性约束(必须遵守)」与「背景知识(相关时参考)」,并注入三处:
| 位置 | 内容 | 作用 |
|---|---|---|
系统提示 order: 216 |
全库,分两组呈现 | 区分必须遵守与背景资料 |
运行时上下文 order: 100(user 角色快照) |
仅硬性约束 | 短指令更易被遵循;每轮刷新不堆积 |
系统提示 order: 9999(末尾) |
一行「记忆核对」提醒 | 利用末尾 recency,动手前自检 |
硬性约束的判定:标签含「约束/规则/偏好/规范/要求」或 constraint,或正文含「必须/禁止/不要/不得/务必/一定要/只能/只用/都要/偏好/约束/规则/规范」等词;也可显式加 约束 标签。末尾提醒可在 patch 配置中关闭:
config:
tailReminder: false
从 v1 自动迁移¶
v2 首次启动会一次性从旧格式导入(.migrated-to-sqlite 标记),包括 destinywind-memory/memory.md(v1.1)、memory.json(v1.0)、以及更早插件名 hindsight-memory/memory.json;成功后原文件改名备份。若库中已有条目则不再合并遗留文件。注意:v1 因 ## 解析已发生的拆条损坏无法自动还原,导入后宜核对条目数。
HTTP API(可选)¶
与设置页同源,便于脚本维护记忆(端口以实际 dsh web 为准,不必是 3080):
| 操作 | 请求 |
|---|---|
| 列表 | GET /dsh-destinywind-memory/memories |
| 新增 | POST /dsh-destinywind-memory/memories,body { text, title?, tags? } |
| 删除 | DELETE /dsh-destinywind-memory/memories/<id> |
PowerShell 新增示例(资料原文,请将 $port 换成你的 Web 端口):
$port = 19387 # 换成你的实际端口
$body = @{ text = '记忆正文'; tags = @('标签') } | ConvertTo-Json
Invoke-RestMethod -Method POST -Uri "http://127.0.0.1:$port/dsh-destinywind-memory/memories" `
-Body ([System.Text.Encoding]::UTF8.GetBytes($body)) `
-ContentType 'application/json; charset=utf-8'
安装与启用¶
插件声明了 dsh.bundle.patch,安装 bundle 后需重启 dsh web 生效;改 client.js 则刷新页面即可。
从 GitHub 安装(README 原文写法,将 target 换为仓库):
plugin_manager { action: "install_bundle", target: "rickwindman/dsh-destinywind-memory" }
卸载不会删除 memory.sqlite;若要清空记忆需自行删除数据目录下的数据库文件。
DSH 生态是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 dsh 进程权限运行,安装前请自行查看源码与 MIT 许可证。
典型用法与写法建议¶
README 建议:记忆会进入每一个对话的系统提示,宜短。
- 约束型信息(「必须/禁止」类)一行一条,可带
约束标签。 - 长知识写成技能,记忆里只留一句索引;技能正文放在
%USERPROFILE%\.dsh\skills\<名字>\SKILL.md。 - 更大资料放磁盘文档,记忆里只写路径。
适用场景与注意¶
适合:需要跨会话稳定的项目规范、个人偏好、简短背景索引;希望约束类条目在 system 与 user 快照里被重复强调的场景。
注意:
- 全库注入所有会话,条目过多或正文过长会占用上下文;遵守 8000 字、1000 条等上限。
- API 与 Web GUI 同端口,仅在本地或你信任的网络环境中暴露。
- Host 侧改动需重启
dsh web;存储层与端到端行为可用仓库内npm test或分别运行node tests/store-sqlite.test.mjs、node tests/memory-bank.test.mjs自测(非安装必需)。
结尾¶
dsh-destinywind-memory 用 SQLite 做 durable 长期记忆,并通过三层注入区分约束与背景,弥补「只写一句请参考」容易被模型略过的不足。安装 bundle、重启 Web 后即可在设置「记忆」页维护,或用 HTTP API 接入自动化。