dsh--web-fetch:可拖動排序的 DSH 網頁抓取聚合 Provider

前言

在 DeepSeek Harness(DSH)裏,智能體要通過 web.fetch 把 URL 變成可用的正文。內置抓取鏈在「直連失敗」之後往往會馬上走系統無頭瀏覽器;在部分機器上,這一步可能空轉滿 25 秒超時,才輪到 Jina、firecrawl 等雲端檔位。硬站點因此常常先白等半分鐘。

社區插件 dsh–web-fetch(維護者 liamugong,分類:聯網工具)把多條抓取後端串成一條由你拖動排序的回退鏈,並支持按域名鎖定專用後端。順序改動即時寫盤,無需重啓 DSH。下文介紹其定位、能力、安裝方式與使用注意。

這是什麼

dsh–web-fetch 是面向 DeepSeek Harness 的 web-fetch provider 聚合插件(package.json 當前版本 0.4.0,許可證 MIT)。它把直連 HTTP、Jina Reader、firecrawl、fastCRW(本地 CRW)、Exa、無頭瀏覽器、CDP、Lightpanda,以及知乎開放平臺、小紅書 Cookie 等後端編排成一條可配置的失敗回退鏈;命中站點規則時則只走指定後端,不再回退通用鏈。

插件在滿足條件時會自動接管 web.fetchProvider(僅噹噹前爲空或爲 http 時,不搶佔你已顯式指定的其他 provider)。

爲什麼需要可編排的回退鏈

README 給出的典型排序思路包括:

  • 追求速度:direct → jina → firecrawl
  • 追求穩定:firecrawl → crw → jina → direct
  • 無 API Key:direct → jina → browser
  • 對付 Cloudflare:把 crw 提前

拖動卡片中的順序即生效;另有 ↑ / ↓ 按鈕,不方便拖拽時也可調整。每個後端可單獨啓用或禁用;缺少 Key 或缺少二進制時會自動跳過該檔。

核心功能

十個抓取後端

id 說明(摘自 README)
direct 進程內 node:http(s),跟隨重定向,無額外依賴
jina https://r.jina.ai/<url>,免 Key,有速率限制
firecrawl 需 FIRECRAWL_API_KEY,適合反爬與 Cloudflare
crw 本地 fastCRW;打開開關可自動下載 crw-server 並在 127.0.0.1 啓動(無鑑權、僅迴環)
exa 需 EXA_API_KEY
browser 默認 Obscura,或本機 Chromium/Chrome --dump-dom
cdp 本機 Chromium/Chrome,CDP 取 outerHTML,可持久化登錄態
lightpanda 需本機 lightpanda 二進制;README 註明中文站基本全擋,不建議當主力
zhihu 知乎開放平臺,需 ZHIHU_API_KEY,問題/回答返回摘要(非全文)
xiaohongshu 需小紅書 Cookie,解析頁面內 window.__INITIAL_STATE__

站點規則

按域名後綴匹配;命中後只走指定後端,失敗直接報錯,不走通用鏈。默認包括:zhuanlan.zhihu.com → jina;zhihu.com → zhihu;xiaohongshu.com → xiaohongshu。未命中域名的 URL 仍走通用回退鏈。

配置與 UI

  • API Key:在設置頁卡片內編輯 firecrawl / Exa / Jina / 知乎 Key 與小紅書 Cookie,保存到 ~/.dsh/dsh-web-fetch/keys.json(權限 0600);留空時可複用 DSH 憑據中的同名 Key。
  • 拖動排序:HTML5 拖拽調整回退順序,實時寫盤。
  • 連通性測試:輸入 URL 跑完整條鏈,逐檔顯示耗時與字節數,失敗附原因。
  • 質量閘門:正文短於 minChars.accept(默認 400)不算成功,繼續下一檔;全部偏短時按 minChars.floor(默認 80)與最長結果策略處理。
  • 性能層:URL 緩存(TTL 可調)、域名親和、全局 deadline、可選前兩檔併發、連接複用等,可在卡片中開關與清空。
  • 獨立 UI:除設置頁卡片外,另有 /api/dsh-web-fetch/ui 拖拽頁。

