前言¶
在 DeepSeek Harness(DSH)裏做多項目、多場景對話時,常遇到兩類問題:全局記憶混在一起,換目錄或換「人設」後上下文對不上;若在會話中途不斷改系統提示裏的記憶,還會打穿供應商的前綴緩存,成本上升。社區插件目錄裏歸類爲「記憶」的 dsh-persona 走另一條路——按角色槽位隔離存儲,會話開始時把記憶凍結進提示詞,並在回合結束後用獨立復盤寫入。下面介紹它是什麼、怎麼裝、日常怎麼用,以及使用時要注意的點。
這是什麼¶
dsh-persona 由維護者 TBAOT 發佈,是面向 DSH 的「角色記憶」插件:每個角色有兩檔長期記憶(用戶畫像 user + 角色筆記 memory),在會話開始時一次性注入提示詞;支持 add / patch / remove 維護條目,並有硬字符上限,寫滿會拒絕並要求合併。多個角色通過槽位與工作區綁定各自獨立,未綁定工作區可回退到默認桶或經面板認領。
許可爲 MIT;package.json 中版本爲 0.4.4,引擎要求 dsh 爲 >=0.2.1-rc.2 <0.3.0、node 爲 >=20.18。
核心功能¶
兩檔記憶與凍結注入¶
數據落在 <DSH_HOME>/personas/<角色>/memory/(DSH_HOME 默認爲 ~/.dsh):
user.md:用戶畫像(默認上限 1375 字符)memory.md:角色筆記(默認上限 2200 字符)topics/:預留,供按需讀取的細節
條目爲普通 Markdown,條目之間用單獨一行 § 分隔。記憶在會話開始時讀一次,整個會話內不再變更,以便系統提示前綴穩定、利於前綴緩存命中;本會話復盤寫入的內容,下一個會話纔會出現在注入裏。工具返回仍顯示實時用量。
槽位、面板與工作區綁定¶
包裝聲明 4 個槽位(slot-1…slot-4)。裝好並在 profile 的 dsh.profile.bundles 中啓用後,左欄底部出現「角色」面板:
- 左側:角色列表(名字、槽位 id、綁定工作區數量)
- 記憶:兩檔編輯器與用量
- 復盤記錄:最近 30 條
- 工作區:從應用已有工作區選擇綁定,或手動填寫必須真實存在的子目錄路徑
工作區 → 角色 映射寫在 <DSH_HOME>/personas/index.json。會話歸屬由工作目錄決定,無需在新建會話時選預設;改名不丟記憶(目錄跟槽位走)。
每輪復盤(自動寫)¶
回合關閉後異步跑一次模型,讀對話摘要與當前記憶,返回結構化改動寫入同一存儲:不阻塞當輪迴復,不改當輪已凍結的快照。每次操作記在 <角色>/review/log.jsonl;單條超限只拒那條;JSON 解析失敗記 parse-failed,不重試。模型來源順序:插件配置的 provider + model → 平臺默認 → 皆無則跳過並警告。
復盤相關配置示例(摘自 README):
- id: persona-review
name: dsh-persona/review
config:
personaId: default
enabled: true
everyTurns: 1
maxTokens: 1200
dryRun: false
provider: wb-proxy
model: deepseek-v4.1-flash
memory 工具¶
模型通過 memory 工具維護記憶,須指定 target 爲 user 或 memory:
| 操作 | 行爲 |
|---|---|
add |
追加;與已有條目完全重複會被拒絕 |
patch |
用 old_text 定位唯一片段並替換 |
remove |
用 old_text 定位並刪除整條 |
一次調用可帶多條 operations,按順序執行,最終結果須在上限內,否則整批拒絕。寫入前會檢查不可見 Unicode 與疑似密鑰/私鑰。
未綁定工作區與「未認領池」¶
會話 cwd 不屬於任何角色工作區時,回退到配置中的 personaId(默認 default),記憶與復盤落在 personas/default/;該桶不在名冊裏,未綁定項目共用一份。面板顯示爲「未認領池」,可一鍵 adopt 到當前角色(POST /dsh-persona/api/adopt)。要避免混用,請在工作區面板完成綁定或認領。
角色私有技能¶
可將技能放在 <DSH_HOME>/personas/<角色>/skills/(目錄式 SKILL.md 或平鋪式 .md)。會話開始時僅把本角色目錄下的技能索引注入該會話提示詞;共享技能仍放 ~/.dsh/skills 或 ~/.agents/skills。
從 dsh-soul-md 遷移¶
若曾使用 dsh-soul-md,可用倉庫腳本遷移(源數據不動,可重複運行):
node scripts/migrate-soul-md.mjs --persona slot-1 \
--patch ~/.dsh/profiles/<profile>/cordis.patch.yml
安裝與啓用¶
README 註明:npm 上的 dsh-persona 爲他人佔用名(0.0.1,描述爲 name reserved),本倉庫未發佈到 npm,請從 git 安裝。
1、安裝插件(將 <profile> 換成你的 profile 名):
dsh plugin --profile <profile> add github:TBAOT/dsh-persona
本地開發時 README 還支持 dsh plugin --profile <profile> add link:<本地路徑>。
2、在對應 profile 的 dsh.profile.bundles 列表中加入 dsh-persona。
3、重啓 Harness。
卸載時從 bundles 移除並卸載包即可;<DSH_HOME>/personas/ 下數據不會自動刪除,需自行備份或清理。
主配置塊示例:
- id: persona-memory
name: dsh-persona
config:
personaId: default
userLimit: 1375
memoryLimit: 2200
inject: true
userTitle: 用戶畫像 / USER PROFILE
memoryTitle: 長期記憶 / MEMORY
一個 personaId 對應一份記憶;多角色獨立時,可爲每個角色在預設裏掛一行 dsh-persona 並設置不同的 personaId。
典型用法¶
1、安裝並加入 bundles 後,打開左欄「角色」,在空槽新建角色並命名。
2、在「工作區」裏把常用項目目錄綁定到該角色;之後該目錄及子目錄下的會話自動歸屬此角色,會話開始時會注入該角色的凍結記憶。
3、對話中模型可用 memory 工具更新畫像或筆記;同時可開啓 persona-review,讓每輪結束自動復盤寫入。觀察階段可設 dryRun: true,只記錄不落盤。
4、若有未綁定目錄的歷史會話,在面板「未認領池」查看並 adopt 到目標角色,或提前綁定工作區以免寫入 default 桶。
5、角色專屬工作流可把 SKILL.md 放進該角色 skills/ 目錄,無需改全局技能路徑。
適用場景與注意¶
適合:同一 DSH 上並行多個「角色」或項目線,需要隔離長期記憶、又希望控制提示詞前綴穩定;願意接受「當會話內新記憶下一會話才進注入」的折中。
隱私與權限:記憶爲本地明文文件,插件本身不聯網;注入內容與復盤調用會隨你配置的模型供應商出站。安裝前宜瀏覽 GitHub 倉庫 源碼與 MIT 許可證;插件以當前 DSH 進程權限運行,與任意社區插件一樣,信任邊界由你自行評估。
生態說明:DSH 奉行「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-persona 把「多角色 + 兩檔記憶 + 凍結注入 + 每輪復盤」收進一套本地文件與工作區映射裏,並附面板與 adopt 流程處理未綁定目錄。需要細節時,以目錄頁 dsh-persona 與倉庫 TBAOT/dsh-persona README 爲準。