dsh-emotion-analyzer:本地 ONNX 情緒打分與會話懸浮監測

前言

在 DSH(DeepSeek Harness)裏跑主模型對話時,助手每輪迴復的「語氣」往往只能靠人讀一遍才能感知;若想把情緒狀態掛進 Session、或在 Web 界面裏持續看到趨勢,通常要麼接第三方情緒 API(額外聯網與費用),要麼自己寫推理與 UI。下面介紹社區插件 dsh-emotion-analyzer(維護者 thatgfsj-dsh,分類:模型推理):在宿主進程內用 ONNX 對每條助手回覆做本地打分,把累積狀態投影進會話,並在 DSH 網站注入可拖拽懸浮框。

這是什麼

dsh-emotion-analyzer 是 DSH 插件,版本 0.2.2(見倉庫 package.json),要求 DSH >=0.2.1-rc.2 <0.3.0、Node >=22.18。代碼許可 MIT;默認模型權重爲 Apache-2.0,回退 legacy 模型爲 CC-BY-NC-4.0(非商業),權重不隨倉庫分發。

一句話:本地 ONNX 推理爲主模型回覆打分 → 寫入 Session projection → Web 端顯示可拖拽情緒監測組件。推理階段不聯網、不消耗主模型 Token;僅用戶主動下載模型時會訪問 HuggingFace。

核心功能

本地推理與模型

  • 默認 Horizon-Labs/multilingual-emotions-small(GoEmotions 28 標籤、36 語言、官方 INT8,約 256 MiB);legacy tabularisai(11 標籤)保留爲回退資產。
  • 使用 onnxruntime-node 在 CPU 上做 INT8 推理;裝好後默認嘗試 horizon-small,模型未下載時自動回退到 assets/ 裏的 legacy(需按文檔導出),兩者都沒有時插件靜默降級、不影響聊天。
  • 多語言:默認模型覆蓋 36 種語言;中文 / 英文按 CJK 佔比顯示語言標識。

統一情緒維度與映射

模型標籤經可插拔 profile 映射到 7 個統一維度:愉快 pleasant、悲傷、憤怒、焦慮、反感 unwell、疑問 confused、平靜。內置 legacy-11、go-emotions-28、zh-8 三套 profile;閾值過濾、衰減、步長、封頂等參數集中在 src/mapping.ts(如 THRESHOLD 0.2、DECAY 0.85、STEP_MAX 0.25、CAP 1.0)。

Session 與 Web 懸浮框

  • 每輪分數以 plugin:emotion-analyzer/turn(ignorable)寫入會話日誌,由 emotion projection 單元純同步 fold;重啓、fork 可恢復。
  • Web 端:Web Components + Shadow DOM;默認 64px compact 徽章(emoji + 中文情緒),可拖拽;點擊展開分數條 / sparkline,再點 [—] 摺疊。顯示 / 隱藏由 Settings → 情緒分析器 控制。

數據流(DSH 0.2.1-rc.2 實際 API)

宿主事件 agent/turn-stopping 觸發後,取最後一條 assistant 的 text block → EmotionScorer.score(text) → 追加插件記錄並註冊 emotion projection → 客戶端 useProjection('emotion') → shell overlay → <emotion-monitor>。

安裝與啓用

插件需加入 web profile 的 bundle。官方 README 給出的安裝方式如下(路徑改爲你本機克隆或解壓後的目錄,勿憑插件名拼接 github:owner/repo):

dsh plugin --profile web add /path/to/dsh-emotion-analyzer

必做:驗證插件是否進入 profile 的 bundle 層:

bash scripts/check-install.sh web

輸出 OK 纔算安裝成功。若提示 bundle missing,可先移除再在當前插件目錄執行:

dsh plugin --profile web remove dsh-emotion-analyzer
dsh plugin --profile web add .

設置持久化在 $DSH_HOME/emotion-analyzer/config.json;模型下載到同目錄 models/<id>/。

在設置頁或通過 Host API 下載並選擇模型後,下一輪生效。示例(<port> 替換爲本地 DSH 端口):

curl -X POST http://127.0.0.1:<port>/api/emotion-analyzer/v1/model/download \
  -H 'content-type: application/json' -d '{"id":"horizon-small"}'
curl -X POST http://127.0.0.1:<port>/api/emotion-analyzer/v1/model/select \
  -H 'content-type: application/json' -d '{"id":"horizon-small"}'
curl http://127.0.0.1:<port>/api/emotion-analyzer/v1/state

首次回覆會觸發 ONNX 加載(legacy 約 1.5s,Horizon small 約 2–3s),之後單條約 9–20ms。onnxruntime-node / tokenizers 爲原生模塊,README 註明在 Linux + Node 24 上驗證;Windows / macOS 需在目標機自行驗證安裝腳本與二進制下載。

模型預設(v0.2)

預設 許可 體積 語言 標籤 說明
horizon-small(默認) Apache-2.0 268 MB 36 28 官方 INT8,可在線下載
horizon-base Apache-2.0 641 MB 36 28 更準但更慢 / 更大
legacy-tabularisai(回退) CC-BY-NC-4.0 279 MB 23 11 包內 assets,不可刪除
zh-johnson-small MIT 待導出 zh 8 needsExport

完整預設、離線安裝與風險見倉庫 docs/models.md。

典型用法

  1. 按上文安裝並跑通 check-install.sh web。
  2. 在 DSH Web 設置 → 情緒分析器 中下載 / 選擇模型(或用 curl 調用 /api/emotion-analyzer/v1/model/*)。
  3. 正常與主模型對話;每輪助手回覆結束後插件自動打分並更新 projection。
  4. 在聊天頁拖拽懸浮徽章,點擊展開查看各維度分數與近期 sparkline(趨勢最多 30 輪,存於內存與 localStorage,不上傳)。

調參需改源碼中 src/mapping.ts 並重新構建插件,無單獨遠程配置項文檔在此重複。

適用場景與注意

適合:希望在 DSH Web 會話裏本地觀察助手回覆情緒趨勢、並把狀態留在 Session 裏以便重啓 / fork 恢復的智能體開發者;不想爲情緒分析額外調用第三方模型 API 的場景。商用情緒模型請優先默認 horizon-small(Apache-2.0),避免誤用 legacy-tabularisai 的非商業許可。

注意:

  • 插件以當前 DSH 進程權限運行;安裝前應閱讀源碼與 LICENSE、docs/models.md 中的模型許可。
  • 會話日誌中的插件記錄含分數、語言、長度、FNV-1a 文本 hash 與時間,不含回覆原文;推理只處理助手回覆文本,且推理階段不聯網。
  • DSH 社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;生態理念是「一切皆插件」,本文僅介紹該倉庫公開文檔中的能力。

結尾

dsh-emotion-analyzer 把主模型每條回覆的情緒用本地 ONNX 量化成 Session 狀態,並在 DSH 網站提供可拖拽監測 UI,適合在 Harness 裏做對話側「情緒手環」式觀測。目錄頁:https://www.skillhub.cn/plugins/thatgfsj-dsh/dsh-emotion-analyzer;源碼與完整文檔:https://github.com/thatgfsj-dsh/dsh-emotion-analyzer。

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

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

小夜