dsh-companion-memory:陪伴 AI 冷热分层记忆 DSH 插件

前言

在 DeepSeek Harness(DSH)里跑长期陪伴或长会话智能体时,常见做法是每轮把整段历史对话塞进上下文,token 很快顶满;或者只靠模型自己「记住」,旧细节一旦超出窗口就丢。DSH 生态里插件可以订阅会话事件、注入系统提示、注册工具——适合把「归档、分层、按需召回」做成独立模块,而不是在业务里重复写一遍。下面介绍维护者 sutanglime 发布的 dsh-companion-memory(GitHub:sutanglime/dsh-companion-memory,npm 包名同目录名,当前版本 0.3.1,MIT 许可证):全自动对话归档、渐进冷存、按用户线索从冷库召回,并在每轮请求前用 1600 tokens 预算上限 的记忆快照替换「每次都重读全部旧对话」。设计思路参考公开方案 Companion-AI-Memory-Context-Token-Optimization,本插件为独立实现,代码与提示词自行编写。

这是什么

dsh-companion-memory 是 DSH 专用插件(依赖 ctx.tools、ctx.systemPrompt、session/event、ctx.sessionQuery),分类属于「记忆」。它把记忆分成 pinned / hot / cold 三层,原文持续追加到本地归档;热度驱动细节→摘要→冷库的渐进冷却;用户给出线索时通过工具双通道召回。冷库正文不会每轮整包注入,只有快照里的连续性状态、固定事实与活跃记忆进入上下文。

默认数据目录为 $DSH_HOME/companion-memory/:

records.json   记忆卡
state.json     连续性状态、计数器、归档水印
archive.jsonl  原文归档(追加写)

核心机制

全自动归档与分层

机制 实现
全自动归档 订阅 session/event 提交后事件流,每轮用户与助手原文追加进 archive.jsonl
冷热分层 pinned / hot / cold 三层,tier 只决定调用位置,原文归档不动
热度公式 heat = 0.45*F + 0.35*R + 0.20*O,F 为去重且每日封顶的有效提及频率
渐进冷却 细节(≤72h) → 摘要(≥24h 可用后) → 冷库(候选宽限期 7 天 + 热度 <0.30 或 14 天未提及)
线索召回 双通道:记忆卡 0.80*S + 0.20*C(自带维度索引)+ 归档原文 BM25 词法检索;都不惩罚年代
预算约束 快照 1600 tokens = 固定 160 / 活跃 960 / 召回 480,互不借用

归档只取 user/message 与 assistant/message;工具结果、系统消息与推理不入档。Harness 写入的运行时上下文等 user 消息会标 system_context: true,可与真实用户发言区分。水印按 (session_id, seq) 记录,写入成功后才推进;漏记可用 memory_archive 的 backfill 幂等补回(首次建议手动执行,默认 backfillOnStart: false)。

注入策略

每轮把连续性状态 + 固定事实 + 相关活跃记忆作为动态上下文块注入,整体受 1600 tokens 约束;冷库正文不注入,只在用户给出线索时由工具取回。

注册工具

  • memory_remember — 写入/更新记忆卡(来源片段、主题、维度索引)。
  • memory_recall — 按线索检索冷库:记忆卡通道 + 归档 BM25;返回 matched / ambiguous / not_found,候选与正文共用 ≤3 条、≤480 tokens。
  • memory_forget — delete、supersede、recall_only、unpin、allow_normal 等;删除与更正会立即让已授权的召回副本失效。
  • memory_continuity — 写入基础人格与当前相处状态;reset: true 在用户明确要求时清空。
  • memory_archive — stats、backfill、purge(清理本插件归档副本,需用户明确依据)。
  • memory_status — 各层条目数、Top 热度、预算余量、最近一次冷却结果。

归档词法索引仅索引对话轮次,BM25+IDF,不惩罚年代;索引只放内存不落盘。无 embedding 时,记忆卡侧的 S 由本地词法相似度替代(fallback),与向量空间分数禁止混用。

安装与启用

本插件面向 DSH ≥0.2.0、Node ≥22。README 给出的分发与安装方式如下(勿把个人 $DSH_HOME/companion-memory/ 里的 json/jsonl 打进包——那是私密记忆,不是插件代码):

  1. 将 dsh-companion-memory/ 目录交给对方(npm 发布、插件市场或目录打包均可)。
  2. 对方通过 plugin_manager 的 install_bundle,target 指向该目录或 npm 包名 dsh-companion-memory。
  3. 新 bundle 经 HMR 直接激活,无需重启 harness。

建议上手顺序:

  1. memory_archive → backfill 回填历史会话。
  2. memory_continuity 写入自己的基础人格与当前相处状态。
  3. 之后正常聊天,必要时用 memory_recall 按线索取回冷库。

典型用法与边界

适用:需要长期陪伴、希望旧对话可检索但不想每轮全量重读上下文、能接受词法召回与同义改写较弱的场景。

注意(来自 README「已知边界」):

  • 归档检索纯词法,同义改写召回差;专有名词通常更可靠。
  • minScore / rareDfRatio、热度权重为工程初值,需按真实对话校准。
  • 索引随条目占内存线性增长,超过 maxEntries 会 degraded。
  • 删除/清理只覆盖本插件副本,不能替 DSH 删 harness 会话日志。
  • token_counter_mode 为 estimated,中文约 1 字≈1 token,非硬保证。
  • 插件以当前 DSH 进程权限读写 $DSH_HOME;安装前应自行审阅 GitHub 源码 与 MIT 许可证。

社区目录页(与 DeepSeek / 幻方无官方从属):skillhub.cn/plugins/sutanglime/dsh-companion-memory。问题与更新以仓库 Issues 为准。

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

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

小夜