dsh-sticker-hub:給 DSH 裝一套本地表情包庫

前言

在聊天型 agent 裏做「配圖」有幾處彆扭:圖庫散落在各處,圖片沒有結構化標籤,agent 只能靠文件名猜哪張圖符合語境;想給某個情緒配圖,得先知道庫裏有沒有、在哪、能不能發。lunchyspring 維護的 dsh-sticker-hub 想解決的就是這件事——把表情包做成一個本地的、可打標、可檢索、可直接發送的資源庫,裝進 DeepSeek Harness(DSH)。

它的定位很清楚:插件本身不帶任何圖片,也不帶任何密鑰。圖從哪個倉庫 pull、用哪個 vision 模型打標、花誰的錢,都在你自己機器上決定。本文根據 GitHub README 的實測信息整理安裝與用法。

這是什麼

一句話:一個給 DSH 用的本地表情包庫插件,提供打標、語義檢索、自動配圖、羣聊裏的「表情包大戰」模式,以及 GUI 內聯圖。

  • 維護者:lukcyspring
  • 分類:趣味換裝(社區目錄 SkillHub 標註)
  • 特性:MIT 協議,純 JS 無運行時依賴,Node ≥ 20
  • 倉庫地址:https://github.com/lukcyspring/dsh-sticker-hub
  • 目錄頁:https://www.skillhub.cn/plugins/lukcyspring/dsh-sticker-hub

能做什麼

README 的能力表如下:

能力 說明
本地圖庫 一個目錄 + 一份 index-all.md 表格,人可讀、可 git 管
打標 用你配的 vision 模型給新圖生成「名字 / 情緒 / 標籤 / 什麼時候用」
檢索 按想表達的意思找圖,帶防復讀降權
發送 交給任意「發文件」工具(默認 QQ 的 qqbot_send_file),不迴文字
大戰 開關 / 觸發詞 / 連發三張,任一條件進入,之後只回圖
GUI 內聯圖 聊天窗口裏直接顯示錶情包,不需要 QQ / IM 通道
設置頁 DSH 界面「設置 → 表情包庫」直接改,不用重啓

幾個值得展開的點:

  1. 插件註冊了只讀圖片路由,sticker_show 會把地址拼成同源絕對地址再返回 markdown,聊天窗口裏直接出圖,不走 IM 文件通道。路由只接受迴環地址,路徑鎖死在圖庫目錄內。
  2. 「表情包大戰」進入後只回圖不寫字;你一開始打字,這一局就結束。它怎麼知道你在發圖?通道插件會把下行圖片存成本地文件並把路徑交給 agent,agent 再調 sticker_learn 或 sticker_search + sticker_send。
  3. 正文標記 [sticker:名字] 是推薦用法:在回覆正文裏寫 [sticker:變身],通道層拆成文字段 + 圖片段順序發出。名字找不到就用情緒詞同類隨機,都對不上就丟掉標記,絕不硬湊。

三個前提

  1. DSH 裝好並能跑:桌面版或 CLI 均可,Node ≥ 20,能打開設置、能裝插件(~/.dsh/profiles/<name>/)。
  2. 接一個能收發圖片的 IM 通道(推薦 QQ)。QQ 的做法是:在 q.qq.com 註冊開發者 → 創建機器人應用 → 記下 AppID 與 AppSecret → 在沙箱配置里加測試羣 → 在 DSH 裏裝 @tencent-connect/dsh-qqbot → 掃碼綁定。沒有 QQ 也能用插件,工具和檢索照常,只是發不出去(sticker_send 會把文件路徑還給你)。
  3. 配一個 vision 模型。只有「給新圖自動打標」需要它,任意 OpenAI 兼容的 endpoint 都行,README 給了 OpenAI、DMXAPI 中轉、本地 ollama 三種示例。密鑰不建議寫進插件配置,放到一個一行文本文件裏,把路徑填給 keyFile。

安裝

README 給出三種安裝方式:

# 方式 A:直接從 GitHub 裝
dsh plugin --profile desktop add github:lukcyspring/dsh-sticker-hub

# 方式 B:從本地目錄(開發中,改完代碼立刻見效)
cd ~/.dsh/profiles/desktop
npm install /path/to/dsh-sticker-hub --no-save

# 方式 C:發佈到 npm 之後
dsh plugin --profile desktop add dsh-sticker-hub

