dsh-destinywind-memory:DSH 长期记忆库与三层系统提示注入

前言

在 DeepSeek Harness(DSH)里跑 Agent,常见痛点是:偏好、项目约定、禁止事项写在对话里,换会话或新开窗口就丢;若把长文塞进技能或磁盘文档,模型又不一定在每轮都读到。社区插件 dsh-destinywind-memory(维护者 rickwindman)用 SQLite 持久化记忆,并把条目注入每一个会话的系统提示;v2 起放弃 Markdown 文件存储,避免正文里的 ##、注释等被解析器静默拆条或改义。下面介绍它做什么、怎么装、怎么用。

这是什么

dsh-destinywind-memory 是 DSH 的「记忆」类插件:在 Web GUI 设置里增删记忆,可选 HTTP API 脚本改数,Host 侧把全库写入系统提示,并对「硬性约束」再做运行时强化。实现上不修改 DSH 其它文件,纯插件通过 dsh.bundle.patch 接入。

核心功能

设置页「记忆」

设置导航新增「记忆」页(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 建议:记忆会进入每一个对话的系统提示,宜短。

  1. 约束型信息(「必须/禁止」类)一行一条,可带 约束 标签。
  2. 长知识写成技能,记忆里只留一句索引;技能正文放在 %USERPROFILE%\.dsh\skills\<名字>\SKILL.md。
  3. 更大资料放磁盘文档,记忆里只写路径。

适用场景与注意

适合:需要跨会话稳定的项目规范、个人偏好、简短背景索引;希望约束类条目在 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 接入自动化。

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

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

Xiaoye