前言¶
DeepSeek Harness(DSH)內置了 web_search 和 web_fetch 兩個聯網工具,模型按原有方式發起查詢或 URL 請求即可。默認 bundle 裏 web_fetch 是關閉的:本地 HTTP 抓取後端沒有 SSRF 防護,模型選中的 URL 會直連你機器能訪問的任何地址,包括內網。
如果你需要讓智能體穩定讀取網頁正文,又不想在本地打開模型指定的連接,@firecrawl/dsh-firecrawl 提供了一條替代路徑:把搜索和抓取都交給 Firecrawl 的基礎設施,Harness 進程只向 API 提交請求並拿回 markdown,不直接連模型選的 URL。
這是什麼¶
@firecrawl/dsh-firecrawl 是 Firecrawl 團隊維護的 DSH 聯網插件,分類爲「聯網工具」。它不新增工具名,而是把 Harness 的 ctx.web 能力縫(capability seam)上的 web_search 與 web_fetch 分別指向 Firecrawl 的搜索與抓取後端。
當前版本 0.1.0,MIT 許可證,支持 @deepseek-ai/dsh@0.1.0-rc.6,Node.js 要求 ^22.19.0 || >=24.0.0。DSH 仍處於開發者預覽階段,後續 Harness 版本升級可能需要同步更新插件。
核心功能¶
搜索(web_search)¶
插件註冊 searchProvider: firecrawl,調用 Firecrawl /v2/search 接口。默認只搜 web 源;可在配置里加 news 以獲取帶發佈日期的新聞結果。可選開啓 scrapeContent,對每個結果再抓正文 markdown 作爲摘要,信息更完整,但會消耗更多額度並增加延遲。
抓取(web_fetch)¶
插件註冊 fetchProvider: firecrawl,調用 Firecrawl /v2/scrape 接口,默認輸出 markdown、只保留正文(onlyMainContent: true)。相比 Harness 自帶的本地抓取,Firecrawl 側提供 JS 渲染、反爬處理和 PDF 解析,這也是 base bundle 默認不啓用本地 web_fetch 時,該插件能補上抓取能力的原因。
安全邊界¶
Harness 進程不向模型指定的 URL 發起直連;它把 URL POST 給 Firecrawl API,由 Firecrawl 基礎設施去取頁面。這降低了本地 SSRF 風險,但 Firecrawl 仍能抓取模型請求的任意公網 URL——並非你事先白名單過的地址。若這一行爲不符合部署策略,可通過配置把 web_fetch 關掉,只保留搜索。
安裝與啓用¶
開始前準備:
- pnpm 10 或更新版本;
- Firecrawl API Key;
- DSH 裏已配置好的模型提供商。
無需全局安裝 dsh,下面命令通過 npx 固定使用 @deepseek-ai/dsh@0.1.0-rc.6。
先在運行 Harness 的終端裏導出 API Key:
export FIRECRAWL_API_KEY="fc-your-key"
把插件裝進 web profile:
npx --yes @deepseek-ai/dsh@0.1.0-rc.6 \
plugin --profile web add @firecrawl/dsh-firecrawl
停掉正在運行的 Harness 進程,再重新啓動:
npx --yes @deepseek-ai/dsh@0.1.0-rc.6 web
建議走 npm 包安裝。若必須從 Git 安裝,pnpm 11 會攔截 Git 依賴的 prepare 構建腳本,需按 README 把帶 commit SHA 的依賴鍵寫入 ~/.dsh/profiles/web/pnpm-workspace.yaml 的 allowBuilds,步驟較繁瑣。
驗證安裝¶
檢查合併後的 profile 配置:
npx --yes @deepseek-ai/dsh@0.1.0-rc.6 \
--profile web --dump-config | \
grep -E 'searchProvider: firecrawl|fetchProvider: firecrawl|@firecrawl/dsh-firecrawl'
預期能看到 searchProvider 和 fetchProvider 均爲 firecrawl,以及兩個插件條目 web-search-firecrawl 與 web-fetch-firecrawl。內置的 web-search-deepseek 同時存在是正常的,實際搜索由 searchProvider 決定。
再向智能體提一個需要即時網頁信息的問題(例如詢問 Firecrawl 近期 changelog)。對話記錄裏出現 web_search 或 web_fetch 卡片,說明工具已生效。
典型用法與配置¶
默認配置即可工作。需要調參時,編輯 ~/.dsh/profiles/web/cordis.patch.yml(用戶層覆蓋優先級最高)。
搜索示例——同時搜網頁與新聞,並抓取每條結果的正文摘要:
- id: web-search-firecrawl
config:
sources: [web, news]
scrapeContent: true
maxCharsPerResult: 4000
抓取示例——強制新鮮抓取、使用 stealth 代理應對反爬:
- id: web-fetch-firecrawl
config:
proxy: stealth
maxAgeMs: 0
若只想保留搜索、關閉抓取:
- id: tool-web
config:
fetch: false
API Key 應放在環境變量 FIRECRAWL_API_KEY 中,不要寫進 cordis.patch.yml(該文件以明文存儲)。
卸載插件:
npx --yes @deepseek-ai/dsh@0.1.0-rc.6 \
plugin --profile web remove @firecrawl/dsh-firecrawl
卸載後需重啓 Harness。
適用場景與注意¶
適合誰: 已在用 DSH web profile、需要聯網搜索和網頁正文讀取,且願意用 Firecrawl 額度換取 JS 渲染與反爬能力的開發者。
運行權限: 插件隨當前 DSH 進程加載,繼承該進程的環境與網絡訪問範圍。安裝前建議閱讀 源碼倉庫 與 MIT 許可證,確認符合你的安全與合規要求。
常見報錯:
WEB_PROVIDER_CONFIGURED_UNAVAILABLE:啓動 Harness 的終端未設置FIRECRAWL_API_KEY。WEB_PROVIDER_AMBIGUOUS:多個搜索 provider 可用但缺少searchProvider鎖定,需恢復爲firecrawl。- provider 仍是
deepseek-official:重啓 Harness,並檢查你自己的cordis.patch.yml是否覆蓋了searchProvider。
模型自行決定是否調用 web_search;若回答未聯網,換用明確需要當前信息的提示詞再試。
結尾¶
@firecrawl/dsh-firecrawl 不改動 Harness 的工具接口,只替換 web_search 和 web_fetch 的後端實現。對需要穩定聯網、又不想在本地直連模型指定 URL 的場景,它把抓取和搜索統一託管到 Firecrawl,同時補上了 base bundle 默認關閉的 web_fetch 能力。