前言¶
DeepSeek Harness (DSH) 的 agent 默认仅依赖当前对话的上下文,一旦关闭对话窗口或切换会话,之前的交互记录就会丢失。dsh-persist 通过文件系统将记忆分层存储,支持按需注入,解决了 agent “换对话就失忆” 的问题。
核心功能¶
该插件提供以下核心能力:
* 对话独有记忆:每个对话拥有独立的记忆文件,其他对话无法访问,互不干扰。
* 选择性注入:默认新对话零注入,在记忆 tab 勾选需要的内容后,才会将对应记忆加入上下文。
* 项目记忆互通:同一工作目录下的对话可共享项目记忆,不同命名项目之间隔离。
* Vault 语义检索:基于 bge-m3 模型的向量搜索,支持按语义召回记忆;未配置 key 时自动降级为关键词搜索。
* 自动召回(三态模式):记忆 tab 中的自动检索功能提供三种模式:关闭(默认)、智能(本地规则过滤)、LLM 判断(调用模型判断是否需要检索,失败自动降级为智能)。
* 记忆 tab:对话顶部的可视化 tab,支持编辑记忆、勾选注入配置以及实时预览。
* 全部纯文本:所有记忆以 Markdown 格式存储在 ~/.dsh-memory/ 目录下,人类可读、可手动编辑、易于备份。
* 组合包:标准 DSH bundle,通过 dsh plugin 命令安装。
安装与启用¶
安装过程包含两步:安装插件并重启 DSH。
- 在终端执行安装命令:
dsh plugin --profile web add dsh-persist
- 重启 DSH 以加载插件:
dsh --profile web
插件安装后即可使用。如需开启语义检索功能,需申请 SiliconFlow 的免费 API Key 并设置环境变量 SILICONFLOW_API_KEY。
使用方法¶
基本操作¶
安装并重启后,打开任意对话,顶部会出现“记忆”tab。默认情况下不注入任何内容,需手动勾选要注入的块。
Agent 也可以通过 memory 工具主动读写记忆。工具的 scope 参数决定读写范围:
* scope="conversation":写入/读取当前对话记忆(默认)。
* scope="project":写入/读取当前工作目录的项目记忆。
* scope="global":写入/读取全局 keyed 记忆。
语义 Vault 操作¶
Vault 用于存储需要语义检索的内容,支持 add、delete、import、export 等操作:
memory(vaultOp="add", content="...")
memory(vaultOp="delete", query="...")
memory(vaultOp="import")
代码示例¶
让 Agent 记住内容或查询记忆:
// 写入对话记忆
memory(action="add", scope="conversation", content="用户偏好使用空格缩进")
// 写入项目记忆(同目录其他对话可共享)
memory(action="add", scope="project", content="构建脚本位于 build.ps1")
// 写入全局键值对
memory(action="add", scope="global", key="user-name", content="小明")
// 查询对话记忆
memory(action="list")
适用场景与注意¶
- 适用场景:需要长期保持上下文、跨会话复用经验的 agent 开发,以及需要整理个人知识库的用户。
- 环境要求:宿主环境 Node.js 版本需 >= 22.6(推荐 24+)。
- 隐私与安全:
- 启用语义搜索(
SILICONFLOW_API_KEY)后,消息内容会发送给 SiliconFlow 进行向量化。 - 启用 LLM 判断模式会将消息发送给指定的模型提供商。
- API 路由
/dsh-memory/api/*默认仅允许 loopback 访问,如需远程访问请设置DSH_MEMORY_ALLOW_REMOTE=1。
- 启用语义搜索(
- 数据迁移:插件曾用名为
dsh-memory,存储路径和路由未变,旧数据无需迁移。
结尾¶
dsh-persist 通过分层存储和纯文本格式,为 DSH agent 提供了可控的长期记忆能力。插件位于 GitHub 与 SkillHub。