dsh-day-memory: DSH Level 3 "Daily Episode" Long-term Memory

前言

DeepSeek Harness(DSH)社区里常见的记忆插件,多半解决的是语义记忆:你是谁、偏好什么、项目里定了哪些约定。对话会被提炼成一条条事实,按人、项目或主题分层,在下次对话前注入。

但开发者和日常使用者还有另一类需求:不必背下某次聊天的每个论点,却要能想起「上周三下午我们在改记忆插件,卡在摘要丢信息,最后决定用子代理」。这类记忆以天为粒度、先粗后细、有时还要靠图片唤起细节。现有方案如 meow-memory、dsh-memory-beta、Aurabot 等,分层轴都是语义或主题,一般不保留当天原始对话与图片副本。dsh-day-memory(维护者 Tarolcraze,分类:记忆)补的是时间轴上的情节记忆,与事实类记忆可以并存。

这是什么

一句话:dsh-day-memory 是给 DSH 的三级「日情节」长期记忆——一天一条索引,第二天由子代理蒸馏前一天内容,需要时再层层下钻;不是「记住你是谁」,而是「上周三下午到底发生了什么」。

数据在磁盘上大致分为四层(README 中的布局):

一级  l1/<日期>.json   日期 + 标题 + 关键事件 + 关键词      ← 关键词检索
二级  l2/<日期>.md     当天完整概括                          ← 命中后读
三级  l3/<日期>.jsonl  当天原始对话 + 图片副本 + 注释        ← 需要细节时读
常驻  pinned.json      「时刻记住」的极重要事实              ← 每轮注入
桌面  desk.md          人约 + 最近的事 + 记忆怎么转(≤4KB)   ← 每轮注入

版本 0.2.0,MIT 许可证。社区目录页:https://www.skillhub.cn/plugins/Tarolcraze/dsh-day-memory;源码:https://github.com/Tarolcraze/dsh-day-memory。

核心功能

从会话日志回填,而不是另录一份

插件监听 session/event 做实时捕获与兜底,但三级原文主要来自 DSH 自带的 append-only 会话日志:整理时用 sessionQuery.readSession() 回填当天会话,与 inbox 按 (sessionId, seq) 去重。晚装几天也可通过 backfillDays 补整理历史日期。

次日离线整理与子代理蒸馏

每天第一次打开 DSH 时扫描水位线,对「今天以前、尚未整理」的每个日期启动 one-shot 子代理(默认 subagentProvider: spawn),读三级原文,产出严格 JSON(标题、200–500 字概括、3–8 条事件、关键词、实体、常驻提议等)。长文分块 map-reduce;失败保留原文可重试,同一天重复整理幂等。

两段式检索

一级索引体量小(一年约 365 条),不依赖向量库:先用中文二元切词 + BM25 + 时间衰减做关键词检索;命中多条由模型看标题与事件判断;一条未命中时返回最近 60 天标题,交给模型判断——README 称为「脚本检索转为 AI 检索」。

常驻记忆需用户确认

AI 只能通过 memory_propose 提议写入 pinned.json,须在管理面板确认,避免聊天里的随口一句变成持久指令。

暴露的工具

工具 用途
memory_search 关键词/日期检索一级;没命中返回近期标题
memory_read 按天读一级/二级/三级,三级可返回图片块
memory_days 列出有记录的日期
memory_propose 提议常驻记忆(需用户确认)
memory_annotate_image 给某天图片补注释
memory_vote 给某天投命中票,影响后续被想起的概率
memory_note 把未发生在对话里的事记进某天
memory_stats 各层条数、桌面页字节、上次整理时间等

问「上次那个…」时,典型路径是 memory_search → memory_read 下钻二级或三级。

安装与启用

桌面版使用 desktop profile,命令行 dsh plugin 按设计不能操作它。README 给出的方式是:

  1. 将整个 dsh-day-memory 目录放到本机,例如 D:\dsh-plugins\dsh-day-memory;
  2. 在 DSH 桌面客户端任意会话中说:把 D:\dsh-plugins\dsh-day-memory 作为 bundle 安装到当前 profile;
  3. 安装成功后重启 DSH(宿主插件需新进程加载);
  4. 打开「设置 → 日记忆」。

Web 版(dsh web)示例:

dsh plugin --profile web add link:D:\dsh-plugins\dsh-day-memory

路径按你的实际目录替换。插件以当前 DSH 进程权限读写 dataDir,安装前应自行查看源码与 MIT 许可证。

配置

写入 profile 的 cordis.patch.yml(或由 agent 改插件配置),README 示例:

- id: day-memory
  name: 'dsh-day-memory'
  config:
    timeZone: Asia/Shanghai
    dataDir: 'D:\dsh-data\day-memory'
    backfillDays: 14
    retentionDays: 90
    deskBytes: 4096
    deskItems: 8
    includeToolResults: false
    maxPinned: 30
    recentDaysInPrompt: 3
    maintenanceIntervalMinutes: 30
    subagentProvider: spawn

常用字段含义:timeZone 切分「一天」;dataDir 记忆库根目录(默认 <DSH_HOME>/day-memory);retentionDays 控制三级保留天数,超出归档;deskBytes / deskItems 限制每轮注入的桌面页;includeToolResults 是否在三级记录工具返回(默认 false)。

完整数据目录结构见 README 的「数据布局」(state.json、inbox/、archive/、logs/ 等),写入采用临时文件 + rename。

适用场景与注意

适合:需要按日期回忆「那天做了什么」、希望保留对话原文与图片副本、愿意次日让子代理做摘要而不是即时向量检索的场景。

README 列出的限制 worth 知晓:

  • 整理需要至少一个活着的会话;刚启动无会话时会延后,三级仍可从会话日志重建。
  • 插件未运行期间的超长会话,回填只扫「当天创建」的会话,可能漏采。
  • 关键词检索对同义词、代词(如「上次那个」「他」)有限,需模型结合近期标题或换关键词。
  • 归档后读不到三级原文,只保留一二级;面板在 Windows 真机上的渲染与 HTTP 鉴权尚待验证(路线图项)。
  • 记忆内容在注入时会标注为历史数据,不等于可执行指令。

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

结尾

dsh-day-memory 用时间轴分层记「经历」,与记「结论」的语义记忆插件互补:结论用来懂你,经历用来回忆。进一步了解可打开 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye