@avantf/dsh-mem
DSH(DeepSeek Harness)原生记忆插件:给 agent 一份可长期检索的记忆——它跨会话记得你说过的事, 也能按语义、全文、实体、标题与时间把它找回来。装上后提供 3 个模型工具、一段用法提示 和一个主窗口标签页(记忆)。
文档知识库不在本插件里:它已拆到独立插件
dsh-knowledges(knowledge.db、受管文档、kb_*工具、 知识页与文档转换都在那边)。本插件既不读也不删~/.avantf/knowledge/**。
主要功能
- 3 个模型工具
mem_remember:新增 / 改写 / 删除事实(写入后立刻做矛盾检测),分两层——journal(做了什么 / 聊了什么,必带event_date与短title,同一事务复用同一 title)与note(稳定事实 / 偏好 / 约定 / 坑,可带relations三元组)mem_recall:search内容检索(先对整句做字面精确匹配,再按查询形态返回事实集合 / 关系结构 / 模糊检索;只给time就是纯时间召回)与titles标题检索(写 journal 前查重、标题纠错用)mem_admin:list列举 /contradictions列出未处理的矛盾对 / 导出 / 导入 / 快照重建。 文件路径只允许本次运行的数据根内 (默认导出到<数据根>/backups/memory-YYYYMMDD-HHMMSS.json.br,原子写,结果不含文档正文);import按文件头自动识别 SQLite(只读合并另一份memory.db,报告mode:'db')与 JSON 导出文档 (mode:'json');restore_snapshot必须显式confirm: true,且只接受空 facts 表,恢复后同一宿主 进程立即可检索。- 诊断、策展(pin / unpin / 归档恢复 / 矛盾裁决)与索引修复(重建索引、向量修复)是操作者动作: 在「记忆」页与 CLI 里可用,不占用模型工具面。
- 混合检索:语义 + 全文 + 实体三腿融合;
search按查询形态给出事实集合(多实体并列)、关系结构 (谁管理谁这类方向问句)、纯时间召回或模糊检索。 - 记忆是活的:按活跃使用日结算、支持遗忘、去重与修订链;同一主题的改动会被识别成 对旧事实的修订而不是简单叠加,写入时顺带做矛盾检测。
- 一个主窗口标签页(排在 对话 / 轨迹 之后):记忆(浏览、编辑、pin/unpin、归档恢复、矛盾裁决)。
- 系统提示词里只加一段用法提示(何时该主动记忆、journal 与 note 怎么分、同一事务怎么复用 title)。
接入 dsh
# 把插件装进你要用的 profile(依赖会自动装好,不用管别的)
dsh plugin --profile <PROFILE> add @avantf/dsh-mem@<version>
# 然后重启 dsh 生效
版本号可以不写,但建议指定一个明确版本。
DSH Desktop:在「插件」页里安装同一个包即可,装完重启应用;不用动命令行。
依赖底座:本插件硬依赖
@avantf/dsh-plugin-base。它是插件的普通运行期依赖,装插件时自动带上, 不需要单独安装;缺少或版本不兼容时插件仍会挂载,但启动期资源初始化、宿主兼容门禁与提示词文件层等能力 会降级。升级时让包管理器一起解析即可;单独升级底座时,先升级底座、再重启 dsh。
怎么用
工具是给模型用的,通常不用你手写;用日常说法提要求就行。最常见的几种:
记住这条:发布窗口是每周四 20:00;验收标准是灰度零回滚。
我之前定过的数据目录约定是什么?(返回命中事实与来源)
上周做了什么?(按事件时间召回 journal 条目)
谁负责发布流程?(关系问句直接返回关系结构)
把「每周四发布」改成「每周三发布」,并说明依据。
查重与改标题:写 journal 前先让模型用 mem_recall 的 titles 找候选,读到候选就 update、
读不到才 add;标题写错时用 update 带 retitle: true 纠正一次(旧标题保留为别名,仍能检索到)。
要改一篇文档:那是 dsh-knowledges 的事(kb_* 工具与「知识」页在那边),本插件不提供文档入口。
常见维护动作(在「记忆」页或 CLI 里):
看看记忆库里已存了哪些事实。
把矛盾检测的积压扫一遍,逐条裁决。
相关性门槛:严格 / 宽松
「记忆」页的查询面板有严格 / 宽松选择(工具面的 mem_recall 也接受 floors: 'strict' | 'loose'):
- 严格(面板默认):只有明确够相关的才返回,所以"没有结果"是一个可信的答案。
- 宽松:门槛更低,用来找回边角相关的条目——仍有一条底线,不是无门槛。
- 不选时:先按严格跑;严格档一条都没命中、且确实有条目被门槛挡掉时,自动用宽松档补跑一次, 结果会标明「已自动放宽门槛」。门槛挡掉的空与真的没有,面板和结果里的数字能区分开。
配置、数据与提示词
- 数据目录:默认
~/.avantf。记忆库(memory/memory.db)、配置与提示词文件、备份与模型缓存都在其中; 环境变量AVANTF_HOME可以改变它。 - 配置:
~/.avantf/configs/下的两份 YAML ——common.yaml(公共项,缺失时按注释模板自动创建)与memory.yaml。只写你要改的项,其余取内置默认。寿命按活跃使用日表达(strength.base_lifetime_days是新事实的 寿命,默认 90;strength.max_retention_days是召回加强能换来的最长寿命,默认 174;lifecycle.purge_after_archived_days是归档后的回收窗口);没有单条到期字段,也没有日历兜底。 - 提示词文件:
~/.avantf/prompts/下的mem-memory-usage.md。缺失或为空时插件写入默认内容, 只在启动时读一次,改完重启生效。 可以按自己的领域改写:内置默认刻意不出现任何领域名词,只给判据与记忆的两层——journal:一项实质性工作 / 话题完成或阶段性收敛时主动记一条,必须带event_date与短title;note:稳定的偏好 / 约定 / 坑,直接记录,规则写成「当……应……」。- 不适合写进记忆:临时聊天、一次性中间状态、容易查到的内容——依据归文档(
dsh-knowledges的文档库), 记忆里只留 结论 + 位置(路径 / 来源 / 名称);敏感信息同理,只记存放位置,不记明文。
- 升级前建议先备份
~/.avantf:数据库迁移是单向的,用旧版本打开新库会被明确拒绝。
升级 / 卸载
# 升级:换版本号重装同一个包
dsh plugin --profile <PROFILE> add @avantf/dsh-mem@<version>
# 卸载
dsh plugin --profile <PROFILE> remove @avantf/dsh-mem
两者都要重启 dsh 生效。卸载不动 ~/.avantf:记忆库与模型缓存全部保留(~/.avantf/knowledge/** 属
dsh-knowledges,同样不动)。DSH Desktop 在「插件」页上卸载。
环境要求
- Node
>=22.15.0 <23 || >=23.11.0、pnpm - 可选的原生加速件(分词 / 向量索引 / 本地嵌入模型)缺失时只会降低检索质量,不影响使用
许可
MIT。