dsh-global-memory:把跨会话要求写进每一次 system prompt

前言

在 DeepSeek Harness(DSH)里做智能体或日常编码助手时,同一条约束往往会重复出现:用简体中文回复、改完要跑测试、不确定就直说。新开会话、换任务、换 agent 都要再说一遍,容易漏,交接也不稳定。

DSH 的生态思路是「一切皆插件」:能力通过 profile 里的 bundle 装配,而不是改宿主核心。社区插件目录在 SkillHub 等站点维护,与 DeepSeek / 幻方无官方从属关系。下面介绍维护者 07vvvv 发布的记忆类插件 dsh-global-memory(GitHub:07vvvv/dsh-global-memory),它把「一条全局要求」固化成本地 JSON,并在宿主组装 system prompt 时自动注入,实现写一次、后续每次会话都遵循。

这是什么

dsh-global-memory 是面向 DSH 的全局记忆插件:一段跨会话、跨任务的常驻文本,会被注入每一个会话的 system prompt,因此模型在每次任务里都会看到同一段约束。

插件提供三条读写同一真源的链路:自动注入、global_memory Agent 工具、设置页「全局记忆」面板,以及同源 HTTP API /global-memory/api/*。许可证为 MIT,要求 Node.js >=22;包版本在仓库 package.json 中为 0.1.0。

与同类插件 memory-eternal 的全局总记忆功能对标,但实现完全独立:本插件使用 $DSH_HOME/global-memory.json,prompt 段名为 global-memory、order 555;memory-eternal 使用自己的存储与段 order 600。两者可同时安装,互不读写对方模块。

核心功能

每轮自动注入

宿主在每轮对话组装 system prompt 时,插件通过 ctx.systemPrompt.section({ name: 'global-memory', order: 555, text }) 注入正文。正文或开关变化后会立刻重建段内容,下一次请求(下一条消息)即生效,无需重启宿主。

当 text 为空字符串时不注入;运行期 enabled: false 时也不注入,但正文仍保留在文件中。

Agent 工具 global_memory

模型可在用户要求「记住全局要求」「以后每次都…」或需要确认当前全局要求时调用。参数为 { action: string, text?: string },action 必填,共 7 种:

action 是否需要 text 作用
get 否 读取状态与正文
set 是 整体替换正文(不改 enabled)
append 是 末尾追加一条,并自动启用
clear 否 正文置空
reset 否 恢复内置默认正文并启用
enable / disable 否 打开或关闭注入(正文保留)

写入成功后同样会立刻重建 prompt 段。

设置页与 HTTP API

在 DSH 设置中出现 全局记忆 分区:可编辑正文、查看字符数与更新时间、保存(支持 Ctrl/⌘ + S)、启用/禁用、恢复默认、重新加载。

同源 API 前缀为 /global-memory/api,例如查询状态:

curl -s http://127.0.0.1:<宿主端口>/global-memory/api/state

成功时返回 JSON,包含 ok、enabled、text、chars、updatedAt、path 等字段。<宿主端口> 即打开 GUI 时使用的端口。

存储与开关

默认存储路径为 $DSH_HOME/global-memory.json;未设置 DSH_HOME 时回退为 ~/.dsh(Windows:%USERPROFILE%\.dsh)。

字段 说明
version 结构版本,当前为 1
enabled 运行期是否注入
text 全局记忆正文
updatedAt 最后一次写入的 ISO 8601 时间

读取失败(文件缺失、JSON 损坏、类型不对)时回退默认值且不抛异常,损坏时不会自动覆盖原文件;写入采用临时文件再 rename 的原子方式。

两层开关语义不同:

  • 配置层 cordis.patch.yml 中 config.enabled: false:整插件不加载,注入、工具、API 均不存在。
  • 运行期 global-memory.json 的 enabled: false 或工具/设置页/HTTP 关闭:仅停止注入,工具与路由仍可用。

卸载插件不会删除 global-memory.json;若希望「空且不注入」,应先清空正文并关闭运行期开关,再按需删文件。仅删文件时插件会回退为内置默认正文并启用。

安装与启用

前提(见仓库 README):

  • DSH 宿主版本 >=0.1.5-alpha.2 <0.2.0,profile 为 web 或 desktop。
  • Node.js >=22。
  • Profile 目录:~/.dsh/profiles/<profile>/(Windows:%USERPROFILE%\.dsh\profiles\<profile>\)。

仓库未提供 dsh plugin add github:... 一类一键命令;常见做法是手工接入 profile 或使用已安装的插件管理/注入器。

方式 A:登记 profile 的 package.json

1、取得插件源码目录(路径记为 <插件目录>,需包含 index.js 与 cordis.patch.yml)。

2、编辑 profile 的 package.json,在 dependencies 中增加 link: 依赖,并在 dsh.profile.bundles 数组追加 dsh-global-memory(勿整段替换 bundles,以免其它插件被移除):

{
  "dependencies": {
    "dsh-global-memory": "link:<插件目录>"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-global-memory"
      ]
    }
  }
}

路径建议使用正斜杠 /,便于跨平台。

3、在 profile 目录建立 node_modules 链接(若包管理器已支持 link: 并完成安装可跳过)。类 Unix 示例:

cd ~/.dsh/profiles/<profile>
mkdir -p node_modules
ln -s "<插件目录>" node_modules/dsh-global-memory

4、重启宿主。dependencies 与 bundles 在宿主启动阶段解析,新增 bundle 后需重启一次。

5、验证:日志出现 [global-memory] 已加载:注入中,<N> 字,存储 <路径>;设置页有「全局记忆」;上述 curl 能拿到 ok: true。

若修改了 src/client/**,需在插件目录执行 npm install 与 npm run build:client 重建 lib/client.js;默认使用仓库已提交的构建产物,通常可跳过。

方式 B:插件管理 UI / 运行时注入器

若环境中已有带安装能力的插件(例如 dsh-super-injector),可将插件目录交给其安装入口,例如一次性装配:

dev_install_package(dir = "<插件目录>")

临时试用、不写 profile 时可用 dev_inject_plugin(dir = "<插件目录>");卸载用对应插件提供的 dev_uninject_plugin 等入口。具体参数以该插件文档为准;若无此类工具,使用方式 A。

配置层可在 profile 的 cordis.patch.yml 中按 id global-memory 覆盖 config.enabled。

典型用法

在设置页维护正文
打开 设置 → 全局记忆,写入例如「回复使用简体中文;修改代码后运行项目测试;无依据的结论需标明不确定。」保存后,下一条消息起的 system prompt 即包含该段。

通过工具追加约束
用户说「以后每次改 API 都要更新 OpenAPI 注释」时,模型可调用 global_memory,action=append,text 为具体句子;成功后设置页刷新即可看到合并结果。

暂时关闭注入
不想影响当前会话风格时,在设置页关闭「已启用」,或 POST /global-memory/api/enabled,body {"enabled":false};正文保留,需要时再 enable。

与 memory-eternal 并存
各自段 order 不同(本插件 555,memory-eternal 600),可同时承载不同层次的记忆策略,互不共享存储文件。

适用场景与注意

适合需要稳定、可审计的全局行为约束的团队或个人:编码规范、语言偏好、测试与披露原则等,且希望新会话无需重复口述。

安装前请注意:

  • 插件以当前 DSH 进程权限运行;权限声明为 low 级,仅读写 $DSH_HOME/global-memory.json,不联网、不起子进程。仍建议在安装前阅读 仓库源码 与 MIT 许可证。
  • 宿主版本需落在 README 声明的兼容区间内;不匹配时行为未在资料中保证。
  • 全局记忆会进入每次会话的 system prompt,正文过长会占用上下文,宜保持简短、可执行。

结尾

dsh-global-memory 把「写一次、每次都遵循」的全局要求落到本地 JSON,并通过注入段、global_memory 工具与设置页/API 三条链路保持一致。若你已在用 DSH 的 web 或 desktop profile,可按 profile 手工 link 或借助注入器装配,再用日志、/global-memory/api/state 与设置页确认生效。

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

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

小夜