前言¶
在 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