前言¶
用 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 能力通道,同時提供 searchProvider 與 fetchProvider(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 命令可用;pnpm 在 PATH 上;目標 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 都由你在設置卡片裏自己排。相關鏈接:
- GitHub 倉庫:https://github.com/MochiNek0/dsh-web-search-free
- 插件目錄頁:https://www.skillhub.cn/plugins/MochiNek0/dsh-web-search-free(社區目錄,獨立站點,與 DeepSeek / 幻方無官方從屬關係)