dsh-foxy-memory:为 Foxy 提供本地记忆与可选跨平台桥

前言

在 DSH 里跑 Foxy 预设时,多轮对话往往只依赖当前上下文窗口,关会话或换 preset 后,上一轮说过的话不会自动进入 persona。有人会在主工程外另挂 ChatLuna / LivingMemory,也有人只想在桌面端装 dsh-foxy 就能「记住最近聊过什么」。dsh-foxy-memory 针对后者:把 Foxy 会话落成可检索的本地 JSONL,并在下一轮把最近记忆注入 Foxy;需要与 QQ 等平台共用一套记忆时,再通过 HTTP 桥接到 koishi-plugin-chatluna-foxy-memory,而不再依赖旧的 bridge 进程。

下面按定位、能力、安装、用法与注意事项说明该插件。

这是什么

dsh-foxy-memory 是维护者 Kun-Fox 为 dsh-foxy 提供的可选记忆子插件(当前包版本 0.4.3,MIT)。它实现 foxyMemory 扩展契约:记录对话、按 preset 召回上下文、提供浏览与归档界面。插件本身不依赖 ChatLuna/LivingMemory;仅安装 dsh-foxy 与 dsh-foxy-memory 即可在 DSH 侧获得可记忆的 Foxy。

社区目录页:skillhub.cn/plugins/Kun-Fox/dsh-foxy-memory。源码与文档:GitHub - Kun-Fox/dsh-foxy-memory。

依赖与生态位置

  1. 必需:dsh-foxy(提供 foxyMemory 扩展契约)。
  2. 可选:koishi-plugin-chatluna-foxy-memory。将 DSH 侧 provider 设为 livingmemory,bridgeUrl 指向新插件的 /foxy-memory,由桥直接读写 Koishi 数据库与向量索引,替代旧 koishi-plugin-foxy-memory-bridge 进程。
  3. 平台子插件:dsh-foxy-bili / dsh-foxy-weibo 等会把事件写入本插件暴露的 foxyMemory provider。

本地 JSONL 是默认实现,适合只装 DSH、不接 QQ 的场景;不会自动写入 Koishi 的 koishi.db 或 PGlite 向量索引。

核心功能

本地 JSONL 存档与 persona 注入

默认数据目录为 $DSH_HOME/foxy/memory,文件名为 entries.jsonl(Windows 上常见路径示例:%USERPROFILE%\.dsh\foxy\memory\entries.jsonl)。每条记录包含 id、presetId、sessionId、platform、sourceLabel、speaker、role、content、时间戳等字段;platform 存小写(如 dsh),展示用 sourceLabel(如 DSH);presetId 允许 Foxy 主预设与 Character 预设分开存档。

注入 persona 时格式化为类似:

- [2026-11-06 20:00] [DSH] 用户: 今天在 DSH 做了……
- [2026-11-06 20:00] [DSH] Foxy: 记住啦。

超过 maxEntries(默认 5000)会丢弃最旧记录;单条内容受 maxContentChars 截断;注入条数与总字符受 maxContextEntries、maxContextChars 限制。

可配置项与写入策略

常用配置如下(完整表见仓库 README):

字段 默认 说明
dataDir $DSH_HOME/foxy/memory 数据目录
entriesFile entries.jsonl 文件名
maxEntries 5000 超过后丢弃最旧记录
maxContentChars 4000 单条内容截断
maxContextEntries 20 最多注入条数
maxContextChars 6000 注入内容总字符上限
userLabel 用户 用户显示名
assistantLabel Foxy 助手显示名
provider 配置 bridgeUrl 时默认 livingmemory,否则 local 记忆写到哪个 provider
bridgeUrl 空 如 http://127.0.0.1:5140/foxy-memory
bridgeToken 空 与 Koishi 侧 foxyApiToken 一致;公网部署必须设置
batchSize 8 累积多少条消息后调用桥的 /ingest
flushIntervalMs 30000 未满一批时的定时冲刷间隔
extractModel deepseek/deepseek-flash 桥提取记忆使用的模型

DSH 侧不再逐条写记忆:record 只把消息放进 pending,满 batchSize 或到 flushIntervalMs 时调用桥的 /ingest,由模型提炼成中文第一人称记忆。stats() 会显示 pending。

Foxy 面板的「记忆桥设置」可修改上述值,保存到 $DSH_HOME/foxy/settings.json;插件启动时读取,保存后尝试热重载。Host 内还提供 /api/dsh-foxy/settings。

