用 dsh-stickers 給 DeepSeek Harness 網頁對話加上雙向表情

前言

DeepSeek Harness(dsh)把模型、工具、會話、沙箱和界面都做成可替換的插件。寫代碼、跑測試、改評審意見,對話區裏大多是純文本:智能體回一句「測試通過了」,用戶再回一句「你看看」。語氣對得上,場面卻像在工單系統裏聊天。

dsh-stickers 把表情貼紙接進 WebUI。用戶點輸入框旁的 🐋 選擇器,或者敲 /sticker;智能體在普通對話裏按語境調用 send_sticker。同一份 catalog 同時服務這三條入口,卡片會寫進持久會話歷史。本文按插件目錄頁、GitHub 倉庫 README、package.json 和源碼交叉覈對後整理:它是什麼、裝在哪、怎麼發、哪些能力現在沒有。

DeepSeek Harness 當前仍是開發者預覽版,官方倉庫寫明會有不兼容變更。本文提到的社區插件目錄 deepseek-harness-plugin.com 是獨立站點,用來發現和複製安裝命令,與 DeepSeek / 幻方沒有官方從屬關係。官方推薦的發現方式仍是 GitHub 的 dsh-plugin 話題。

這是什麼

dsh-stickers 是一款界面增強插件,由 william-jin-cmu 維護,npm 包名是 @dsh-external/dsh-stickers,當前 package.json 版本爲 0.1.0,許可證爲 BSD-3-Clause。倉庫創建於 2026 年 8 月 8 日;截至 2026 年 8 月 17 日查閱,GitHub 顯示 20 星,目錄頁仍顯示 13 星,以倉庫即時數據爲準。

它解決的問題很具體:讓 WebUI 裏的用戶和智能體都能發表情,而且表情要留在會話記錄裏,而不是彈一層馬上消失的 overlay。README 把定位寫成:純 DSH 外部插件,不修改 DSH core。package.jsondsh.client.platformweb,和「只做完整 WebUI 支持」的說明一致。

