養魚 · dsh-yangyu:給 DSH 加一個多角色陪伴入口

前言

在 DSH 裏做智能體產品時,一個常見需求是:讓多個角色各自擁有人設和記憶,互不串臺。通用做法是自己拼會話、自己管狀態,或者用通用 persona 插件每輪把背景塞回上下文。前者要自己實現持久化,後者不區分角色,記憶容易混在一起。

dsh-yangyu(養魚)就是針對這個場景的插件:在 DSH 側欄加一個「養魚」入口,創建多位陪伴角色,每個角色有獨立的人設頁、記憶庫和聊天會話;還可以從「出遊」頁掃碼連接微信和 QQ,讓角色在手機上回復私聊。

插件由 YKY0521 維護,當前版本 0.2.0,遵循 MIT 許可。它以當前 DSH 進程的權限運行,會話、記憶和出遊連接都建立在宿主已有的模型與登錄狀態之上,屬於應用層的角色與記憶隔離,不是操作系統沙箱。

這是什麼

一句話:養魚是 DSH 插件,提供多角色陪伴、角色記憶管理和微信/QQ 私聊出遊能力。

解決的問題有三個:

  • 角色隔離:一個角色的多段對話共享該角色的記憶,不同角色之間記憶不互通。
  • 免自建記憶:內存放文件不夠,這裏用本地關鍵詞、固定資料和重要標記做召回排序,不依賴 embedding 服務。
  • 平臺接入:微信和 QQ 的掃碼連接、私聊回覆、二維碼刷新都在插件頁面裏完成,不需要額外寫橋。

插件市場所在的 SkillHub 是獨立的社區站點,與 DeepSeek 無官方從屬關係,插件在那裏的收錄只是社區行爲。

安裝與啓用

環境要求:Node.js 22.12.0 或以上;包聲明 DSH >=0.2.1-rc.3,README 中本機加載與原生會話流程驗證使用 DSH 0.2.1-rc.5,其他版本尚未逐一驗證。

推薦安裝打包好的 .tgz。將下面的示例路徑替換爲實際文件的絕對路徑,在能運行 dsh 的終端執行:

dsh plugin --profile desktop add "C:\path\to\dsh-yangyu-0.2.0.tgz"

開發時也可以直接安裝本地源碼目錄:

dsh plugin --profile desktop add "C:\path\to\dsh-yangyu"

源碼目錄安裝通常使用鏈接,安裝後必須保留該目錄。安裝完成後重啓 DSH;修改客戶端代碼後也需要重啓。安裝到其他 profile 時,把命令裏的 desktop 替換爲對應名稱。

安裝包在 GitHub Release 的 v0.2.0 標籤下。插件尚未發佈到 npm,包名是否可用仍待確認。README 同時提到插件市場收錄申請 #12324 已提交,等待審覈。

核心功能

角色與人設

從側欄「養魚」進入角色列表,添加、編輯或刪除角色。每個角色有五個頁面:聊天、人設、記憶庫、出遊、設置。名字、表情頭像、人設都可以管理,人設可以留空,之後再補。

人設來源有三種:直接粘貼、導入 .md / .markdown / .txt 文件、從已啓用的 dsh-persona-dafeiyu 中選一份人設文本填入。後兩個插件都不是必裝依賴,養魚不捆綁它們的源碼、預設人設或私人記憶。

聊天與會話綁定

聊天直接創建 DSH 原生會話,綁定到角色,會話不會自動斷開或改名。同一個角色的多段對話共享該角色的記憶,會話綁定在重啓後保留。已綁定聊天的窗口會顯示角色標記,點標記可以回到角色管理頁。

聊天沿用 DSH 當前配置的模型和登錄狀態,養魚不提供獨立的模型賬號或 API Key 配置。首版建議使用 DSH 標準 Agent 預設,完全覆蓋系統提示的自定義預設可能會蓋掉角色提示。

記憶

記憶分兩類:「固定資料」和「相處記憶」,可以查看、搜索、新增、修改和刪除,支持重要標記。

召回邏輯是:只從當前會話綁定角色的記憶中選,按本地關鍵詞、固定資料和重要標記排序,把有限數量的結果放進當前回覆的上下文。「允許聊天中記憶」開啓時,模型可以調用 yangyu_remember 保存一條相處記憶,調用 yangyu_recall 檢索當前角色的記憶。

需要注意:這是在當前聊天裏提供記憶工具,不保證模型每輪都會自動提取或記住所有內容。首版沒有另一個模型逐輪整理,也不額外調用 embedding 服務。是否記住一件事,要去記憶庫查看、補充或糾正。正常聊天和工具結果進入上下文仍會使用所選模型的額度。

兩個開關的行爲不同:關閉「聊天時使用記憶」會保留已有數據,暫停聊天召回與模型寫入;只關閉「允許聊天中記憶」會暫停模型寫入,召回保留。手動管理記憶始終可用。

出遊:微信與 QQ

出遊頁提供微信和 QQ 的二維碼、刷新、掃碼確認、過期與連接狀態。確認連接後自動開啓角色私聊,可以暫停、恢復或解除本地連接。微信要求數字驗證碼時,可在頁面手動填寫。

微信走騰訊官方 ClawBot / iLink 通道,只回復掃碼微信用戶與機器人的新文字私聊。QQ 走本機 NapCat 的掃碼服務與 OneBot 連接,只回復原配置 ownerUid / allowedUids 允許名單內的新文字私聊。羣聊和媒體消息暫不接入。