裝完重啓 DSH,設置裏會出現「表情包庫」一頁。

README 特別提醒:DSH 的插件要同時出現在 profile package.json 的 dependencies 和 dsh.profile.bundles 裏,只加依賴不寫 bundles,宿主不會去加載它。

拉圖庫與打標

插件倉庫裏的 resources/ 附帶了現成結構:18 張示例表情包,以及一份 614 張(已去重)的標籤表,含文件 / 名字 / 情緒 / 標籤 / 什麼時候發。覈實:完整圖庫不隨 npm 包發佈,需要 clone 倉庫取得;其中 resources/gallery/ 的 18 張隨倉庫分發,另外 596 張只留標籤,圖靠 pull 從上游拉。

拉圖和打標的 CLI 如下:

node bin/sticker-hub.mjs pull            # 全部拉
node bin/sticker-hub.mjs pull dsh-meme   # 只拉一個
node bin/sticker-hub.mjs stats           # 看看有多少張
node bin/sticker-hub.mjs tag --limit 20  # 先試 20 張看質量
node bin/sticker-hub.mjs tag             # 全量

圖片落在 ~/.dsh/sticker-hub/library/gallery/,只有一層,按內容哈希去重;索引是 library/index-all.md。自己的圖直接丟進 gallery 目錄即可;在 QQ 裏發給它,sticker_learn 也會自動入庫。

打標質量有兩個經驗:GIF 要抽三幀拼圖再送模型,只給中間一幀模型容易誤讀動作;標籤寫「在做什麼」不寫「像誰」,角色名留一兩個即可,動作纔是檢索真正會命中的東西。

提供的工具

工具 作用
sticker_search 按意思找候選,返回名字 / 情緒 / 標籤 / 什麼時候用
sticker_send 挑一張併發送,默認只回路徑,由調用方用發文件工具發
sticker_learn 把一張圖入庫並打標
sticker_battle 大戰開 / 關 / 查狀態 / 記一次「收到圖」
sticker_stats 庫有多大、標籤多密、大戰開沒開
sticker_show 在 GUI 聊天窗裏內聯顯示一張

最短路徑:裝插件 → 設置頁填圖庫目錄 → node bin/sticker-hub.mjs pull → tag → 在聊天裏說「發個摸魚的表情包」。

設置頁與常見問題

「設置 → 表情包庫」提供大戰開關、觸發詞、連發閾值,圖庫目錄(默認 ~/.dsh/sticker-hub/library),識圖 Base URL / 模型 / 密鑰文件路徑,並實時顯示庫大小與各來源張數。改完立刻生效,不用重啓。

README 列出的常見問題:圖庫是空的 多是沒跑 pull 或 libraryDir 指錯;識圖未配置 多是模型沒填或 keyFile 路徑不對;識圖 HTTP 400 多是圖片太大(默認上限 8 MB)或 GIF 未抽幀;發不出圖多是通道沒有發文件工具或文件不在允許目錄內。

適用場景與注意

適合想在 DSH 裏做聊天配圖、表情包互動的開發者,尤其是已經在用 QQ 機器人通道的人。插件以當前 dsh 進程的權限運行,裝前應檢查源碼與許可證:代碼爲 MIT,但圖片按各自上游來源的許可走,README 的 ATTRIBUTION.md 記錄了每個來源的許可,轉載圖庫前先看人家 README,其中大肥魚系 265 張是 CC BY-NC 4.0,別商用。

另外,出站攔截的硬模式補丁和 [sticker:] 通道接法分別在 docs/HARD-MODE.md 與 docs/MARKER.md,都改的是通道插件的 dist,升級會覆蓋,自己權衡。

卸載:

dsh plugin --profile desktop remove dsh-sticker-hub
rm -rf ~/.dsh/sticker-hub     # 圖庫與狀態,確認後再刪

小結

dsh-sticker-hub 的價值在於把表情包當作一個有結構、可檢索、可管理的本地資源,而不是一堆散落的圖片文件。庫在本地、模型由你配、許可清楚,需要 QQ 通道才能玩「大戰」,不需要也能在 GUI 裏內聯看圖。

目錄頁:https://www.skillhub.cn/plugins/lukcyspring/dsh-sticker-hub
GitHub:https://github.com/lukcyspring/dsh-sticker-hub

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

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

小夜