dsh-plugin-life:爲 DSH 角色模擬作息、真實活動與跨會話記憶

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

小夜