dsh-web-search-free:爲 dsh 提供多引擎 fallback 的免費 Web 搜索插件

前言

用 dsh 做智能體開發時,聯網搜索默認走官方的 deepseek-official 通道。這個通道不是專用搜索端點:每次搜索都會發起一次完整的 Messages 模型調用,先消耗一份搜索請求本身的 token,再把結果回灌對話、作爲對話 token 計費,兩份都從 DEEPSEEK_API_KEY 餘額里扣;而且它強制依賴這個 key——如果你的對話模型走的是第三方渠道,很可能根本沒配。下面介紹的 dsh-web-search-free 把這條通道替換成多引擎 + 自動 fallback 的純檢索實現,檢索本身不消耗任何模型 token。

這是什麼

dsh-web-search-free 是面向 DeepSeek Harness (dsh) 的免費 Web 搜索 / 網頁抓取插件,由 MochiNek0 維護,當前版本 1.3.0。裝上後它註冊爲 dsh 的 web 能力通道,同時提供 searchProviderfetchProvider(id 均爲 web-search-free),接管默認的搜索/抓取。

它是作爲 dsh bundle 層安裝的(package.json 裏聲明 dsh.bundle.patch):裝上即接管 web 搜索/抓取,卸載並重啓 dsh 後自動回落到默認通道,全程不需要手改 profile。

工作方式:純檢索,0 模型 token

所有檢索請求由 dsh 的宿主進程(Node)直接發往各引擎的專用檢索端點,例如 Tavily 的 /search、Exa 的 /search、Jina 的 s.jina.ai。這條鏈路不經過官方搜索後端,也不經過任何 LLM;計費走各引擎自身的 API 額度,多數有免費層。瀏覽器側只有那張設置卡片,不發任何網絡請求。

與官方通道的對比:

官方 deepseek-official 本插件 web-search-free
檢索方式 一次完整 Messages 模型調用 直接調各引擎專用檢索端點
模型 token 每次搜索都消耗 0
計費來源 DEEPSEEK_API_KEY 餘額 各引擎自身額度
憑據 強制依賴 DEEPSEEK_API_KEY 各引擎各自的 API Key
結果內容 sources sources + snippet(Tavily 另給直接回答)

支持的引擎與免費額度

支持 8 個引擎,表格順序即默認調用順序:

引擎 搜索 抓取 免費額度
TinyFish 免費(限速:Search 30 req/min、Fetch 150 url/min)
AnySearch 1,000 次/天,每日重置
Exa (Metaphor) 註冊送 $20 + 每月補 $10,累積不清零
Tavily 1,000 credits/月
Firecrawl 1,000 credits/月
Brave Search $5 額度/月,需綁卡但不扣費
SerpApi 250 次/月
Jina AI 新 key 送 10M tokens,一次性,不重置

兩點注意:

1、Brave Search 和 SerpApi 是純 SERP,沒有 URL 抓取端點,不會進入抓取鏈。如果只配了這兩家的 Key,抓取會以 No web fetch providers configured. 報錯——請再給一個支持抓取的引擎配上 Key。

2、結果日期(publishedAt)覆蓋差異大:Brave 的 page_age 覆蓋最多;Tavily 的 published_date 僅在 topic: 'news' 下返回,本插件走通用網頁搜索,因此實際爲空;Firecrawl 和 AnySearch 的搜索結果沒有日期字段。在意時效判斷的話,可以把 Brave 往調用順序前面挪。

安裝與啓用

前置條件:已安裝 dsh 且 dsh 命令可用;pnpmPATH 上;目標 profile 一般是 web(插件的客戶端半邊聲明 platform: web,設置卡片只在 Web 界面出現)。

從 npm 安裝(推薦):

dsh plugin --profile web add dsh-web-search-free

執行後插件以 bundle 層接管 web 搜索/抓取。

從本地源碼安裝(開發 / 二次開發用),先構建再裝入:

cd /path/to/dsh-web-search-free
pnpm install
pnpm build
dsh plugin --profile web add .

也可以用絕對路徑從任意目錄執行:dsh plugin --profile web add /absolute/path/to/dsh-web-search-free

配置

先啓動 dsh Web 界面:

dsh web          # 等價於 dsh --profile web

打開 設置 → 插件 → 免費 Web 搜索(英文界面爲 Web Search Free)卡片:

1、逐個填引擎的 API Key。同一引擎支持多個 Key,每行一個,引擎內按行順序輪換;任一 (引擎, Key) 成功即返回。

2、已填 Key 的引擎進入調用鏈,拖動行左側的 ⋮⋮ 手柄調整調用順序:排在前面的先調用,前一個失敗或額度耗盡自動落到下一個。

3、按需開關模型側的 web_fetch 工具:開啓即掛載,關閉即從模型工具表移除(不是留着報錯)。

4、點「保存」。配置通過 dsh 的設置命名空間(web-search-free)持久化,保存後即時生效,無需重啓。卡片文案跟隨 dsh 語言設置在中英之間切換。

兩點提醒:至少配置一個引擎的 Key,否則搜索/抓取會以 No web search providers configured. 報錯;web_fetch 默認開啓(dsh 官方組合默認關掉它),在意出網面可以在卡片裏關掉,代價是模型無法讀取貼給它的 URL 或精讀長文檔。

驗證

在對話裏讓模型實際用一次 Web 能力,例如「搜一下今天的新聞」或「抓取 https://example.com 的內容」。第二條需要卡片裏「啓用 web_fetch」處於開啓狀態,否則模型的工具表裏沒有這個工具。請求會按你排定的引擎順序執行,某個引擎失敗或額度耗盡時自動落到下一個。

更新與卸載

# npm 安裝:升級到新版本
dsh plugin --profile web update dsh-web-search-free

# 本地源碼鏈接安裝:重新構建即可
cd /path/to/dsh-web-search-free && pnpm build

卸載分兩步。先點卡片底部的「清空全部配置」(需點兩次確認)——dsh 的卸載流程不會清理設置命名空間,跳過這一步 API Key 會留在 $DSH_HOME/settings.yaml 裏。然後再執行:

dsh plugin --profile web remove dsh-web-search-free

卸載後需要重啓 dsh,搜索/抓取才真正回落到默認的官方通道。

適用場景與注意

它適合這幾類情況:對話模型走第三方渠道、沒有 DEEPSEEK_API_KEY(官方通道強制依賴它);在意搜索帶來的 token 成本(這裏檢索 0 模型 token,只花各引擎免費額度);想自己控制調用順序、用多 Key 輪換提高可用性。

安全方面需要說明:插件以當前 dsh 進程的權限運行,安裝前建議先瀏覽倉庫源碼、確認許可證信息。截至本文寫作(2026-09-07),該倉庫的 README 與 package.json 中未見明確的 license 字段,介意的話先向作者確認再用。

結尾

dsh 的理念是一切皆插件,dsh-web-search-free 是這個思路下的一個實用件:不改 profile 就能接管/回落 web 通道,檢索不燒模型 token,引擎順序和 Key 都由你在設置卡片裏自己排。相關鏈接:

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

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

小夜