一個平臺賬號同時只能綁定一個養魚角色,一套 NapCat 實例只能分配給一個角色。多 QQ 並行需要獨立實例。當前頁面默認發現已有本機 NapCat,不提供安裝或新增實例嚮導。安全啓動只運行已安裝的 Boot 組件,不會調用會終止 QQ 的舊腳本,也不會關閉正在運行的 QQ。

出遊爲每個聯繫人建立角色綁定的獨立 DSH 會話,但同一角色的長期記憶共享。模型只獲得 yangyu_remember 和 yangyu_recall,私聊內容不會賦予電腦文件、終端或其他外部工具的權限。

備份與遷移

可以在角色頁面導出或導入養魚角色 JSON,包含人設、設置和記憶。導入時生成新的角色與記憶 ID,不接管原來的聊天。

數據保存在 DSH Home 下:

$DSH_HOME/storages/dsh-yangyu/state.json

未設置 DSH_HOME 時,通常位於用戶目錄的 .dsh/storages/dsh-yangyu/state.json。同一個 DSH Home 目前只支持一個 profile/宿主進程寫入養魚數據,不支持多進程併發寫。平臺授權、收取游標和出遊會話映射另存到同目錄的 travel-private.json,這個文件含授權祕密,不進入角色 JSON 導出,本版未提供獨立密碼加密。

刪除角色會清除養魚裏的該角色、人設、記憶及會話綁定,並移除其本地出遊連接,但保留 DSH 原始聊天。改名或修改人設不會清空原有記憶。

與現有插件共存

如果機器上同時有 dsh-persona-dafeiyu、dsh-dafeiyu-life 或舊的 dsh-qq-bridge,有幾件事要注意:

  • 原 life 指定的主會話不能綁定養魚角色,綁定後出現主會話衝突會阻止繼續生成,角色管理頁仍可使用。衝突期間原 life 通知可能已經進入該會話歷史,即使改回主會話選擇,也應爲養魚角色新建對話。
  • 舊 dsh-qq-bridge 和養魚不能同時消費同一套 NapCat 連接。遷移時先備份舊橋配置,停用舊橋的 DSH 啓用項與自動回覆開關,再連接養魚。發現舊橋仍啓用時,養魚會拒絕連接或暫停該 QQ 聊天。
  • 養魚會過濾已知的大肥魚提示及生活工具,普通會話保持原插件行爲。原插件更新後需要複覈過濾範圍。

這些隔離是應用層的,用戶主動要求使用宿主原生文件或終端工具時,仍然遵循宿主權限。

典型用法

下面按 README 的流程走一遍:接入第一位角色,驗證記憶功能和出遊連接。

  1. 打開側欄「養魚」,點添加夥伴,填寫名字,例如「小魚」。人設先留空,之後再補。
  2. 選擇一個 DSH 工作區,然後在角色卡片或「聊天」頁點開始聊天。插件創建原生會話、綁定角色並打開對話;沒有工作區時先添加一個。
  3. 在「人設」頁調整性格與背景,在「記憶庫」頁填寫固定資料或相處經歷。
  4. 返回「聊天」頁繼續已有對話,或爲同一個角色開始新對話,觀察召回是否按角色隔離。
  5. 在角色的「管理 → 出遊」選擇微信或 QQ,點連接後用本人手機掃碼確認;二維碼過期時點刷新,微信要求驗證碼時按手機提示手動填寫並提交。

驗證記憶隔離的做法:爲兩個角色各開一個會話,分別寫入不同記憶,再在兩個會話裏提問,檢查召回是否只來自各自角色。

已知限制與適用範圍

當前尚未實現:生活動態、B站活動、自主情緒、羣聊、媒體消息、酒館 PNG 角色卡導入、AI 視頻。角色 JSON 只支持養魚自己的備份格式。

驗證情況:0.1.0 驗證了原生安裝、側欄入口、多角色與空人設、會話創建與持久綁定、重啓恢復,並用 DSH 當前版本的 DeepSeek-V4.1-Flash 完成了真實模型記憶寫入、同角色跨會話召回與跨角色隔離測試,其他模型和自定義預設未逐一覆蓋。0.2.0 通過了 80 項自動測試,並在真實 DSH 中驗證了出遊頁面、微信二維碼顯示與刷新;QQ 複用了已有 NapCat 登錄會話完成一次真實私聊回覆,全新 QQ 掃碼流程、微信本人掃碼及消息往返尚未驗證。完整範圍見倉庫裏的 VALIDATION.md。首次授權必須由賬號本人操作手機。

適合的使用場景:

  • 需要在 DSH 裏管理多個有獨立記憶的陪伴角色。
  • 想讓角色通過微信或 QQ 私聊回覆特定聯繫人,且不希望私聊內容被賦予文件或終端權限。
  • 願意接受首版的邊界:記憶依賴本地關鍵詞排序,不追求模型每輪自動記憶。

不適合的場景:需要羣聊、多媒體消息、多個角色共用一個 QQ 實例、或依賴逐輪記憶整理的複雜長期記憶系統。

安裝前建議先打開源碼倉庫覈對實現,尤其是出遊和記憶寫入路徑,確認與現有插件(life、persona、qq-bridge)的配置沒有衝突。數據文件帶授權祕密且無獨立加密,備份和遷移要按 README 描述操作。

小結

養魚把多角色陪伴拆成了可操作的三塊:角色與人設管理、按角色隔離的記憶、微信/QQ 私聊出遊。它不是獨立的記憶數據庫,而是建立在 DSH 原生會話之上的應用層約定,能力邊界和驗證範圍在倉庫文檔裏寫得很具體。

目錄頁:https://www.skillhub.cn/plugins/YKY0521/dsh-yangyu
源碼倉庫:https://github.com/YKY0521/dsh-yangyu

羽毛球分组比赛记分
小程序二维码

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

小夜