dsh-fount-memory:回合内召回的 Fount 风格持久记忆

前言

在 DeepSeek Harness(DSH)里做长期对话或 Agent 开发时,模型默认只看见当前上下文窗口内的内容。会话一关,未经显式写入的偏好、约定和已确认事实就容易丢失。有人把关键信息写进系统提示或外部笔记,但那样既不便于按话题更新,也难在合适时机自动带入模型请求。

下面介绍社区插件 dsh-fount-memory(维护者 win10ogod,分类:记忆)。它参考 Fount 角色的长短期记忆设计,在正常对话回合内工作:在模型请求前按条件注入命名事实记忆,默认不自动灌入完整对话轨迹,也不额外开启反思、dream 或自主 followup/steer 轮次。存储与检索都在本机 SQLite 完成,不为此再调模型。

这是什么

dsh-fount-memory 是面向 DSH 的持久记忆插件,当前 package 版本为 0.2.2(MIT)。开发时针对 DSH 0.1.7-rc.2、0.2.0-rc.2 与 0.2.1-alpha.1 的插件与 format v4 消息接口。实现思路部分参考 理华角色包(Rika) 的命名长期记忆、修订追溯与短期片段设计;触发条件在此改为结构化 JSON,便于在 DSH 插件里校验,不是 Fount 原角色记忆数据的直接导入。

插件以当前 DSH 进程权限运行,安装前建议自行查看 GitHub 仓库 源码与许可证。

核心功能

长期记忆:命名事实与触发条件

长期记忆以名称管理。同名再次写入会更新内容,旧版与来源上下文留在修订历史;删除时历史一并删除。模型请求前,符合触发条件的命名事实会被带入上下文。

触发条件支持:任一关键词、全部关键词、指定月日。README 示例:

{
  "name": "使用者生日",
  "content": "使用者生日為 7 月 17 日。",
  "trigger": { "any": ["生日", "birthday"], "onDates": ["07-17"] }
}

短期封存

插件会保留最近 10 则非空白文字消息及其来源、会话 ID、轮次与记录时间。DSH 的 completed 只表示回合结束,不表示任务已成功,因此这些封存是未验证的历史,不是成功任务示范。空白结尾、未完成待办、中止与失败的回合不会新增封存。对话片段目前只记录文字;非文字附件仍在 DSH 原始会话中。

召回策略与 recallCount

配置项 recallCount 默认为 0。在此默认值下:

  • 命名事实的自动召回不受影响。
  • 封存片段仅当模型通过 fount_memory_search 并设置 includeEpisodes: true 时才会被明确检索;一般搜索默认只返回命名事实。

若将 recallCount 设为正整数,会启用旧式原始对话召回(按词汇、时间线索与衰减选取片段,并略过同会话 20 分钟内的片段)。原始轨迹可能含未完成操作,容易成为模型模仿的上下文;README 建议一般开发 Agent 保持为 0。

四个模型工具

工具 用途
fount_memory_remember 记下经确认的事实;更正同一事项时沿用同一名称
fount_memory_search 搜索记忆;需查封存历史时使用 includeEpisodes: true
fount_memory_context 查看来源与旧版修订
fount_memory_forget 遗忘:先用 search 确认范围,再用 kind: all 同时删除命名记忆、历史版本及包含指定字符串的对话片段

工具不会替使用者猜测事实;子代理轮次不会自动封存。DSH 原始会话日志仍由 DSH 自行管理。

明确不做的事

插件不建立反思或 dream 轮次,不调用 agent.followup()、agent.steer(),也不在空闲时恢复会话。套件升级本身不删除既有数据;停用插件也不删除数据库。

安装与启用

在 DSH 主机环境安装到所需 profile(示例为 web):

dsh plugin --profile web add github:win10ogod/dsh-fount-memory
dsh --profile web --dump-config

dsh plugin 会安装包并把 bundle 加入 profile;--dump-config 输出中应出现 fount-memory 条目。若 DSH 已在运行,需重启后再用。

运行环境要求 Node.js >= 22.13.0(见 package.json engines)。

配置示例

- id: fount-memory
  name: dsh-fount-memory
  config:
    namespace: default
    scope: workspace
    recallCount: 0
    relevanceThreshold: 5
    sameSessionCooldownMinutes: 20
  • 默认按工作区分开数据库,路径为 $DSH_HOME/storages/fount-memory;未设置 DSH_HOME 时使用用户家目录下 .dsh/storages/fount-memory。
  • scope: global 可使同一 namespace 跨工作区共用数据。
  • dataDir 可指定数据库目录。

典型用法

  1. 写入事实:在对话中让模型在确认信息后调用 fount_memory_remember,带上 name、content 与可选 trigger(结构见上文 JSON 示例)。
  2. 查询与溯源:用 fount_memory_search 查找;需要修订历史或来源时用 fount_memory_context。
  3. 按主题遗忘:用户要求忘记某主题时,先 search 确认范围,再 forget 且 kind: all,避免只删表面条目而留下片段或历史。
  4. 开发 Agent 默认:保持 recallCount: 0,仅在需要审计未验证对话片段时,通过 search 的 includeEpisodes: true 主动查看封存,而不是让旧式原始轨迹自动进入每次请求。

适用场景与注意

适合:需要在多轮 DSH 对话中稳定记住用户偏好、项目约定、日期类事实,且希望召回发生在正常回合内、不增加自主 Agent 轮次的场景;希望记忆留在本机、不依赖额外 LLM 调用的部署。

注意:

  • 插件与 DSH 同权限访问本机存储;敏感事实写入前应评估磁盘与备份策略。
  • 短期封存与可选的原始召回可能包含失败或未完成的操作痕迹,不宜当作「已验证的最佳实践」自动喂给模型。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;版本与 peer 依赖以仓库 README 与 package.json 为准。

结尾

dsh-fount-memory 把 Fount 思路下的命名长期记忆、修订追溯与可控短期封存接到 DSH format v4 插件体系里:默认只做回合内事实召回,不抢会话主导权。若你在 Harness 里做需要「记住名字、日期和约定」的 Agent,可按上文命令安装,并把 recallCount 保持在 0,用四个 memory 工具显式读写。

  • 目录页:https://www.skillhub.cn/plugins/win10ogod/dsh-fount-memory
  • 源码与说明:https://github.com/win10ogod/dsh-fount-memory
羽毛球分组比赛记分
小程序二维码

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

小夜