dsh-plugin-memory-four-books:分层长期记忆与 BM25 召回

前言

在 DeepSeek Harness(DSH)里跑智能体时,常见做法是把整段对话历史或一个大文件塞进每次请求的 system prompt。上下文一涨,成本和噪声一起上去;真正该「永远在场」的规则(例如红线、当天安排)又容易被淹没。

下面介绍社区插件 dsh-plugin-memory-four-books(维护者 wodexiaoling,分类:记忆)。它把长期记忆拆成五个有序层级,按预算注入 prompt;细节留在磁盘,需要时用 BM25 检索。数据是本地 Markdown 与 JSONL,零依赖、无网络、无后台服务。

这是什么

一句话:为 DSH 提供分层长期记忆——红线 / 当天 / 进行中 / 常识 / 档案,配合 BM25 召回与自动归纳,不依赖外部数据库。

插件仅通过 GitHub 分发(当前 package 版本 0.1.0,MIT 许可证),要求 DSH >= 0.2.0(使用 agent/pre-step 与 systemPrompt.section)。社区目录页:https://www.skillhub.cn/plugins/wodexiaoling/dsh-plugin-memory-four-books;源码与说明:https://github.com/wodexiaoling/dsh-plugin-memory-four-books。

核心机制

数据流

you type
   ↓
agent/pre-step ──→ filtered and appended to 支线/对话.jsonl
   ↓
model runs
   ↓
every 10 min ──→ consolidate ──→ writes tiers only when something changed

自动采集:每条用户输入经过滤(问候、重复、注入的运行时上下文会丢弃)后追加到只增日志。

自动归纳:默认每 10 分钟把日志归纳为一行一条、去重并写入各层;旧条目下移层级,不删除。

分层注入:每次模型步进前从各层重建 prompt 块;块按文件 mtime 缓存,记忆未变则不重复计算。

层级 注入策略 上限
当天 / today 始终注入,不截断 400 条
红线 / red lines 始终注入,不截断、不衰减 40 条
进行中 / in progress 最新 30 条 80 条
常识 / common sense 最新 70 条 260 条
档案 / archive 按需 800 条

BM25 召回:工具 memory_recall 对各层及原始日志建索引(中文 2-gram,k1=1.5,b=0.75),并对结果施加 120 天半衰期衰减,下限 0.4,使旧条目仍可搜到但不易挤占近期内容。

工具

工具 用途
memory_recall 按关键词检索记忆
memory_remember 按标签写入一条
memory_consolidate 立即执行归纳
memory_status 各层条数、上限、文件大小、自动化状态

典型用法:日常依赖自动采集与定时归纳;需要精确事实时让模型调用 memory_recall;显式沉淀用 memory_remember;排查容量与自动化是否开启用 memory_status。

安装与启用

安装命令(须替换 <your-profile> 为你的 DSH profile 名):

dsh plugin --profile <your-profile> add github:wodexiaoling/dsh-plugin-memory-four-books

dsh 会把仓库克隆到 profile 下并作为 bundle 链接。插件不在 npm 发布。

更新时先移除再添加:

dsh plugin --profile <your-profile> remove dsh-plugin-memory-four-books
dsh plugin --profile <your-profile> add github:wodexiaoling/dsh-plugin-memory-four-books

可选配置写在插件行的 config 里,字段均可省略:

字段 默认值 含义
dataDir $DSH_HOME/memory-four-books 记忆文件目录
inject true 是否向 prompt 注入层级块
injectBudget 15000 注入块字符预算
sectionOrder 45 prompt 段落顺序
autoRecord true 是否自动采集用户消息
autoConsolidate true 是否定时归纳
consolidateMinutes 10 定时间隔(分钟)
dayMaxChars 8000 「当天」层字节上限
indexMaxDocs 20000 搜索索引保留的日志行数上限

若只希望手动 memory_remember、不记录输入,可设 "autoRecord": false。

数据落盘位置

默认在 $DSH_HOME/memory-four-books/:

$DSH_HOME/memory-four-books/
  支线/对话.jsonl            append-only journal
  四册/记忆核心.md            the five tiers (this is what gets injected)
  四册/MEMORY_INDEX.md       one line per topic
  四册/档案库.md             archive
  四册/memory_changelog.md   append-only change log
  归纳台账.jsonl             consolidation ledger

均为 UTF-8 明文,可手动打开、编辑、备份或删除;插件会从日志重建衍生文件。

适用场景与注意

适合:同一 DSH profile 下需要跨会话、跨子智能体共享长期偏好与项目事实;希望红线与「当天」始终进 prompt,其余按需检索或按层裁剪的场景。

隐私:插件在本地记录你输入的内容,不做网络请求、不启服务;dataDir 内数据未加密。安装前建议阅读源码与 MIT 许可证,并确认你接受以当前 dsh 进程权限 读写上述目录。

限制(README 原文):

  • 记忆按 profile 共享,不按 workspace 隔离。
  • 未加密;不属于 session log,fork session 不会 fork 记忆。
  • 日/中/英文本支持较好;其他文字系回退为单字 n-gram,召回质量会下降。

DSH 生态是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-plugin-memory-four-books 用五层结构控制 prompt 注入量,用 BM25 与半衰期兼顾「找得到旧事实」和「近期优先」,并用 JSONL 日志 + 定时归纳把运维成本压在本地文件上。需要细节时见 GitHub README 与 SkillHub 目录页。

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

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

小夜