dsh-memory:基于 DSH 会话日志的带引用记忆

前言

智能体在多轮会话中会积累用户偏好、项目决定、环境差异和用户纠正。如果只把这些信息压缩成摘要,摘要可能失真,后续也说不清某条记忆从何而来。DSH 已有无损会话日志,dsh-memory 在此基础上做带引用记忆:会话结束后把蒸馏出的事实写成人类可审计的 Markdown,并让每条记忆可回追到精确原始日志事件。

下面介绍 dsh-memory 的定位、能力、安装方式和典型用法。

这是什么

dsh-memoryJesse-njx 维护的 DeepSeek Harness(DSH)bundle,仓库名为 Jesse-njx/dsh-memory

它的核心价值是:

  • 基于 DSH 无损会话日志;
  • 将蒸馏事实写成 Markdown memory 文件;
  • 每条 memory 带 citation,可指向精确 sessionId 与日志事件范围;
  • 提供紧凑 recall index、memory_readmemory_expanddsh-memory CLI 和会话内 /memory 命令。

许可证为 MIT。standalone dsh-memory binary 是纯 Node 实现,要求 Node >=20

核心功能

会话结束后蒸馏事实

会话结束后,dsh-memory 会通过后台 distillation 异步抽取持久事实,并写入 Markdown memory 文件。

默认路径为:

~/.dsh/memory/

项目记忆位于:

~/.dsh/memory/<project>/*.md

user 记忆位于:

~/.dsh/memory/_user/*.md

蒸馏 pass 会更新或反驳既有 memory,并记录到:

<project>/_distill.log

该日志文件为 JSONL。

每次 prompt assembly 提供 recall index

每次 prompt assembly 时,dsh-memory 会渲染一个紧凑、token 受限的 recall index。

maxIndexTokens 是注入 recall index 的硬 token 上限。

从记忆回追原始日志

每条 memory 带 citation,可指向精确 sessionId 与日志事件范围。

它提供两个工具:

memory_read(name)
memory_expand(name, [citation_index])

memory_read(name) 用于读取完整 memory 文件。

memory_expand(name, [citation_index]) 用于返回被引用的原始日志摘录。

maxExpandBytes 是单次 memory_expand 输出的字节上限。

维护、类型与遮蔽

dsh-memory 支持三种 memory 类型:

  • user
  • project
  • feedback

同名 project memory 会遮蔽 user memory。

它还提供:

dsh-memory list
dsh-memory show
dsh-memory edit
dsh-memory delete
dsh-memory distill-log

会话内也提供:

/memory
/memory <name>

安装与启用

安装命令如下:

dsh plugin --profile web add @dsh-memory/bundle

配置字段均为可选。下面是一个配置示例:

plugins:
  dsh-memory:
    enabled: true
    home: ~/.dsh/memory
    maxIndexTokens: 800
    maxExpandBytes: 8192
    distill:
      provider: deepseek-official
      model: deepseek-v4-flash
      maxTranscriptTokens: 16000

字段含义:

  • enabled:是否启用;
  • home:memory root 路径;
  • maxIndexTokens:recall index 的硬 token 上限;
  • maxExpandBytes:单次 memory_expand 输出的字节上限;
  • distill.provider:蒸馏使用的 provider;
  • distill.model:蒸馏使用的 model;
  • maxTranscriptTokens:限制进入蒸馏的 transcript 长度,超限时最旧事件被丢弃。

distill 默认复用当前会话 provider/model,也可以用 distill.providerdistill.model 覆盖。

典型用法

会话内查看

在会话中使用:

/memory

查看列表。

使用:

/memory <name>

查看指定 memory。

工具调用

读取完整 memory:

memory_read(name)

返回被引用的原始日志摘录:

memory_expand(name, [citation_index])

citation_index 用于指定 memory 中某条 citation。

CLI 管理

dsh-memory CLI 支持以下命令:

dsh-memory list [--project P] [--json]
dsh-memory show <name> [--project P]
dsh-memory edit <name> [--project P]
dsh-memory delete <name> [--project P]
dsh-memory distill-log [--project P]

也可以使用 --home 覆盖 memory root:

dsh-memory list --home /path/to/memory

覆盖蒸馏路由

如果需要指定蒸馏使用的 provider 和 model,可以这样配置:

plugins:
  dsh-memory:
    distill:
      provider: deepseek-official
      model: deepseek-v4-flash

适用场景与注意

适合以下场景:

  • 希望记住用户偏好、项目决定、环境差异和用户纠正;
  • 希望 memory 是 Markdown 文件,便于人工查看、编辑和删除;
  • 希望每条记忆可回追到原始日志事件;
  • 希望避免自动注入完整 memory 正文。

需要注意:

  • v0.1 明确不做向量数据库、知识图谱、超出 user 类型的跨项目全局记忆、记忆共享/同步、自动注入完整 memory 正文;
  • 同名 project memory 会遮蔽 user memory;
  • maxIndexTokensmaxExpandBytesmaxTranscriptTokens 会限制 recall index、memory_expand 输出和蒸馏 transcript 长度;
  • peerDependencies 包含 @deepseek-ai/cordis ^4.0.1@deepseek-ai/schemastery ^3.18.1 等版本范围;
  • 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。

结尾

dsh-memory 的价值在于把蒸馏事实写成可审计 Markdown,并保留到原始会话日志的引用。它不是自动注入完整记忆,而是在 recall index、memory_readmemory_expand 之间提供一层可回追的记忆索引。

GitHub:https://github.com/Jesse-njx/dsh-memory

目录页:本次资料未提供可确认的目录页 URL,请以实际 DSH 社区目录为准。

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

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

Xiaoye