前言¶
在 DeepSeek Harness(DSH)裏給 agent 掛人格,常見做法是靜態 system prompt:角色不會隨時間變化,也不會在會話之外「自己去做事」。對話一關,上下文就斷;下一輪只能從零開始,或靠你手動塞歷史。
dsh-plugin-life 是社區維護者 c137650 發佈的 Cordis 插件(分類:模型推理)。它給 Harness 裏的角色裝一套受生理邊界約束的有限狀態機(睡 / 喫 / 清醒),在清醒時段用真實搜索與抓取產生筆記和 SQLite 事件;每輪對話前按優先級掛載生活記憶與「關於你的事」,且明確不壓過人格與你當前輸入。設計動機來自 README 裏的一句話:「這種虛擬感來源於靜止」——插件的工作是讓 agent 不再停在原地。
這是什麼¶
- 倉庫:c137650/dsh-plugin-life
- 目錄頁:SkillHub 插件頁
- 版本(package.json):0.1.0,MIT 許可證
- 定位:DeepSeek Harness plugin for agent to simulate a real life(目錄簡介與倉庫描述一致)
插件通過倉庫根目錄的 cordis.patch.yml 被 DSH 加載;人格文本建議配合 dsh-plugin-masterprompt(無 masterprompt 時插件仍可運行,但無後臺人格來源)。
生理狀態與真實活動¶
有限狀態機¶
睡、喫、清醒三類狀態。硬編碼邊界在 lib/physiology.js:睡眠約 6–10 小時、兩餐間隔 4–11 小時、連續清醒不超過 16 小時。邊界內的具體時刻由歷史統計與確定性隨機採樣;從第 2 天起由前幾天的數據條件採樣,長期運行會形成相對穩定的節律。
DSH 關閉期間的時間會被快進;重啓後插件能按延遲推算錯過的餐點等(見 lib/catchup.js)。
清醒時的真實網絡活動¶
清醒時插件會真的搜索、抓取頁面,並把讀到的內容寫入 reading/ 下的筆記文件,而不是純文本劇本。
- 搜索走
ctx.web.search - HTTP 抓取用 Node 自帶
fetch, deliberately 不走ctx.web.fetch(避免多 provider 時的WEB_PROVIDER_AMBIGUOUS) - 抓取鏈分四級:PDF(PyMuPDF)、站點專用接口(arXiv / B 站 / GitHub / Wikipedia)、普通 HTML 剝標籤、必要時 Playwright 渲染;候選 URL 比目標多,抓不到就試下一個,湊夠 1–3 個成功即停
- 只有至少抓到一個 2xx 且正文非空的頁面,活動纔會寫入
life.db;檢索目標單獨存intent,與正文分開
事件記憶與壓縮¶
事件寫入 SQLite,帶摘要、經過、感受及 interesting / important 分數。
壓縮策略(README 原文):
綜合分 = importance·0.6 + 新鮮度·0.4 新鮮度按 7 天半衰期衰減
分數前 10% 完整保留,不計入壓縮次數
中間 70% 剝成"標題 + 感受"
最老 20% 只留標題
第 3 次被壓縮 → 整行刪除
keep = 1(importance ≥ 0.75)的事件不參與壓縮。
對話上下文裏的記憶掛載¶
每輪對話前掛載記憶,優先級爲人格與你當前話句之上不越界。三塊互不重疊:
永遠記得的: keep=1 的事件,全部掛載,不設條數上限
記得這些事: importance ≥ 0.5 的,取 2 條
最近: 最近的,取 2 條
記憶以 user 角色消息形式插在當前輸入之前,並標明是背景而非對用戶的指令。user_profile.md 每輪全量掛載。
跨會話記憶(captain.db)¶
與「她自己的生活」分庫存儲,避免任務與代碼污染生活事件。
每輪對話結束後:先用規則閘門判斷是否有關於你的持久信息(不調用模型);通過者再將整輪「你說 + 她回」壓成第三人稱、≤60 字概括,用句向量判重後入庫。掛載集合爲近 7 天寫入 ∪ 熱度 ≥ 0.5;熱度隨「再次被提到」按 14 天半衰期累積,無事件能永久掛載。
可選 embedding:bge-small-zh-v1.5,同時用於活動話題查重(近 7 天相似則換方向)。未找到模型時插件仍運行,判重與提及檢測退化爲關鍵詞。
安裝與啓用¶
前提:DeepSeek Harness 已運行;建議已安裝 dsh-plugin-masterprompt。
官方 README 給出的步驟如下(%DSH_HOME% 默認爲 C:\Users\<你>\.dsh,Linux 用戶可對應爲 ~/.dsh 等等價路徑):
# 1. 放到插件的搜索路徑下
git clone <this-repo> "%DSH_HOME%/plugins/dsh-plugin-life"
# 2. 裝依賴(只有一個 peer)
cd "%DSH_HOME%/plugins/dsh-plugin-life"
npm install
# 3. 重啓 DeepSeek Harness
運行時依賴:
| 依賴 | 說明 |
|---|---|
@deepseek-ai/cordis ^4.0.1 |
peer dependency |
| Node.js ≥ 22 | 使用 node:sqlite 的 DatabaseSync |
可選:Python 3.12 + PyTorch + transformers + modelscope,下載 bge-small-zh-v1.5(README 給出 modelscope 示例命令)。默認 Python 路徑爲 E:\anaconda\envs\tts0\python.exe,可用環境變量 CAPTAIN_PYTHON 覆蓋。
可選抓取增強:Python 的 requests / beautifulsoup4 / lxml、PyMuPDF、playwright、yt-dlp;啓動自檢結果寫入 status.json,缺失則對應能力降級。
安全說明:插件以當前 DSH 進程權限運行,會發起真實網絡請求並讀寫 %DSH_HOME%/dsh-plugin-life/ 下的數據庫與文件。安裝前請閱讀源碼與 MIT 許可證,確認網絡與磁盤訪問符合你的環境策略。
配置與典型用法¶
配置文件(均在 %DSH_HOME%/dsh-plugin-life/)¶
| 文件 | 作用 |
|---|---|
user_profile.md |
偏好;影響活動選擇與打分,每輪全量掛載 |
persona.txt |
可選,指定 masterprompt 模板 id |
captain_rules.json |
可選,覆蓋跨會話記憶規則詞表 |
對話工具¶
| 工具 | 用途 |
|---|---|
life_status |
查心跳、庫行數、上次錯誤;tick=true 強制心跳;probeWeb=true 發一次搜索驗證網絡 |
life_open_detail |
新開會話,詳細講某件事 |
診斷¶
GUI 中無插件日誌時,可查看同目錄下的 status.json,或使用本機迴環端點:POST /dsh-life/icr/start、GET /dsh-life/icr/status、GET /dsh-life/icr/result(人格一致性迴歸)。
Prompt 與人格相關文案在倉庫 prompts/;修改人格時需保證後臺寫手與前臺會話使用同一份 system prompt 組裝邏輯(見 prompts/README.md)。
適用場景與注意¶
適合:希望在 DSH 裏讓角色有晝夜節律、離線期間狀態追趕、背景裏真實閱讀積累,以及分庫的「關於用戶」長期記憶,且能接受額外 LLM 調用(寫手任務 / 感受 / captain 摘要)與可選 Python 嵌入進程。
注意:
- 社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,本文安裝步驟以 GitHub README 爲準,勿憑插件名臆造
dsh plugin add命令。 - 星標與版本以倉庫當前狀態爲準(抓取時 GitHub 顯示 1 star,package.json 爲 0.1.0)。
結尾¶
dsh-plugin-life 把生理邊界、真實抓取、分級壓縮的生活記憶和 captain 跨會話庫串成一條閉環:角色會在你不在時繼續「過日子」,回來時帶着可覈對的狀態與背景,而不是空泛的角色扮演臺詞。
- 目錄頁:https://www.skillhub.cn/plugins/c137650/dsh-plugin-life
- 源碼與完整設計說明:https://github.com/c137650/dsh-plugin-life