dsh-multi-persona:在 DeepSeek Harness 裏按稱呼切換多人格

前言

在 DeepSeek Harness(DSH)裏做多角色協作時,常見做法是手動改系統提示、開多個會話,或把人格寫死在 AGENT.md 裏。換一個人就要改配置或換窗口,歷史消息也很難對得上「當時是哪個角色在答」。若你希望同一個窗口裏用一句話切換語氣與人設,並給每個人格單獨的頭像與正文,又不想爲增刪角色去改插件源碼,dsh-multi-persona 針對的就是這條路徑。

這是什麼

dsh-multi-persona(npm 包名;曾用名 dsh-persona-router)由維護者 Darwin-2002 發佈,在 SkillHub 分類爲趣味換裝,當前 GitHub 倉庫星標爲 0。插件在同窗口內按你對助手的稱呼路由人格,支持多人同臺接話;每個人格對應獨立正文與頭像,人格數據以文件夾形式存放在 <DSH_HOME>/personas/。包版本 1.11.5,許可證 MIT,要求 Node.js ≥ 20。

內部仍使用路由前綴 /persona-router、數據目錄 <DSH_HOME>/persona-router/ 與上下文段名 persona-router:*,與 2026-11-10 起的包名「dsh-multi-persona」、面板標題「多人格切換」並存,便於沿用已有狀態文件。

核心機制

下面介紹一輪請求從判定到展示的鏈路。

環節 做法
判定 agent/pre-step 讀取本輪最後一條用戶消息,在稱呼位上匹配別名
記賬 <DSH_HOME>/persona-router/state.json,按 session 分開記錄
注入 ctx.systemPrompt.context(),order: 250,interpolate: false
頭像 壁紙引擎開啓時改寫其頭像節點;關閉時自繪一層;同一時刻僅一份
底座 ~/.dsh/AGENT.md 寫成中性協作規則與「兜底人格」;插件失效時退回兜底

判定規則刻意保守:別名須貼在句首、標點或空白邊界;別名後可跟「在不在」「在嗎」等稱呼尾詞;正文中順帶提到的名字不會觸發切換;一輪未點名則沿用會話上次人格;從未切換時按會話 → 工作區 → 全局三檔階梯解析。

典型單人切換示例:

「普拉娜,幫我看看這段 C 盤日誌」   → 這一句起換成普拉娜
「阿羅娜,剛纔那個再說一遍」         → 這一句起換成阿羅娜
「那這份文獻呢」                     → 沿用上一個(不會亂切)

多角色同臺

一輪消息裏在稱呼位點上 ≥2 位人格時,插件讓它們共用同一段記憶、在同一模型調用內依次接話(並非多個獨立 AI)。先開口者爲消息裏第一個被叫到的名字,其餘按點名順序接話,每段以「【名字】」起頭。

「諾亞、優香,這個預算你們看」
  → 【諾亞】先回應老師
  → 【優香】接着她的話說:同意 / 不同意 / 補一句她漏掉的

同臺默認開啓(config.json 的 multiRole,默認 true);設爲 false 則退回「取最後一位」行爲。同臺之後默認由先開口者接棒(pinLeadOnMulti,默認 true)。人格目錄的 persona.json 可配置可選 voice 數組(每條一句話,最多 6 條),同臺時作爲聲線硬約束掛在正文後。

排障可不發真實消息,調用 GET /persona-router/probe?text=<URL 編碼的一句話>&session=<id> 查看命中誰、是否同臺、世界書條目,只計算不寫盤。

人格目錄與可選世界書

人格 = 一個文件夾,增刪不改插件代碼:

<DSH_HOME>/personas/
  <id>/
    persona.json     # 必填
    prompt.md        # 必填,人格正文
    avatar.png       # 可選,也可 avatar.jpg / avatar.webp

persona.json 中 aliases 決定如何被稱呼;name 與 id 會自動併入別名。新增人格可複製倉庫 examples/sample/ 改目錄名,重啓或等待熱重載後即可呼叫。

可選 lore.json 按關鍵詞或 constant: true 注入世界書,單次請求上限爲 8 條、合計 20,000 字符;無此文件時行爲不變。

三檔生效範圍

優先級從高到低:會話檔(叫名字或 PUT /persona-router/session)→ 工作區檔(按歸一化 cwd,PUT /persona-router/workspace)→ 全局 default(面板「設爲默認」)→ 列表中第一個可用人格。@none 表示該檔明確不注入人格塊。叫名字永遠優先於工作區與全局;階梯解析結果不會寫回會話檔,以免永久釘死。

設置面板與配置

在 DSH 設置 → 人格路由(section id persona-router)可開關按稱呼自動切換、改別名、上傳頭像(裁成 512×512)、設默認、試算判定等。面板不編輯 prompt.md(由 dsh-agent-md 的「人格」頁負責)。

可選 config.json 示例:

{ "enabled": true, "avatarRepeatRows": 6, "avatarSize": 40 }

另支持 multiRole、pinLeadOnMulti 等字段,含義見倉庫 README。插件依賴本機 webServer 提供頭像 HTTP 路由。

安裝與啓用

先做環境確認:DSH profile 需具備 webServer 與 systemPrompt(已在插件 inject 中聲明)。安裝前建議閱讀 GitHub 源碼 與 MIT 許可證;插件在當前 DSH 進程權限下運行,安裝即信任其宿主半與客戶端半代碼。

從 npm(發佈之後):

dsh plugin add dsh-multi-persona

從 GitHub 源碼(構建期需 allowBuilds 授權):

dsh plugin add github:Darwin-2002/dsh-multi-persona

本地目錄(開發):指向包根目錄執行:

dsh plugin install <本包目錄>

亦可在 DSH「插件管理」中選擇「安裝本地插件」。安裝器會維護 profile 的 package.json 與 cordis.patch.yml,不要手寫這兩項。

從 dsh-persona-router 升級時須先卸舊再裝新:

dsh plugin remove dsh-persona-router
dsh plugin add dsh-multi-persona

人格目錄與 persona-router/ 下狀態可保留,無需遷移。宿主半代碼變更後插件管理裏關開一次本插件或重啓 DSH;GET /persona-router/health 的 codeVersion 可用於確認版本。

與 dsh-agent-md 的關係

插件不修改 dsh-agent-md 源碼,但會將 ~/.dsh/AGENT.md 調整爲中性底座加「兜底人格」:本輪已注入「當前人格」塊時兜底節作廢;插件停用或加載失敗時仍由兜底人格接手,避免空殼提示詞。

適用場景與注意

適合在同一 Harness 窗口裏做角色扮演、分角色評審或按項目目錄綁定不同協作風格的用戶。需注意:只識別稱呼位,單字別名易誤觸,建議兩字以上;同臺仍爲單次模型調用;三檔中的工作區與世界書在設置面板側的部分 UI 入口 README 標明尚未齊備,可用 HTTP API 或手寫 lore.json 操作。

卸載:

dsh plugin remove dsh-multi-persona

數據目錄 <DSH_HOME>/personas/ 與 <DSH_HOME>/persona-router/ 會保留,可按 README 回退 AGENT.md。

結尾

dsh-multi-persona 把「人格」落成可文件夾管理的配置:按稱呼切換、可選同臺、按輪次還原頭像,並與 DSH 插件化架構一致。更多信息見 SkillHub 目錄頁 dsh-multi-persona 與倉庫 Darwin-2002/dsh-multi-persona。

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

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

小夜