前言¶
在 DeepSeek Harness(DSH)裏,智能體常用的 web_search 和 web_fetch 默認走官方搜索與匿名 HTTP 抓取。若團隊已有自建的 SearXNG 聚合搜索,或用 Firecrawl 做 Markdown 抓取,往往希望 Harness 繼續暴露同名工具與引用格式,只把請求落到自己的服務上。自己 fork 工具鏈成本高;直接改 @deepseek-ai/dsh-web 又怕升級衝突。下面介紹社區插件 dsh-custom-search-fetch 如何通過 ctx.web 提供方接口替換後端,而不改寫工具本身。
這是什麼¶
dsh-custom-search-fetch 由 mercurynomercy 維護,分類爲聯網工具,當前 GitHub 星標爲 0。插件不註冊新工具,而是向 @deepseek-ai/dsh-web 註冊搜索提供方 custom-searxng 與抓取提供方 custom-firecrawl,並通過 bundle 補丁把 searchProvider / fetchProvider 固定到二者。Harness 自帶的 web_search、web_fetch 在輸出格式、引用說明、按 preset 的可用性及超時策略上保持不變,僅後端 HTTP 目標改變。要求 DeepSeek Harness 版本 >=0.2.2-rc.1(插件包版本 0.2.0,許可證 MIT)。
工作原理¶
安裝後,Cordis 會應用插件自帶的 cordis.patch.yml,把 @deepseek-ai/dsh-web 指向上述自定義提供方。
- 搜索:對 SearXNG 發起
GET /search?format=json,按配置翻頁直到湊夠唯一 URL 或達到searxngMaxPages。答案與 infobox 文本進入結果的content,web_search在來源列表上方展示;引擎部分失敗時錯誤會點名引擎;無結果時若有拼寫建議會作爲 content 返回。 - 抓取:對 Firecrawl 調用
POST /v2/scrape(或 v1),formats: ["markdown"],頁面 Markdown 以text返回,標題作標題行;狀態碼與最終 URL 來自 Firecrawl 元數據。發送前與內置 HTTP 抓取相同:僅http(s)、URL 最長 2048、禁止內嵌憑據;Firecrawl 亦可將 PDF 等轉爲 Markdown。
移除插件會恢復 DeepSeek 默認搜索與匿名 HTTP 抓取。
安裝與啓用¶
在目標 profile 下執行 README 給出的安裝命令:
dsh plugin --profile <profile> add github:mercurynomercy/dsh-custom-search-fetch
插件上架 dsh-market 或 Plugins 頁面後,也可從目錄安裝。開發本地檢出可用 dsh plugin --profile <profile> add link:$(pwd)(需先在倉庫內 npm install)。
運行權限:插件與當前 DSH 進程同一權限訪問你配置的 SearXNG / Firecrawl 地址;安裝前請閱讀 GitHub 源碼 與 MIT 許可證。
配置¶
打開 Plugins → dsh-custom-search-fetch,README 下方的設置卡片分爲 SearXNG search 與 Firecrawl fetch。保存會寫入該 profile 的 cordis.patch.yml 並立即生效,無需重啓。各字段可 Reset to default;非法值無法保存。firecrawlApiKey 爲只寫:界面初始爲空,空白保存表示保留已存密鑰。
也可手寫 patch;帶 id: dsh-custom-search-fetch 的行會整段替換配置,因此改一項也需寫全已覆蓋字段,例如:
- id: dsh-custom-search-fetch
config:
searxngBaseURL: http://localhost:8080
firecrawlBaseURL: http://localhost:3002
常用字段(默認值與含義以 README 爲準):
| 字段 | 默認 | 含義 |
|---|---|---|
searxngBaseURL |
http://localhost:8080 |
SearXNG 根地址,不含 /search |
searxngMaxResults |
10 |
單次搜索條數(工具層 searchMaxResults 默認 8 會再封頂) |
searxngMaxPages |
2 |
爲湊夠結果最多請求的頁數 |
searxngLanguage / searxngCategories / searxngEngines |
空 | 設置時原樣傳給 SearXNG |
searxngSafeSearch |
未設置 | 0 / 1 / 2;未設置則用實例 search.safe_search |
searxngTimeRange |
空 | day、week、month、year |
searxngTimeoutMs |
15000 |
單頁請求超時 |
firecrawlBaseURL |
http://localhost:3002 |
Firecrawl API 根地址,不含 /v2 |
firecrawlApiVersion |
v2 |
v2 或 v1 scrape 端點 |
firecrawlApiKey |
空 | 明文密鑰;自託管無鑑權可留空 |
firecrawlApiKeyEnv |
FIRECRAWL_API_KEY |
未設明文密鑰時讀取的環境變量名 |
firecrawlOnlyMainContent |
true |
去掉導航、頁眉頁腳 |
firecrawlTimeoutMs |
25000 |
Firecrawl scrape 超時 |
firecrawlMaxAgeMs |
0 |
僅 v2:可接受緩存的最大毫秒數;0 表示總是新鮮抓取 |
firecrawlMaxBodyChars |
100000 |
截斷前返回的 Markdown 字符數 |
SearXNG 前置條件¶
未開啓 JSON 格式時 SearXNG 會對插件請求返回 403。在 settings.yml 中啓用:
search:
formats:
- html
- json
若實例限流開啓,需放行 Harness 所在主機,或對其實例關閉限流,否則易出現 429。
超時關係¶
web_fetch 受 tool-web 的 fetchTimeoutMs 約束(默認 30 秒)。firecrawlTimeoutMs 應低於該值;若對慢頁提高 Firecrawl 超時,需同步提高 tool-web 行上的 fetchTimeoutMs。
只切回其中一個後端¶
在 profile 的 cordis.patch.yml 中重寫 web 行。例如保留 SearXNG 搜索、抓取改回內置匿名 HTTP:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: custom-searxng
fetchProvider: http
內置提供方 id 包括 deepseek-official(搜索)、http(抓取),以及 deepseek-search-api / deepseek-fetch-api。Web 設置頁「Use the new Web Search API」開關也會改寫該 web 行,且優先級高於本插件補丁。
衝突與錯誤¶
同一類提供方 id 必須唯一;若另一插件也註冊 custom-searxng 或 custom-firecrawl,第二次註冊會失敗並報 WEB_DUPLICATE_PROVIDER。不要手工再插入 dsh-custom-search-fetch 行,bundle 補丁已包含。
常見 WebError:WEB_PROVIDER_ERROR 指明端點與修復方向;WEB_ABORTED 爲取消;WEB_INVALID_URL / WEB_BLOCKED_URL 爲 URL 被拒;清空 base URL 後提供方不可用,調用失敗爲 WEB_PROVIDER_CONFIGURED_UNAVAILABLE。
適用場景與注意¶
適合已在內網或本機部署 SearXNG、Firecrawl,並希望 Harness 智能體仍用標準 web_search / web_fetch 契約的團隊。不適合不願維護搜索/抓取服務、或必須與 DeepSeek 官方搜索 API 綁定的場景(此時應使用 Web 設置或對應內置提供方)。
社區插件目錄(如 skillhub.cn)由生態維護,與 DeepSeek / 幻方無官方從屬關係;選型時以倉庫 README 與版本兼容性爲準。
維護者提供的冒煙命令(需本地 SearXNG、Firecrawl 可達):
SEARXNG_URL=http://localhost:8080 FIRECRAWL_URL=http://localhost:3002 npm run smoke -- "query" https://example.com
結尾¶
經過上面的步驟,你可以在不大改智能體 preset 的前提下,把聯網搜與抓指向自建 SearXNG 與 Firecrawl,同時保留 Harness 原有工具行爲與錯誤模型。目錄頁:https://www.skillhub.cn/plugins/mercurynomercy/dsh-custom-search-fetch;源碼與完整配置表:https://github.com/mercurynomercy/dsh-custom-search-fetch。