前言¶
在 DeepSeek Harness(DSH)裏給模型定角色,常見做法是用 @deepseek-ai/dsh-persona:整個人設綁在一個 preset 上,該 preset 下所有會話共用同一套人設。若要在同一窗口裏讓「這個會話是貓、那個會話是律師」,或在對話進行中臨時改人設,preset 級方案覆蓋不到。
dsh-persona-slot(維護者 Zylog82568,社區分類「趣味換裝」)針對的是會話級人設:每個會話恰好保留一個人設槽位,另有一條全局人設供未單獨配置的會話繼承;可通過 /persona 命令或在 Web GUI 的 Plugins → Installed 面板編輯。下文按安裝、配置、用法與注意事項說明。
這是什麼¶
一句話:dsh-persona-slot 是 DSH 的 per-session persona 插件——寫入新人設會替換舊值而非疊加;全局人設覆蓋所有沒有會話專屬記錄的會話;變更在下一步模型調用時通過 agent 範圍的 system-prompt/assemble 鉤子生效,不同會話互不可見。
與官方 dsh-persona 的分工:preset 級統一角色仍用 dsh-persona;需要按會話區分或在運行中改人設時用本插件。
核心功能¶
每會話一人設¶
這是實現保證,不是約定:
- 會話存儲是單值,
set即覆蓋,不會拼接多條人設。 - 解析在第一個有記錄的層級停止,同一會話不會同時帶上「精確會話人設」和「全局人設」兩段。
三層解析順序¶
第一個有記錄的層級生效:
| 順序 | 層級 | 存放位置 |
|---|---|---|
| 1 | 精確 session id | config.sessions["<id>"] 或運行時 store |
| 2 | 通配符 "*" |
config.sessions["*"] 或運行時 store |
| 3 | global | config.global 或運行時 store |
記錄可以是文本(作爲人設),或顯式空白。默認 blankOverrides: true 時,空白會終止查找,會話可「靜音」而不刪部署默認;blankOverrides: false 時空白會繼續落到下一層。
/persona 命令¶
在會話裏可直接讀寫人設,文本原樣保留(含多行)。常用形式:
/persona 顯示本會話解析後的人設
/persona show [this|global|all] 顯示指定目標
/persona set <text> 設置本會話人設
/persona set global <text> 設置全局人設
/persona set all <text> 設置通配符層級人設
/persona set for <id> <text> 爲指定 session id 設置人設
/persona clear [target] 刪除記錄,目標回退到下一層
/persona mute [target] 寫入空白以阻止回退
/persona list 列出運行時覆蓋
/persona mode append|replace|config 選擇人設如何進入 prompt
/persona reset 清除所有運行時覆蓋
for 之後的字符串才當作 session id;例如 /persona set 你是貓娘 會把人設設爲「你是貓娘」,不會誤解析爲 id。
Installed 頁面板¶
在 Web GUI 打開 Plugins → Installed,找到 dsh-persona-slot,展開 persona-slot 行可進入插件專屬頁:
- Global persona(總人設):多行編輯器,保存後對所有無會話專屬人設的會話生效(下一步模型調用起)。
- Wildcard persona:無專屬人設的會話使用的通配層級。
- Placement:在部署人設之後追加(append)、替換部署人設(replace),或跟隨 profile 配置。
- Live sessions:各活躍會話當前解析結果、來源,以及對持有專屬人設的會話提供 Clear。
面板約每 10 秒刷新,未保存的輸入不會被覆蓋。數據經 /persona-slot/state 與 /persona-slot/update 讀寫,與 /persona set 寫入同一份文檔。無 HTTP 界面的 headless / TUI 組合只能依賴 /persona。
運行時狀態位置¶
用戶通過命令或面板寫入的內容落在:
$DSH_HOME/persona-slot/personas.json
Profile 裏的 YAML 是部署默認值;上述文件是運行時覆蓋,升級插件或重建 profile 不會清掉會話裏寫的人設。文件損壞會被挪爲 personas.json.corrupt,插件以空狀態啓動而非直接失敗。
對模型與 Token 的影響¶
append 模式下人設作爲 persona-slot:session 段接在部署人設之後;replace 模式下改寫部署人設段本身。人設文本 interpolate: false,字面量 {{anything}} 不會在組裝時被當變量展開。人設不變時前綴穩定,有利於 provider 側 prompt caching;中途 /persona set 會從該段起使 KV cache 失效,這是換身份的預期代價。
安裝與啓用¶
官方安裝命令(將 <profile> 換爲你的 profile 名):
dsh plugin --profile <profile> add dsh-persona-slot
本地開發可鏈接目錄:
dsh plugin --profile <profile> add link:/absolute/path/to/dsh-persona-slot
bundle patch 會掛載一行 persona-slot。package.json 標明版本 1.2.0、MIT 許可證;引擎要求 Node ^22.19.0 || >=24.0.0,DSH 版本需在 README/package 聲明的範圍內。安裝前建議閱讀倉庫源碼與許可證——插件以當前 DSH 進程權限運行,人設本身是操作者編寫的 prompt 文本,不是安全邊界,不能替代工具限制、沙箱或審批策略。
Profile 配置示例(字段含義以 README 爲準):
- id: persona-slot
config:
global: "You are a terse systems engineer. Answer in short commands."
sessions:
"<session-id>": "You are a cat. Every sentence ends with 喵."
"*": "Answer in Simplified Chinese."
enabled: true
mode: append
prefix: ""
suffix: ""
blankOverrides: true
includeSubagents: true
| 字段 | 默認 | 含義 |
|---|---|---|
global |
"" |
無會話專屬記錄時會話繼承的人設 |
sessions |
{} |
按 session;"*" 爲通配層級 |
enabled |
true |
總開關;false 時不注入但仍保留已存文本 |
mode |
append |
append 追加段,replace 替換部署人設 |
prefix / suffix |
"" |
人設上下包裹文本 |
blankOverrides |
true |
空白是否終止該層查找 |
includeSubagents |
true |
子 agent 會話是否也解析人設 |
運行時也可用 /persona mode 切換 mode。
典型用法¶
- 在 profile 裏寫好
global與sessions["*"],作爲默認中文或角色基調。 - 某次對話需要臨時角色:在會話中執行
/persona set …,下一步起模型按新身份回覆。 - 多會話並行、人設不同:分別爲各 session 用
/persona set for <id> …或在面板 Live sessions 中查看來源並清理。 - 某會話不想喫全局人設:對該會話
/persona mute或clear,配合blankOverrides控制是否繼續繼承下層。
人設長度無上限;過長的人設會在每次請求中佔用上下文,需自行控制篇幅。
適用場景與注意¶
適合:同一 DSH 實例下多會話並行、人設要分開;對話中途換角色;希望通過 GUI 編輯長人設(角色設定表),而不只依賴單行 settings 表單。
侷限(README 已說明):
- 人設不限制工具與策略,不能當權限機制用。
- 面板依賴
ctx.webServer的 HTTP 路由;純 TUI/headless 僅命令行。 - 解析與覆蓋按 session id,不是會話標題。
- 社區目錄頁與 GitHub 由維護者發佈;DSH 生態是「一切皆插件」,SkillHub 等目錄站點與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-persona-slot 把「全局一條 + 每會話一條 + 運行時可改」收進一個 persona 槽位和統一的 prompt 鉤子,與 preset 級的 dsh-persona 互補。需要安裝或源碼時,可訪問社區目錄頁與 GitHub 倉庫:
- 目錄頁:https://www.skillhub.cn/plugins/Zylog82568/dsh-persona-slot
- GitHub:https://github.com/Zylog82568/dsh-persona-slot