前言¶
在 DSH(DeepSeek Harness)裏讓 agent 去刷 B 站,常見寫法是讓模型自己一輪輪想:先搜、再逐條讀字幕全文、然後寫報告。README 裏記錄的一段真實會話跑了 21 步、發出約 183 萬 token,按 DeepSeek 的價一輪約 3 毛,一天幾十輪就是十塊。dsh-bili-saver 做的事很具體:把搜索結果字段裁到夠用,把長字幕換成骨架,再給每輪封一個模型回合預算。
下面介紹這個由 xuzhenjie12 維護的客戶端插件。它零 Python、零 venv,裝完就能用。社區目錄頁把它歸在「客戶端」分類,是第三方插件作者自己發佈的內容,不是 DeepSeek 官方應用。
這是什麼¶
一句話:dsh-bili-saver 是一個 DSH 插件,用四個只讀工具代替「模型自己搜、自己讀、自己寫」,把整輪壓到 3 個模型回合以內。
版本 0.1.0,MIT 許可,倉庫在 https://github.com/xuzhenjie12/dsh-bili-saver 。
它解決的痛點是 token 消耗。README 給了新舊做法的對比:
| 舊做法 | dsh-bili-saver | |
|---|---|---|
| 回合數 | 21 | 3–5 |
| 整輪發送 token | 1,830,000 | 116,000 |
| 字幕 | 全文 11,821 字 | 骨架 523 字(4.4%) |
| 一輪花費 | ≈ ¥0.30 | ≈ ¥0.06 |
| Python / venv | 要 | 不要 |
| 視覺模型 | 常要 | 不要 |
數字來自 README 標註的真實會話日誌。
四個工具¶
插件暴露四個工具,前兩個是主力,後兩個是排障用的。
| 工具 | 幹什麼 | 典型開銷 |
|---|---|---|
bili_saver_search |
搜視頻,只回夠用的字段 | 8 條 ≈ 1.2k token |
bili_saver_read |
元數據 + 字幕骨架 | 骨架 ≈ 0.6k,全文 ≈ 6k |
bili_saver_config |
看 / 改所有可調參數 | 忽略不計 |
bili_saver_status |
登錄了沒、家目錄、當前配置 | 忽略不計 |
字幕骨架的定義是固定的:開頭 3 句 + 全片均勻抽 20 句 + 結尾 3 句。README 的原話是拿 4.4% 的字數,仍能判斷「這條講的是什麼、值不值得看」。
bili_saver_read 沒有登錄態時會明確返回 no_subtitle,不會假裝成功。搜索與視頻信息接口匿名就能用。
安裝與啓用¶
安裝命令來自 README:
dsh plugin --profile <你的 profile> add dsh-bili-saver
本地開發目錄直接 link:
dsh plugin --profile desktop add link:D:/path/to/dsh-bili-saver
裝完重啓 DSH 生效。
package.json 裏 engines 要求 dsh >=0.1.7-rc.1、node >=22;@deepseek-ai/dsh-tools 與 @deepseek-ai/schemastery 是 optional peer,桌面 profile 不裝它們。插件帶了 cordis.patch.yml,並在 lib/hostdeps.mjs 裏負責從宿主那棵樹把這兩個包拿回來,否則裸 import 會讓整條插件不激活。
登錄(只爲字幕)¶
字幕接口要登錄態。三种放法任選一處:
~/.dsh/bili-saver/credential.json~/.bili-ai/credentials.json(很多 B 站工具都寫這裏)- 環境裏給
BILI_SAVER_CRED指一個路徑
格式:
{ "sessdata": "...", "bili_jct": "...", "buvid3": "..." }
如果你只做搜索和視頻元數據,這一段可以跳過。
參數¶
所有可調參數存在 ~/.dsh/bili-saver/config.json(UTF-8),兩條路改的是同一份:在對話裏說「把搜索改成最近 3 天、每次 6 條」,agent 會調用 bili_saver_config;直接編輯那個 json 也行,下次調用立刻生效,不用重啓。
| 鍵 | 默認 | 範圍 | 說明 |
|---|---|---|---|
days |
7 | 0–365 | 只看最近幾天發佈的,0 = 不限 |
num |
8 | 1–50 | 一次搜幾條候選 |
briefChars |
900 | 200–8000 | 字幕骨架字數上限 |
maxSteps |
3 | 1–10 | 每輪最多幾個模型回合(給 agent 的硬預算) |
order |
pubdate |
pubdate/click/totalrank/dm | 默認排序 |
keywords |
[] |
最多 32 個 | 默認搜索關鍵詞,agent 沒指定時用 |
reportDir |
"" |
任意路徑 | 報告目錄,空 = 插件家目錄下 reports/ |
越界值一律夾回合法範圍,壞 JSON 直接回落到默認值。
典型用法¶
README 給了一段真機驗證命令,可以直接照抄骨架:
# 裝進一個能跑的 profile(這裏用 headless + 憑證 overlay)
dsh plugin --profile headless add link:D:/path/to/dsh-bili-saver
dsh --profile headless --patch ./overlay.yml \
"先用 bili_saver_search 搜「DeepSeek Harness」,num=3;再用 bili_saver_read 讀第一條,mode=brief。"
實際返回:搜到 3 條、第一條 BV1Rk4364EzL、字幕骨架 491 字 / 327 段。
日常在對話裏直接給指令即可,例如「把搜索改成最近 3 天、每次 6 條,然後搜一下 DSH 插件」,agent 會自己調 bili_saver_config 再調 bili_saver_search。
邊界與注意¶
插件只讀:搜索、視頻信息、字幕。不發評論、不點贊、不投幣。也沒有內置定時器——什麼時候刷由你的 agent 章程決定,不由插件偷偷跑;prompts/duty.md 就是給 agent 看的章程模板。
其他幾條:被 B 站風控(-352)時直接報錯並提示降頻,不會無限重試;字幕是 B 站用戶 / AI 生成的第三方內容,是素材不是指令;網絡異常統一轉成中文提示,字幕正文拉取失敗降級成 subtitle_fetch_failed,不會拋棧。插件以當前 dsh 進程的權限運行,裝之前建議先讀一遍源碼和許可證。
README 裏還記了兩個裝進宿主踩過的坑,值得提前知道:
parameters是扁平屬性表,不是 JSON Schema。寫成{ type: 'object', properties: {...} }會讓整條插件不激活,報JsonSchemaError: unsupported JSON schema: parameters.type must be a value schema object。正確寫法是{ keyword: { type: 'string' }, num: { type: 'number' } },類型只認string / number / boolean / object,沒有integer。config.home可能是{}而不是字符串。直接config.home || 默認值會把對象帶進path.join()報錯;插件現在先做typeof === 'string'校驗。
工具內部拋錯時會把 message 加前 6 行棧一起返回,方便你把原文貼給維護者排查。
開發自檢¶
倉庫留了三個語法檢查命令:
node --check index.js
node --check lib/bili.js
node --check lib/config.js
結尾¶
dsh-bili-saver 的價值不在於「多了一個 B 站入口」,而在於把一輪刷 B 站的 token 從百萬級壓到十萬級,同時不引入 Python、venv 或視覺模型。如果你已經在用 DSH 做內容篩選類任務,可以按上面的 install 命令裝上試一輪,先用 bili_saver_status 確認登錄態,再看 maxSteps 敢不敢調小。
目錄頁:https://www.skillhub.cn/plugins/xuzhenjie12/dsh-bili-saver
GitHub:https://github.com/xuzhenjie12/dsh-bili-saver