掛載方式也寫在倉庫裏。Node 側用 cordis.patch.yml 插入 id 爲 dsh-stickers 的插件,註冊:

  • send_sticker Agent tool
  • /sticker 用戶命令
  • 一段指導智能體何時發表情的 system prompt
  • /api/dsh-stickers/* 的 PNG 路由(僅在 webServer 存在時啓用)

Browser 側由客戶端清單自動發現,註冊三個官方 slot:conversation.input.right(選擇器)、conversation.chat.commandview/sticker(用戶卡片)、conversation.chat.toolview/send_sticker(Agent 卡片)。

核心功能

同一份 catalog,三條入口

表情定義集中在 src/shared/catalog.ts。用戶選擇器、/sticker 命令和 Agent 的 send_sticker 讀同一份列表。新增一張圖時,同時改 catalog 即可,不必在三處各寫一遍。

用戶側有兩種發法:

  1. 在 WebUI 輸入框右側點 🐋,從公開表情裏點選。選擇器頂部可以切換藍鯨娘 / 黑鯨娘,默認藍鯨娘。
  2. 直接輸入 /sticker <id>,黑鯨娘版本再加一個 black 參數。

智能體側不是等用戶說「發表情」。插件把 send_sticker 註冊成 tool,並在 system prompt 裏寫明:每回合最多一張,只在能補語氣時用,不能拿表情代替實質回答。參數是 { id, variant? }variant 缺省爲 blue,用戶切到黑鯨娘後可傳 'black'

PNG 不走外鏈。插件自己提供 /api/dsh-stickers/*,用戶卡片和 Agent 卡片都會進入持久會話歷史。

14 張公開表情,4 張偏工作流

下面 14 張會出現在 🐋 選擇器裏,人類可以用 /sticker 發送,Agent 也可以按同一個 ID 調用。文案以倉庫 README 爲準。

ID 文案
daily-chat 適合日常對話,即時響應
human-questions 人類的怪問題怎麼那麼多…
use-ai-for-this 你拿 AI 搞這個?
fish-philosophy 生魚憂患,死魚安樂
enough 這就夠了
server-busy 服務器繁忙,請稍後再試
thinking-stopped 思考已停止
great-question 哇,這個問題問的真妙!
deep-thought 已深度思考
no-thanks No thanks I use DeepSeek
tests-passed 測試通過!
root-cause 找到原因了
running-tests 正在跑測試
fixed-review 改好了,你看看

後四張被 README 標成工作流反應:測試通過、定位根因、正在跑測試、改完請驗收。日常閒聊和編碼回合都能對上號。

10 張只有 Agent 能發的彩蛋

另外 10 張 visibilityagent。它們只出現在 send_sticker 的 tool schema 裏,選擇器看不到,/sticker 也會拒絕發送。源碼裏用戶路徑走 publicStickerById(),Agent 路徑才允許隱藏 ID。

ID 文案
self-destruct 最近自己搓自己時,自殺頻率有點高
restart-myself 我重啓一下自己
hot-update 熱更新成功,進程沒了
restore-session 正在恢復會話…未分組裏見
browser-left 會話太長,瀏覽器先走一步
not-stuck 我不是卡,我在深度思考
memory-alive 內存正在努力活着
subagents-down 已召喚 Subagent,已全員中斷
plugins 插件裝得很好,下次別裝了
session-locked Session 沒壞,只是打不開了

README 寫明:一部分圖沿用 DeepSeek Harness 官方貼紙;另一部分創意來自「【官方】DSH 內測羣」裏羣友反饋的真實使用問題,例如熱更新後進程退出、Session 打不開、長會話裏瀏覽器掉隊、Subagent 集體中斷。黑鯨娘全套 24 張圖由 少女阿原(@ayuanwong) 繪製,雙角色切換的交互也來自她的提案。

當前不支持 TUI

倉庫專門解釋了爲什麼不做終端界面。turtle-ui 現有的第三方擴展面只有臨時的 tui.openOverlay(),沒有把插件組件插入持久 transcript 的接口。overlay 關掉就沒了,滾動或重開 session 也無法恢復,不符合「聊天曆史中的表情消息」這一語義。

本版本因此只發布完整的 WebUI 支持,不用瞬時 overlay 冒充 TUI。README 的預期是:等 turtle-ui 提供通用、可回放的 transcript renderer API 後,再在不加入表情專用 core 代碼的前提下補 TUI。

安裝與啓用

目錄頁給出的安裝命令如下,在已經能運行的 DeepSeek Harness 終端裏執行:

dsh plugin add github:william-jin-cmu/dsh-stickers

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。目錄頁建議安裝前檢查源碼和許可證;需要可復現安裝時,把 commit 哈希釘死。2026 年 8 月 17 日查閱時,main 最新提交是 1703f09915db1058b6031b31e52fd404560e0a78(2026-08-13,說明爲適配 dsh 0812 final beta,並把 PNG 路由從已更名的 httpServer 遷到 webServer):

dsh plugin add github:william-jin-cmu/dsh-stickers#1703f09915db1058b6031b31e52fd404560e0a78

目錄站點的通用步驟是:先有 CLI(例如 npx @deepseek-ai/dsh web),再 dsh plugin add ...,最後用 dsh plugins list 確認已加載。這個插件的客戶端聲明瞭 platform: "web",本地從源碼安裝時 README 也要求掛到 web profile:

pnpm install
pnpm run typecheck
pnpm test
pnpm run build

export DSH_HOME=/absolute/path/to/an/isolated-dsh-home
dsh plugin --profile web add /absolute/path/to/dsh-stickers
dsh web

倉庫要求 Node 22,以及一份可運行的 DSH checkout。package.jsonengines 寫的是 ^22.19.0 || >=24.0.0。Harness 仍在快速改接口,本倉庫 8 月 13 日那次提交就是一次對 core 重命名的適配;裝完後如果選擇器在、圖片 404,優先覈對當前 dsh 是否仍提供 webServer,以及 PNG 路由有沒有註冊上。

典型用法

下面幾條都能從 README 和 src/index.ts 直接復現,不依賴額外配置項。

1. 用選擇器發一張公開表情

打開 dsh web 進入網頁對話,點輸入框右側的 🐋。彈出層標題是「DSH 表情」,頂部可在「藍鯨娘」「黑鯨娘」之間切換。點 tests-passed,選擇器會把草稿寫成 /sticker tests-passed(黑鯨娘則是 /sticker tests-passed black)並提交。會話裏會出現一張用戶表情卡片,圖片地址形如 /api/dsh-stickers/21-tests-passed.png

2. 用斜槓命令指定 ID

不想點選時,直接輸入:

/sticker root-cause
/sticker fixed-review black

命令 hint 是公開 ID 列表加可選的 [black]。傳了選擇器裏沒有的彩蛋 ID,會返回「表情不存在或不可由用戶發送」。角色參數只能是 blueblack,其他值會報「未知的表情角色」。

3. 讓智能體按語境回一張

Agent 調用形式在 README 裏寫明:

send_sticker({ id: "running-tests" })
send_sticker({ id: "hot-update", variant: "black" })

running-tests 雙方都能發;hot-update 只在 Agent schema 裏。插件注入的 guidance 要求:每回合最多一張,只補語氣,不代替回答。工具結果會渲染成 Agent 表情卡片,同樣走 /api/dsh-stickers/*,並進入會話歷史。

適用場景與注意事項

適合已經在用 DeepSeek Harness 網頁界面、希望對話區多一點反應、少一點工單感的人。編碼場景裏,測試通過、找到原因、請驗收這幾張公開表情可以直接當狀態標記;內測羣裏反覆出現的熱更新、Session、Subagent 問題,則留給 Agent 的彩蛋。

使用前需要接受這幾條邊界:

  • 只覆蓋 WebUI。 TUI 當前沒有持久 transcript 插件接口,本版本故意不做。
  • 表情圖由本機 dsh 進程提供。 路由掛在 webServer 上;沒有 Web 服務時 PNG 不會註冊。
  • 插件以當前 dsh 進程權限運行。 安裝可能執行構建腳本。裝之前看倉庫、許可證和近期提交,只裝信任的來源;要可復現就固定 commit。
  • 許可證是 BSD-3-Clause,源碼公開,可以免費安裝使用。素材來源混有官方貼紙和社區繪製的黑鯨娘變體,再分發時以倉庫許可證和原作者說明爲準。
  • Harness 是開發者預覽版。 核心插件和 API 仍會變。本倉庫已經爲 webServer@deepseek-ai/cordis 等更名做過一次遷移,後續不排除再適配。

小結

dsh-stickers 沒有改 DSH core,而是用官方 slot、斜槓命令和 Agent tool,把同一份表情 catalog 接到網頁對話裏。用戶點 🐋 或敲 /sticker,智能體在合適的時候回一張;14 張公開、10 張彩蛋,藍鯨娘和黑鯨娘各一套,卡片留在會話歷史中。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-stickers/

GitHub:https://github.com/william-jin-cmu/dsh-stickers

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

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

小夜