dsh-bili-saver:把「替你刷 B 站」壓到 3 個回合

前言

在 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 會讓整條插件不激活。

登錄(只爲字幕)

字幕接口要登錄態。三种放法任選一處:

  1. ~/.dsh/bili-saver/credential.json
  2. ~/.bili-ai/credentials.json(很多 B 站工具都寫這裏)
  3. 環境裏給 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 裏還記了兩個裝進宿主踩過的坑,值得提前知道:

  1. 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。
  2. 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

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

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

小夜