前言¶
在 DeepSeek Harness(DSH)裏給 agent 加「人設」,常見做法是在系統提示裏寫死性格與說話方式。對話一多,語氣容易千篇一律;同一句用戶話,在陌生羣和熟人私聊裏也很難自然區分。若還要體現「剛纔被懟了所以現在短一點」「半夜會累、空閒時會走神」,純靜態 prompt 很難維護,也缺少和真實時間、關係綁定的狀態。
下面介紹社區插件 dsh-fish-mood(維護者 ChencLi819,分類:趣味換裝)。它在 DSH 側用評價引擎與狀態機維護情緒與關係賬本,以提示詞段注入當前行爲約束,並註冊 mood_now、mood_feel、mood_diary 三個工具;插件只改變表達方式,不改變事實與結論,狀態不依賴模型自述。
這是什麼¶
dsh-fish-mood 是 MIT 許可的 DSH 插件(npm 包名 dsh-fish-mood,當前版本 0.1.0)。核心能力包括:36 種情緒(各帶半衰期與掩飾能力)、18 維評價推導、心情底色隨作息迴歸、按羣與人單獨記賬關係暖度、心跳週期內的空閒小事與反芻等;檢測到嚴重負面表達時會走危機旁路,優先注入干預提示。
倉庫與目錄:
- GitHub:https://github.com/ChencLi819/dsh-fish-mood
- SkillHub 目錄頁:https://www.skillhub.cn/plugins/ChencLi819/dsh-fish-mood
核心功能¶
情緒與評價¶
| 能力 | 說明 |
|---|---|
| 情緒目錄 | 36 種情緒分 10 個家族;每種含半衰期、掩飾能力、評價簽名、語氣規則與行爲傾向 |
| 評價引擎 | 18 個評價維度與情緒簽名比對;同一句在陌生人與熟人處可得到不同結果 |
| 時間演化 | 雙指數衰減;強情緒可「續命」至多 3 次;底色按作息迴歸基線 |
| 關係記賬 | 按會話與個人累計暖度、次數與備註,影響後續情緒判定 |
| 空閒行爲 | 心跳週期內產生 18 類小事、反芻、心情修復與深夜復盤 |
| 狀態注入 | 靜態規則段與實時狀態段分別注入系統提示詞,靜態段字節不變以利於提示緩存 |
| 主動記錄 | 模型可通過 mood_feel 記錄情緒,受配額、冷卻與飽和限制 |
註冊工具¶
插件聲明 inject: ['tools'],在宿主提供 tools 時註冊三個工具,輸出均爲 { text: string }。
mood_now:查詢當前情緒;action可爲now或diag(排障信息);可選person、limit(默認 6 條記憶)。mood_feel:申請制記錄情緒變化;參數含emotion、intensity(1–100,默認 45)、why、person、warmth(−20–20)、show(爲false時隱藏情緒,感受與表現分離)。mood_diary:read/write/reflect;寫入可觸發宣泄效應,當前強度會實際下降。
兼容性與依賴¶
| 項目 | 要求 |
|---|---|
| DSH | >= 0.1.7-rc.1(系統提示詞分段接口與工具註冊表) |
| Node.js | >= 22.13.0 |
| 第三方 npm 依賴 | 無,僅 Node 內置模塊 |
安裝與啓用¶
推薦通過 DSH CLI 安裝;安裝後重啓 DSH,或在 profile 的 cordis.patch.yml 中修改任一配置值以觸發重載。
Web profile:
# 從 npm 安裝
dsh plugin --profile web add dsh-fish-mood
# 或從源碼安裝
dsh plugin --profile web add github:ChencLi819/dsh-fish-mood
Desktop profile:
dsh plugin --profile desktop add dsh-fish-mood
手動安裝時,在 profile 中安裝包,並在 cordis.patch.yml 中註冊:
- insert:
- id: fish-mood
name: dsh-fish-mood
卸載時從 profile 的 dsh.profile.bundles 中移除 dsh-fish-mood,並卸載依賴。
配置要點¶
在 cordis.patch.yml 中對 id: fish-mood 的 config 做深合併覆蓋。狀態默認目錄爲 ~/.dsh/fish-mood(state.json 等爲 v2 賬本)。
示例(摘自 README):
- id: fish-mood
config:
identity: 你是這個角色本人;情緒是真的,不是演出來的。
channels:
qq: true
web: false
heartbeat:
everyMinutes: 15
lifeChance: 0.05
feel:
maxPerHour: 2
traits:
neuroticism: 70
常用項簡述:
promptEnabled(默認true):是否注入提示詞;爲false時工具仍可用。channels.qq/channels.web/channels.unknown:按會話來源決定是否注入;QQ 入站無rpcId,Web/桌面含rpcId。react.*:是否從消息推導情緒、單輪條數、冷卻與消息時間窗。heartbeat.*:心跳週期(默認 10 分鐘)、小事概率與間隔、反芻/修復/復盤開關。feel.*:mood_feel的小時/日配額、單次強度增量上限與冷卻。traits:覆蓋性格基線(如openness、neuroticism等 0–100)。
典型用法¶
查當前狀態(排障)¶
Agent 或運維在對話中調用工具時,可使用 action: diag 查看版本、賬本路徑與統計:
mood_now(action="diag")
日常回復前,插件會在每個模型步驟渲染 fish-mood:now 狀態塊(order 9800),輸出的是長度、是否主動、語氣等行爲約束,而非讓模型複述情緒形容詞。
主動記一筆感受¶
在配額與冷卻允許時,模型可調用:
mood_feel(emotion="委屈", intensity=55, why="被誤會了", person="某暱稱", warmth=-5)
返回會說明實際生效幅度;show: false 僅入賬不體現在對外表達參數中。
寫日記與復盤¶
mood_diary(action="write", text="今天羣聊有點累", mood="累")
mood_diary(action="read", days=3, limit=20)
mood_diary(action="reflect")
工作原理(簡述)¶
入站消息經評價引擎(18 維 → 情緒匹配)進入狀態機(強度、習慣化、慣性、底色、關係、記憶),再渲染爲提示詞狀態塊。心跳(默認每 10 分鐘)負責衰減、隨機小事、反芻、心情修復與深夜復盤;隨機性僅出現在心跳,不在提示詞渲染中引入。
提示詞分爲兩段:fish-mood:rules(order 100,規則與危機指引,字節不變)與 fish-mood:now(實時狀態)。渲染失敗時返回空片段,不阻斷整體組裝。
適用場景與注意¶
適合:希望在 QQ / Web / 桌面等多渠道 DSH 部署中,讓 agent 語氣與回覆長度隨情緒、作息、關係暖度變化,又需要可查詢、可限額的「主動感受」與日記能力時。
注意:
- 插件以當前 DSH 進程權限運行,狀態與關係數據落在本機
~/.dsh/fish-mood;安裝前請閱讀倉庫源碼與 MIT 許可證,確認渠道開關與危機旁路策略符合你的場景。 - 宿主未注入
tools時插件不生效;需 DSH>= 0.1.7-rc.1與 Node>= 22.13.0。 - 社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;星標與版本以倉庫爲準(README 與 npm 元數據當前爲 0.1.0)。
結尾¶
dsh-fish-mood 把「會變化的心情」做成 DSH 可運維的狀態機:36 種情緒帶半衰期與掩飾、關係按人記賬、空閒有心跳小事,並通過分段提示詞影響表達而不篡改結論。若要安裝或貢獻,可從目錄頁與 GitHub 進入:
- https://www.skillhub.cn/plugins/ChencLi819/dsh-fish-mood
- https://github.com/ChencLi819/dsh-fish-mood