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
羽毛球分组比赛记分
小程序二维码

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

小夜