前言¶
在 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)寫入會話日誌,由emotionprojection 單元純同步 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。
典型用法¶
- 按上文安裝並跑通
check-install.sh web。 - 在 DSH Web 設置 → 情緒分析器 中下載 / 選擇模型(或用 curl 調用
/api/emotion-analyzer/v1/model/*)。 - 正常與主模型對話;每輪助手回覆結束後插件自動打分並更新 projection。
- 在聊天頁拖拽懸浮徽章,點擊展開查看各維度分數與近期 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。