dsh-hormone:用會話事件驅動「激素狀態」,越界才寫入系統提示

前言

在 DSH(DeepSeek Harness)裏,助手的行爲通常只靠靜態 system prompt 和當輪上下文。會話裏工具連續失敗、長時間沒人說話、跨天又接着幹活——這些事實不會自動變成模型能感知的內部狀態,除非你每次手工改提示或另寫一層編排。

dsh-hormone 走另一條路:維護四個隨時間衰減、會互相影響的連續數值(壓力、精力、爽度、無聊),由真實會話事件更新;只在某個指標越界時,才往系統提示裏追加一條帶 [hormone] 前綴的短句。正常範圍內不注入,避免把 prompt 當成情緒彈幕。維護者爲 y258dd,社區目錄分類爲工作流;當前 package 版本爲 0.4.0,MIT 許可證。

下面介紹它是什麼、怎麼裝、怎麼觀察與調參,以及使用時該注意什麼。

這是什麼

一句話:給 DSH 助手裝一套會變的「激素」——不是給模型貼固定情緒標籤,而是四個 [0, 1] 上的內部狀態,按事件漲跌、按半衰期衰減,並在指標耦合下互相拉扯;注入層已跑通,門控層未做(不硬壓輸出長度)。插件只用 DSH 公開插件 API,不修改其他插件數據,不聯網。

四個狀態及主要規則(細節以倉庫 README 爲準):

狀態 含義 典型漲跌 半衰期
cortisol 壓力 工具報錯、連續失敗、被批評/糾正上漲;順利收尾下降 3 小時(開心時可縮短)
energy 精力 跨天恢復;幹活按 token 扣減,閒聊不扣 不走半衰期
dopamine 爽度 任務順利收尾、被誇/被謝上漲 40 分鐘
boredom 無聊 約 25 分鐘無人說話開始漲 上漲半衰期 5 小時

更新公式:新值 = clamp(舊值 × 0.5^(Δt / 半衰期) + Σ增量, 0, 1)。沒有衰減時狀態會積到上限並「卡死」,因此衰減是設計的一部分。

核心功能

事件驅動與耦合

狀態只能被事件改——插件不提供寫入工具,模型不能自己調「心情」,避免退化成隨意表演。

lib/events.js 裏用增量與正則(如 BLAME_RE / PRAISE_RE)映射事件;判斷被誇/被批評是關鍵詞匹配,會漏判也會誤判,設計上批評優先於誇獎。只處理真人用戶消息(user/message 且 source.kind === 'user'),插件自身注入的內容忽略。

四個數還會互相影響,例如爽度越高同樣工作量精力扣得越少(COUPLING.joyCost),壓力越高扣得越多(COUPLING.stressCost);參數可在 lib/state.js 的 COUPLING 中調整,全部設爲 0 則退回各算各的。

熬夜與睡眠債

00:00–07:00 仍在幹活時,精力扣減會計睡眠債(默認 DEBT.ratio 爲 1.3 倍),債會壓低精力上限(欠滿時上限約 0.6);債從記債時刻起 24 小時線性衰減。與深夜精力基線(約 0.45)配合,用來表達「熬一次夜,第二天確實虛」。

注入:越界才寫、邊沿觸發

只有一層注入邏輯,全部正常時系統提示裏一個字都不加。越界示例(閾值在 lib/render.js 的 THRESHOLD):

  • cortisol > 0.75 → 回答收短,不主動攬活
  • energy < 0.2 → 能一句說完就別鋪墊
  • dopamine > 0.6 → 可以多說兩句
  • boredom > 0.55 → 有點悶,可以主動扯兩句

注入文本硬上限 110 字,每輪最多一條。邊沿觸發:越界第一輪說一次,持續越界則不再重複,直到恢復正常再次越界;若長期不恢復,靜默 40 分鐘(EMIT.rementionAfterSec)後才重提。

README 明確說明:未做門控(例如硬限制輸出長度),也未做 memory-lite 的 emotion 字段權重。

安裝與啓用

插件以當前 DSH 進程權限運行,安裝前建議自行查看 GitHub 倉庫 源碼與 MIT 許可證。

常用安裝方式:

dsh plugin --profile desktop add dsh-hormone

不從 npm 安裝時:

dsh plugin --profile desktop add github:y258dd/dsh-hormone

本地改代碼並熱重載時,可克隆後 link 安裝(開發用):

git clone https://github.com/y258dd/dsh-hormone.git
cd dsh-hormone
dsh plugin --profile desktop add link:$PWD   # Windows: link:D:/path/to/dsh-hormone

或手改 ~/.dsh/profiles/desktop/package.json,將 dsh-hormone 設爲 link:/path/to/dsh-hormone 並加入 bundles。裝完需重啓 DSH 生效。

卸載:

dsh plugin --profile desktop remove dsh-hormone

典型用法:觀察、調試與調參

看狀態文件

狀態落在 DSH 配置目錄下,默認路徑爲 ~/.dsh/hormone/state.json(Windows 爲 C:\Users\<你>\.dsh\hormone\state.json)。純 JSON,history 保留最近 400 次變化及 why(如 tool-error、turn-done、praised 等)。刪除該文件即回到初始狀態,無副作用。

環境變量

先觀察、暫不影響回答:

export DSH_HORMONE_MODE=observe

覈對事件結構時:

export DSH_HORMONE_DEBUG=1

調試輸出追加到 %DSH_HOME%\hormone\events.jsonl。

調參入口

改 lib/state.js、lib/events.js、lib/render.js 頂部常量後重啓。例如 ENERGY.dailyBudget 默認約 1300 萬 token/日預算(作者按 12 天用量標定);覺得掉精力太快可調大。設計取捨與事件字段見倉庫內 docs/DESIGN.md。

倉庫內測試(Node 20+,無第三方依賴):

npm test
npm run test:smoke

適用場景與注意

適合希望在不改編排主流程的前提下,讓助手對「失敗、誇獎、閒置、熬夜幹活」等會話事實有連續內部狀態,並僅在異常時用一句 system 提示微調語氣的 DSH 開發者。

務必注意:注入只是告知狀態,不是替模型決定能說多少;關鍵詞誤判需自行改正則。turn 邊界依賴 assistant/message 的 turn 號變化,最後一輪在插件卸載時兜底結算。DSH 社區插件目錄(skillhub 條目)爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;生態理念是「一切皆插件」,本插件是工作流類社區貢獻之一。

結尾

dsh-hormone 用可衰減、可耦合的四維數值把會話事件翻譯成「只在越界時出現」的 system 提示補充,並支持 observe 模式與 JSON 狀態驗收。目錄頁:https://www.skillhub.cn/plugins/y258dd/dsh-hormone;源碼與完整參數表:https://github.com/y258dd/dsh-hormone。

羽毛球分组比赛记分
小程序二维码

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

小夜