與內置鏈的差異(事實摘要)

內置鏈在直連失敗後立即嘗試系統無頭瀏覽器;本插件把順序交給你,並可把瀏覽器檔位後移或關閉,避免在部分環境下每個硬站先等滿瀏覽器超時。

安裝與啓用

engines.dsh 要求 >=0.2.0-rc.1 <0.3.0。安裝命令以 README 爲準:

# 從 npm(發佈後)
dsh plugin --profile desktop add dsh--web-fetch

# 從 GitHub 源碼(純 JS,無需構建)
dsh plugin --profile desktop add github:liamugong/dsh--web-fetch

# 本地開發
git clone <this repo> && cd dsh--web-fetch
dsh plugin --profile desktop add ./

安裝後重啓 DSH,或在「設置 → 插件」中找到 dsh–web-fetch。

若你已顯式指定其他 fetchProvider,需在 profile 的 cordis.patch.yml 中手動改爲:

- id: web
  config:
    searchProvider: ddg
    fetchProvider: dsh-web-fetch

典型用法

1. 調整回退順序

打開 DSH 設置中的 dsh–web-fetch 卡片(或訪問 /api/dsh-web-fetch/ui),拖動後端行順序。例如無 Key 時可設爲 direct → jina → browser;有 firecrawl Key 且要穩時可將 firecrawl 前置。

在卡片「接口密鑰」區域填寫所需 Key;小紅書筆記需 Cookie(至少 a1 與 web_session),且筆記 URL 需保留 xsec_token 等查詢參數。

3. 啓用本地 CRW

打開 crw 開關後,插件會嘗試自動下載並啓動 crw-server(README 寫明約 23MB 單文件),綁定本機迴環地址。需要 stealth 等進階能力時,README 提供了自編譯 crw-server 的 cargo 示例(tag v0.43.1 及 feature 列表)。

4. 瀏覽器檔位

默認無頭引擎爲 Obscura(Rust 自渲染,無需 Chromium);調用形態類似:

obscura fetch <url> --dump markdown --timeout <s> --allow-private-network --quiet [--stealth]

README 強調:使用 TUN/fake-IP 代理時須開啓 --allow-private-network 與 OBSCURA_ALLOW_PRIVATE_NETWORK=1,否則私網解析可能被 SSRF 規則攔截。需要登錄態時優先考慮 cdp 與持久化 userDataDir(默認可爲 ~/.dsh/dsh-web-fetch/chrome-profile),而非在 --dump-dom 路徑上使用 --user-data-dir(Chromium 已知行爲可能導致進程不退出)。

5. 連通性測試

在卡片中輸入待測 URL,一次執行完整回退鏈,用於覈對各檔耗時與失敗原因。

適用場景與注意

適合誰:需要在 DSH 桌面 profile 下統一編排網頁抓取、按站點定製後端、或減少內置鏈在瀏覽器檔位上的等待時間的開發者。

權限與安全:插件以當前 DSH 進程權限運行;會讀寫 ~/.dsh/dsh-web-fetch/ 下的配置與密鑰文件,並可能下載、啓動本地 CRW 或調用本機瀏覽器。安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,自行評估 Key、Cookie 與出站請求風險。

能力邊界(README 明示):知乎開放平臺返回回答摘要;小紅書依賴 Cookie 與頁面內嵌狀態解析;本地瀏覽器在部分機房 IP 上難以通過 Cloudflare JS 挑戰,穩定過強 CF 往往依賴 firecrawl 等雲端檔位或網絡環境。lightpanda 不建議作爲中文站主力。

生態說明:DSH 奉行「一切皆插件」;SkillHub 目錄頁 爲社區收錄,與 DeepSeek / 幻方無官方從屬關係。截至目錄信息,該倉庫 GitHub 星標爲 0。

結尾

dsh–web-fetch 把多條網頁抓取後端收成一條可拖動排序的回退鏈,並用站點規則與質量閘門減少無效重試。若你正在 DSH 裏調 web.fetch 的行爲,可從官方 README 中的安裝命令入手,在卡片裏試連通性測試再定順序。

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

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

小夜