dsh-firecrawl:爲 DeepSeek Harness 接入 Firecrawl 聯網搜索與抓取

前言

DeepSeek Harness(DSH)內置了 web_searchweb_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_searchweb_fetch 分別指向 Firecrawl 的搜索與抓取後端。

當前版本 0.1.0,MIT 許可證,支持 @deepseek-ai/dsh@0.1.0-rc.6,Node.js 要求 ^22.19.0 || >=24.0.0。DSH 仍處於開發者預覽階段,後續 Harness 版本升級可能需要同步更新插件。

核心功能

插件註冊 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 關掉,只保留搜索。

安裝與啓用

開始前準備:

  1. pnpm 10 或更新版本;
  2. Firecrawl API Key
  3. 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.yamlallowBuilds,步驟較繁瑣。

驗證安裝

檢查合併後的 profile 配置:

npx --yes @deepseek-ai/dsh@0.1.0-rc.6 \
  --profile web --dump-config | \
  grep -E 'searchProvider: firecrawl|fetchProvider: firecrawl|@firecrawl/dsh-firecrawl'

預期能看到 searchProviderfetchProvider 均爲 firecrawl,以及兩個插件條目 web-search-firecrawlweb-fetch-firecrawl。內置的 web-search-deepseek 同時存在是正常的,實際搜索由 searchProvider 決定。

再向智能體提一個需要即時網頁信息的問題(例如詢問 Firecrawl 近期 changelog)。對話記錄裏出現 web_searchweb_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_searchweb_fetch 的後端實現。對需要穩定聯網、又不想在本地直連模型指定 URL 的場景,它把抓取和搜索統一託管到 Firecrawl,同時補上了 base bundle 默認關閉的 web_fetch 能力。

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

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

小夜