前言¶
在 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。
依赖与生态位置¶
- 必需:
dsh-foxy(提供foxyMemory扩展契约)。 - 可选:
koishi-plugin-chatluna-foxy-memory。将 DSH 侧provider设为livingmemory,bridgeUrl指向新插件的/foxy-memory,由桥直接读写 Koishi 数据库与向量索引,替代旧koishi-plugin-foxy-memory-bridge进程。 - 平台子插件:
dsh-foxy-bili/dsh-foxy-weibo等会把事件写入本插件暴露的foxyMemoryprovider。
本地 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;需要可视化浏览与归档记忆条目的开发者。
注意:
- 插件在当前 DSH 进程权限下读写本地目录并可能发起桥 HTTP 请求;安装前应查看源码与 MIT 许可证,公网部署桥时必须设置
bridgeToken。 - 社区插件目录(SkillHub)与 DeepSeek / 幻方无官方从属关系;DSH 生态主张「一切皆插件」,本文事实以仓库 README 与
package.json为准。 - 本文未包含
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