dsh-memory:DeepSeek Harness 的跨会话持久记忆插件

前言

在构建基于 DSH 的智能体时,对话上下文会随会话结束而丢失。要让模型在不同会话中保持连续记忆,需要一套可持久化、可编辑、可检索的方案。dsh-memory 是一个专为 DeepSeek Harness 设计的跨会话持久记忆插件,基于 Grok Build 的记忆模型实现,提供全局与工作区两个作用域、结构化笔记、会话日志捕获与检索能力。

插件定位与维护者

dsh-memory 是一个 Host-only 插件包,依赖仅限于 Node.js 内置模块。它将持久化记忆存储为 Markdown 文件,支持全局共享与工作区隔离,通过工具与命令接口提供检索、写入与遗忘能力。插件由 douglarek 维护,目前分类为「记忆」。

核心能力

作用域与存储结构

  • 全局作用域:存储在 $DSH_HOME/memory/global/,每个项目共享
  • 工作区作用域:存储在 $DSH_HOME/memory/workspaces/<slug>-<hash8>/,每个仓库独立
  • 目录结构:
  • topics/<topic>.md:人工整理的笔记,按主题分文件
  • observations/_inbox/*.md:待处理或临时观察笔记
  • sessions/:会话日志,按日期与会话 ID 分文件
  • MEMORY.md:由系统生成的索引,在写入后重建

会话捕获与索引注入

  • 每完成一轮对话,记录会话日志(若满足最小字符数等条件)
  • 第一轮对话时注入一份紧凑的记忆索引,作为持久化的用户角色消息
  • 在 compaction/end 后刷新索引,保证索引与最新写入同步
  • 检索时基于 BM25 全文检索,支持时间衰减、来源权重与可选 MMR

模型工具与用户命令

  • 模型工具:memory_search、memory_get、memory_list、memory_remember、memory_forget
  • 用户命令:/memory、/remember、/forget、/dream、/flush
  • 提示中包含 <memory> 系统提示段,说明工具使用时机与方法

检索与中文支持

  • 使用 BM25 全文检索,支持时间衰减与来源权重
  • 可选 MMR 进行多样性与相关性的平衡
  • 中文检索使用 CJK 单字与双字分词,无需额外分词器即可匹配

安装与启用

通过 plugin_manager(推荐)

plugin_manager { action: "install_bundle", target: "github:douglarek/dsh-memory" }

安装完成后,使用 memory_list 验证。若工具不可用,重启 DSH 或开启新会话。

通过 CLI(非 desktop profile)

dsh plugin --profile "$DSH_PROFILE" add github:douglarek/dsh-memory

若 DSH_PROFILE 未设置,请先询问用户获取配置文件名称。

本地检出

plugin_manager { action: "install_bundle", target: "/absolute/path/to/dsh-memory" }

注意:不要手动修改 profile 的 package.json 或 cordis.patch.yml,也不要在 profile 目录中运行 pnpm。

配置示例

在 profile 的 patch 中添加或修改插件行:

- id: dsh-memory
  name: 'dsh-memory'
  config:
    enabled: true
    memoryDir: ''                 # 默认 $DSH_HOME/memory
    scopeGlobal: true
    scopeWorkspace: true
    toolsEnabled: true
    promptEnabled: true
    commandsEnabled: true
    captureEnabled: true
    injectEnabled: true

配置项说明

核心配置

  • enabled:总开关,设为 false 时不注册任何功能
  • memoryDir:记忆根目录,空值则使用 $DSH_HOME/memory,~ 会展开
  • scopeGlobal:启用全局作用域
  • scopeWorkspace:启用工作区作用域
  • toolsEnabled:注册五个记忆工具
  • promptEnabled:添加 <memory> 系统提示段
  • commandsEnabled:注册用户命令(需命令服务挂载)
  • promptInstructions:替换默认 <memory> 提示段

捕获配置

  • captureEnabled:是否将完成的对话轮次追加到会话日志
  • captureSubagents:是否捕获子代理会话
  • captureMinTurnChars:最小轮次字符数阈值
  • captureMaxUserChars、captureMaxAssistantChars:单轮用户/助手文本上限
  • captureMaxEntryChars:单条会话日志上限
  • captureMaxFileBytes:达到上限后轮转日志文件

注入配置

  • injectEnabled:是否注入记忆索引
  • injectSubagents:是否注入到子代理会话
  • injectAlways:当记忆为空时是否注入提示
  • injectAfterCompaction:在 compaction/end 后刷新索引
  • injectMaxBytes、injectMaxTopics、injectMaxObservations、injectMaxSessions:索引大小与条目上限

检索与索引配置

  • searchMaxResults:默认结果数
  • searchMinScore:默认分数阈值
  • searchHalfLifeDays:时间衰减半衰期(0 禁用)
  • searchMmrEnabled、searchMmrLambda:是否启用 MMR 及平衡系数
  • searchMaxFiles、searchMaxFileBytes、searchMaxChunks:文件扫描与索引上限
  • searchStalenessDays:对超过指定天数的会话结果添加陈旧提示
  • searchIncludeIndex:是否索引生成的 MEMORY.md
  • searchSourceWeights:各来源分数乘数
  • chunkMaxChars、chunkOverlapChars:索引分块大小与重叠量
  • indexMaxBytes、indexMaxEntries:生成索引大小与条目上限
  • skipTemporaryWorkspaces:是否对临时目录工作区禁用记忆

典型用法

  1. 安装插件并启用默认配置
  2. 在会话中使用 /memory 命令或工具 memory_remember 记录关键事实
  3. 使用 memory_search 检索历史笔记
  4. 通过 Markdown 文件手动编辑 topics/ 与 observations/_inbox/ 中的内容
  5. 会话结束后,日志自动写入 sessions/ 目录

适用场景与注意

  • 适合需要跨会话保持上下文连续性的 DSH 工作流,如长期项目助手、知识库整理与代码审查场景
  • 插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证
  • 不包含 UI 面板,记忆浏览与编辑需通过工具与命令或直接修改文件完成

小结

dsh-memory 为 DeepSeek Harness 提供了一套可持久化、可编辑、可检索的记忆方案。通过全局与工作区作用域、会话日志捕获、检索索引注入以及工具与命令接口,让模型在多次会话中保持一致性与可追溯性。插件目录:https://www.skillhub.cn/plugins/douglarek/dsh-memory | 代码仓库:https://github.com/douglarek/dsh-memory

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

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

小夜