dsh-fish-mood:爲 DSH Agent 提供會隨時間演化的情緒狀態

前言

在 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 }。

  1. mood_now:查詢當前情緒;action 可爲 now 或 diag(排障信息);可選 person、limit(默認 6 條記憶)。
  2. mood_feel:申請制記錄情緒變化;參數含 emotion、intensity(1–100,默認 45)、why、person、warmth(−20–20)、show(爲 false 時隱藏情緒,感受與表現分離)。
  3. 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 語氣與回覆長度隨情緒、作息、關係暖度變化,又需要可查詢、可限額的「主動感受」與日記能力時。

注意:

  1. 插件以當前 DSH 進程權限運行,狀態與關係數據落在本機 ~/.dsh/fish-mood;安裝前請閱讀倉庫源碼與 MIT 許可證,確認渠道開關與危機旁路策略符合你的場景。
  2. 宿主未注入 tools 時插件不生效;需 DSH >= 0.1.7-rc.1 與 Node >= 22.13.0。
  3. 社區目錄 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
羽毛球分组比赛记分
小程序二维码

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

小夜