前言¶
在 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 前置。
2. 填寫密鑰與 Cookie¶
在卡片「接口密鑰」區域填寫所需 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 中的安裝命令入手,在卡片裏試連通性測試再定順序。