前言¶
在聊天型 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 界面「設置 → 表情包庫」直接改,不用重啓 |
幾個值得展開的點:
- 插件註冊了只讀圖片路由,
sticker_show會把地址拼成同源絕對地址再返回 markdown,聊天窗口裏直接出圖,不走 IM 文件通道。路由只接受迴環地址,路徑鎖死在圖庫目錄內。 - 「表情包大戰」進入後只回圖不寫字;你一開始打字,這一局就結束。它怎麼知道你在發圖?通道插件會把下行圖片存成本地文件並把路徑交給 agent,agent 再調
sticker_learn或sticker_search+sticker_send。 - 正文標記
[sticker:名字]是推薦用法:在回覆正文裏寫[sticker:變身],通道層拆成文字段 + 圖片段順序發出。名字找不到就用情緒詞同類隨機,都對不上就丟掉標記,絕不硬湊。
三個前提¶
- DSH 裝好並能跑:桌面版或 CLI 均可,Node ≥ 20,能打開設置、能裝插件(
~/.dsh/profiles/<name>/)。 - 接一個能收發圖片的 IM 通道(推薦 QQ)。QQ 的做法是:在 q.qq.com 註冊開發者 → 創建機器人應用 → 記下 AppID 與 AppSecret → 在沙箱配置里加測試羣 → 在 DSH 裏裝
@tencent-connect/dsh-qqbot→ 掃碼綁定。沒有 QQ 也能用插件,工具和檢索照常,只是發不出去(sticker_send會把文件路徑還給你)。 - 配一個 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