前言¶
在 DSH 裏跑 agent,常見做法是每輪把一長段 system prompt 塞滿「你是誰、用戶是誰、別忘的事」。上下文一壓縮,人格正文先被擠掉,模型仍記得剛纔聊過什麼,卻像忘了自己是誰;記憶若是靜態列表,要麼越堆越長,要麼和真實對話脫節。DeepSeek Harness 的生態按「一切皆插件」拆分能力,社區目錄 SkillHub 上維護者 danshuyue 的 dsh-agent-soul(分類:記憶)針對的是另一類需求:用純文本文件和可配置的注入策略,讓 agent 有會衰減的記憶、可按小節合併的人格、每輪自判且不寫進系統提示的心情,以及從記憶里長出來的「心裏惦記的事」和按天沉澱的日記。它不接入 B 站、QQ 或桌寵,只關心「她是誰」和「她記得什麼」。
這是什麼¶
dsh-agent-soul 當前 npm 包版本爲 0.5.1(見倉庫 package.json)。插件自述做五件事:人格(Markdown)、記憶(隨時間變模糊而非直接刪除)、目的(主動「想起」而非定時發消息)、心情(每輪判定,主要作日記底色與目的驅動)、日記(開機補寫前一天的公開篇與私密篇,插件可代筆兜底)。
維護者:danshuyue。目錄頁:https://www.skillhub.cn/plugins/danshuyue/dsh-agent-soul。源碼與詳細文檔:https://github.com/danshuyue/dsh-agent-soul。SkillHub 爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
人格注入¶
三層來源,優先級從高到低:
| 層 | 文件 |
|---|---|
| 1 | <cwd>/AGENT.md(可隨倉庫提交) |
| 2 | ~/.dsh/agents/projects/<slug>.md(設置 → 人格 → 項目人格) |
| 3 | ~/.dsh/AGENT.md(設置 → 人格 → 全局人格) |
項目層在「當前工作目錄的 AGENT.md」與「本機項目人格」之間只取一份,不合並兩份全文。全局與項目的關係由 persona.json 的 mode 控制:stack(默認) 按 Markdown 小節疊加,項目覆蓋同名小節、全局其餘保留;exclusive 有項目人格時整份全局不注入。
注入時機:會話第一輪一次,之後每 15 輪補一次,避免壓縮後人格丟失,又不過度重複發送。若 <cwd>/AGENT.md 存在,會蓋住設置頁編輯的第 2 層;設置頁會黃框提示。
記憶¶
值得記的內容經 過濾(規則)→ 提煉(模型)→ 打分入庫(閾值 42,規則不打模型) 進入 ~/.dsh/agents/memory/global.json。一次性日常可不入庫;與主人身份、目標相關的事實可額外寫入全局卡。遺忘是清晰度階梯:清晰 → 清楚 → 模糊 → 只剩印象 → 移出提示詞並進 archive,注入時用「記不清了」「好像有…」等措辭,而不是靜默刪除。每天最多降一檔;被再次提及可回升;可固定(pin)永不遺忘。
新會話第一輪除記憶卡外,還可注入「最近」:近若干天公開日記摘要,以及當天各會話彙總自 conversations/<今天>.jsonl 的片段(由 memoryRecentDiaryDays、memoryRecentChatChars 等配置控制,設 0 可關)。
對話中可用工具 soul_memory(write / recall / forget / pin / list)。
目的機制¶
四個驅動維度(想弄明白、在乎、想分享、想搞懂)隨對話與心情向目標靠攏,8 小時半衰;從記憶長出未閉合事項,渲染成短段(默認 ≤ 320 字、最多 3 條),並寫明不是任務清單。本地 DSH 無推送渠道,「主動」體現爲注入裏的「惦記」,而非 unsolicited 消息。工具 soul_goal(add / done / list);可在設置裏「放下了」。
心情¶
全局一份狀態(agents/mood/global.json),每輪對話後判定心情值與七情;默認不把心情寫進系統提示。判定可走會話模型,或通過 moodJudgeProvider / moodJudgeModel(文檔示例:硅基流動 Qwen/Qwen2.5-7B-Instruct)降本;密鑰經設置頁保存,Windows 用 DPAPI 存於 ~/.dsh/agents/secrets/siliconflow.bin。
2026-11-01 起,偏離基準且滿足間隔時,可在用戶消息後以單獨一條 soul-tone 消息掛一句語氣說明(不進系統提示、不參與記憶提取)。相關開關在「心情 → 判斷模型」下方。
日記¶
規則:DSH 啓動約 5 秒後檢查並補寫「前一天」 的公開篇與私密篇;看門狗每 30 分鐘再查。先嚐試向綁定的日記會話投遞讓 agent 自寫,輪詢文件出現(默認最多 3 分鐘),失敗再由插件 llm.stream 兜底落盤。已存在的兩篇不覆蓋。私密篇僅靠提示詞隔離,文件爲明文;設置頁「最近日記」默認只展示公開篇。線程 threads.json 在多篇日記間保留「還懸着的事」的連續線。
安裝與啓用¶
社區目錄標識爲 danshuyue/dsh-agent-soul。README 中的安裝流程圍繞 <DSH_HOME>:將插件置於 plugins/dsh-agent-soul,在所用 profile 的 package.json 裏 link 依賴並加入 dsh.profile.bundles,Windows 下還需爲 node_modules 建 junction;DSH 實際加載的是 profile 下 node_modules 裏的運行副本,改 lib/ 後需同步並對照哈希。完整命令與路徑以倉庫 README「安裝」節爲準。
啓用後重啓 DSH,打開 設置 → 靈魂(八個標籤:概覽、人格、記憶、目的、心情、日記、筆記、設置)。概覽頁可看人格來源、記憶條數、惦記事項與最近心情/日記狀態。
主要配置寫在 <DSH_HOME>/agents/persona.json,例如 mode、injectMaxChars(默認 3200)、memoryRecall、memoryRecentDiaryDays 等;字段含義見 README「配置」表格。
典型用法¶
裝好後多數時間無需操作:對話中值得記的事自動入庫,每日首次使用會降清晰度,開機補昨天日記。
需要干預時:
- 在 設置 → 靈魂 各標籤中編輯人格、搜/固定/刪除記憶、查看驅動與心情、觸發日記、調注入預算與開關。
- 直接對 agent 說話,例如:
「記住:我下週一開始做藍橋杯的題」
「你還記得我之前說過什麼關於 STM32 的事嗎」
「把那條關於數學建模的記憶忘掉」
「你最近在惦記什麼」
- 直接編輯純文本(改記憶卡後刷新設置頁):
~/.dsh/AGENT.md # 全局人格
~/.dsh/agents/memory/global.json # 記憶卡
README 另列「花錢的地方」:人格補註入、記憶/目的每回合預算、日記每日兩次生成、心情判定每回合等,可先調 injectMaxChars 再考慮關目的或心情判定。
適用場景與注意¶
適合:希望在 DSH 桌面/agent 會話里長期維持同一套人格與跨會話記憶,接受記憶會模糊、日記與心情有額外模型開銷,並願意用設置頁或直接改 ~/.dsh 下 JSON/Markdown 做運維的開發者。
注意:
- 插件以當前 DSH 進程權限讀寫
~/.dsh;安裝前請自行閱讀源碼與倉庫許可證,確認可接受的數據落盤與脫敏策略(入庫前會對密鑰、手機號等做規則脫敏,但並非加密存儲)。 - 人格、記憶、心情、日記都依賴所配置的模型與 API;小模型僅建議用於心情判定等文檔已驗證的路徑。
- 與 README 邊界一致:不替代 IM 橋接的主動推送;QQ 等渠道的「主動發消息」不在本插件範圍內。
結尾¶
dsh-agent-soul 把 agent 的「靈魂」拆成可編輯的文件和可預測的注入節奏:人格按小節合併、記憶按人的規律變淡、惦記與心情給連續感,日記把前一天收成兩篇文本。若要瀏覽簡介或跳轉源碼,可使用 SkillHub 目錄頁 https://www.skillhub.cn/plugins/danshuyue/dsh-agent-soul 與 GitHub 倉庫 https://github.com/danshuyue/dsh-agent-soul。