Foxy Memory 浏览界面与 HTTP API

安装并重启 DSH 后,左侧栏出现 Foxy Memory。页面展示记忆总数、待写入数、来源平台数、当前 provider;支持按平台(QQ / 微博 / B 站 / DSH)、状态筛选,按内容、说话人、关键词搜索,以及单条归档(默认只显示活跃记忆)。

Host 路由包括:

GET  /api/dsh-foxy-memory/stats
GET  /api/dsh-foxy-memory/list?platform=weibo&status=active&pageSize=50
GET  /api/dsh-foxy-memory/search?q=关键词
POST /api/dsh-foxy-memory/archive   {"id":"..."}
POST /api/dsh-foxy-memory/reload

当 provider 为 livingmemory 时,/list 与 /search 会走新记忆插件的接口,失败时自动回退本地 JSONL。

对外服务接口

加载后向 Cordis 上下文提供:

ctx.foxyMemory.record({ role, text, presetId, sessionId, platform, speaker })
ctx.foxyMemory.context({ presetId, limit })
ctx.foxyMemory.list({ presetId, status, limit })
ctx.foxyMemory.search(query, { presetId })
ctx.foxyMemory.archive(id)
ctx.foxyMemory.stats()

同时通过 registerMemoryProvider('local', ...) 以及(配置了桥时)registerMemoryProvider('livingmemory', ...) 注册到 Foxy 的 provider 注册表。

安装与启用

需要先安装 dsh-foxy。仓库 README 中的安装示例为从本地路径添加插件(请替换为你的实际路径):

dsh plugin --profile desktop add "file:D:\path\to\dsh-foxy-memory"

重启 DSH 后,Foxy 会话会按当前 provider 使用记忆。未配置 bridgeUrl 时默认为本地 JSONL;配置 bridgeUrl 后默认切到 LivingMemory 桥,也可显式设置 provider: local 保持本地。

运行环境要求 Node.js >= 20(见 package.json 的 engines 字段)。

典型用法

仅 DSH 本地记忆

不配置 bridgeUrl 即可。对话经 record 写入 pending 与本地 JSONL(本地模式下按 README 描述落盘),下一轮通过 context 注入 persona。在 Foxy Memory 页面可搜索、归档单条记忆。

与 QQ 共用 LivingMemory

安装并配置 Koishi 侧 koishi-plugin-chatluna-foxy-memory 后,DSH 侧示例配置如下:

# DSH 侧 dsh-foxy-memory 配置
provider: livingmemory
bridgeUrl: http://127.0.0.1:5140/foxy-memory
bridgeToken: 与新插件 foxyApiToken 一致的随机串
bridgePresetId: preset(Character)

新插件的 /foxy-memory/record|ingest|context|list|search|health 直接操作 Koishi 数据库、用户画像与向量索引。迁移时保留原 living_memory_* 表与 PGlite 目录;切换前先备份 koishi.db 与向量目录。桥不可用时会自动回退本地 JSONL,不会丢消息。

适用场景与注意

适合:已在 DSH 使用 Foxy,希望低依赖地保留多轮对话记忆;或需要 DSH 与 B 站 / 微博 / QQ 子插件统一写入同一套 foxyMemory provider;需要可视化浏览与归档记忆条目的开发者。

注意:

  1. 插件在当前 DSH 进程权限下读写本地目录并可能发起桥 HTTP 请求;安装前应查看源码与 MIT 许可证,公网部署桥时必须设置 bridgeToken。
  2. 社区插件目录(SkillHub)与 DeepSeek / 幻方无官方从属关系;DSH 生态主张「一切皆插件」,本文事实以仓库 README 与 package.json 为准。
  3. 本文未包含 git clone 安装方式;若你从 GitHub 获取源码,仍须用官方文档中的 dsh plugin add 形式指向本地或已发布的包路径。

结尾

dsh-foxy-memory 把 Foxy 的记忆从「仅靠上下文窗口」扩展到本地 JSONL 与可选的跨平台 LivingMemory 桥,并附带浏览界面与 Host API。只装 DSH 可先走 local;要与 QQ 等平台共享记忆再配 bridgeUrl 与 koishi-plugin-chatluna-foxy-memory。

  • 目录页:https://www.skillhub.cn/plugins/Kun-Fox/dsh-foxy-memory
  • GitHub:https://github.com/Kun-Fox/dsh-foxy-memory
羽毛球分组比赛记分
小程序二维码

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

Xiaoye