dsh-web-search-tavily:用 Tavily 替換 DSH 內置聯網搜索,默認免 key

前言

DeepSeek Harness(DSH)裏,智能體要通過 ctx.web 做聯網搜索時,默認會走內置的 web-search-deepseek:它調用公網 api.deepseek.com 上的 web_search_20250305 工具,並且必須配置一把有效的公網 DeepSeek API key。實際部署裏,對話模型經常走內網網關,公網 key 失效或未配置時,搜索只會返回 HTTP 401,對話裏表現爲「搜不了網」。社區插件 dsh-web-search-tavily(維護者 liufeicc,分類:聯網工具)把 Tavily 接到同一套 web 接縫上,默認 keyless,不註冊賬號、不寫 API key 也能先試;需要穩定用量時再切到官方免費 key,配置不必改代碼路徑。

這是什麼

dsh-web-search-tavily 是 Tavily 的 WebSearchProvider 實現:只負責搜索,網頁抓取仍由內置 http 的 fetchProvider 承擔。它替換的是依賴公網 DeepSeek API key 的內置搜索 provider,而不是整包重寫 ctx.web。

項目 說明
目錄頁 https://www.skillhub.cn/plugins/liufeicc/dsh-web-search-tavily
源碼 https://github.com/liufeicc/dsh-web-search-tavily
包名 @local/dsh-web-search-tavily(本地 link: 引用)
許可證 MIT(見倉庫 package.json)

插件在 DSH 進程內以當前 profile 的權限運行;安裝前建議自行瀏覽源碼與許可證。

爲什麼需要它:內置搜索與 keyless 路徑

內置 web-search-deepseek 在鑑權失敗時典型報錯爲:

DeepSeek API error (HTTP 401): Authentication Fails

本插件走 Tavily API。官方提供 keyless 通道,請求時加上請求頭即可,返回 schema 與帶 key 時一致:

X-Tavily-Access-Mode: keyless

官方將 keyless 定位爲 exploration / light use,有速率上限;觸頂後註冊免費 key(README 寫明約 1000 credits/月、無需信用卡),把 accessMode 改爲 api-key 並配置 key,無需改插件業務代碼。

核心功能

搜索接縫

  • 實現 DSH WebSearchProvider,對接 searchProvider: tavily。
  • 單次結果條數、搜索深度、超時等可在 profile 的插件 config 裏調節(見下節)。
  • 返回的 content 摘要截斷到 600 字符,避免佔滿上下文;需要正文可繼續用 web_fetch(須保留 fetchProvider: http)。

超時與取消(兩道保險)

DSH 的 timeout-policy 是協作式:只 abort 一個 AbortSignal,下游未接力時會一直掛起。本插件合併調用方信號與本地硬超時:

AbortSignal.any([callerSignal, AbortSignal.timeout(timeoutMs)])
  • callerSignal:用戶點停止,或工具層 60s 預算;
  • AbortSignal.timeout(...):插件本地上限(默認 timeoutMs 20000)。

README 記載:取消約 513ms 返回 WEB_ABORTED;1s 硬超時約 1023ms 返回 WEB_PROVIDER_ERROR。即使上層取消鏈路斷了,單次搜索也會在 timeoutMs 內結束並返回明確錯誤。

已知限制(README)

  • keyless 有速率上限,官方未給具體數字;高頻請用免費 key。
  • 僅搜索,不實現抓取;web_fetch 依賴內置 http provider。

配置項

在 profile 的 cordis.patch.yml 裏,給插件行寫 config(字段以 README 爲準):

字段 默認值 說明
accessMode keyless keyless 或 api-key
apiKey — 正式 key;僅 api-key 模式
apiKeyEnv TAVILY_API_KEY apiKey 未配置時從該環境變量讀取
baseURL https://api.tavily.com 可指向代理或自建網關
searchDepth basic basic = 1 credit/次;advanced = 2 credits/次
timeoutMs 20000 本地硬超時(毫秒)
maxResults 8 單次搜索來源上限

安裝與啓用

官方 README 未提供 dsh plugin add github:... 一類命令,而是 本地目錄 + link: 依賴 + Cordis patch。下面步驟與倉庫一致,路徑請換成你的環境。

  1. 將倉庫放到固定目錄,例如 $HOME/data/claude-workspace/dsh/dsh-web-search-tavily/。

  2. 在 profile 的 package.json 增加依賴(路徑改爲絕對路徑):

"@local/dsh-web-search-tavily": "link:/absolute/path/to/dsh-web-search-tavily"
  1. 在 profile 的 cordis.patch.yml 末尾追加:
- insert:
    - id: web-search-tavily
      name: '@local/dsh-web-search-tavily'
- id: web
  config:
    searchProvider: tavily
    fetchProvider: http

- id: web 表示覆蓋整行、config 整體替換。searchProvider 與 fetchProvider 都要寫全;只寫 searchProvider 會抹掉 fetchProvider,連帶 web_fetch 失效。

  1. profile 若爲 patchReload: live,改完 patch 即熱加載,無需重啓 dsh。

peer 依賴與插件目錄裏的 node_modules

插件 import @deepseek-ai/schemastery 與 @deepseek-ai/dsh-web。profile 通過 link: 引用時,pnpm 不會在插件目錄安裝 peer,Node 從插件真實路徑向上解析可能 ERR_MODULE_NOT_FOUND。倉庫說明:在插件目錄用符號鏈接指向 $DSH_HOME/profiles/node_modules/@deepseek-ai/ 下的對應包;換 DSH_HOME 或升級 DSH 後若報錯,重建鏈接即可。

典型用法

啓用後,智能體側仍通過 DSH 統一的 web 工具使用搜索,無需爲 Tavily 單獨寫調用代碼。運維側常見做法是:

  1. 先用默認 accessMode: keyless 驗證接縫與超時行爲;
  2. 遇到速率限制時,註冊 Tavily 免費 key,設 accessMode: api-key,配置 apiKey 或環境變量 TAVILY_API_KEY;
  3. 內網需出網代理時,調整 baseURL;
  4. 對實時性要求高的任務,酌情調小 timeoutMs,並確認取消能較快得到 WEB_ABORTED。

摘要被截斷時,對命中 URL 再發起 web_fetch(依賴上節保留的 fetchProvider: http)。

適用場景與注意

適合誰: 已用 DSH 做智能體或自動化,聊天模型走內網或不想維護公網 DeepSeek key,但仍需要聯網檢索;願意用社區「一切皆插件」方式改 profile,而不是改 DSH 核心。

注意:

  • 插件與 profile 同進程、同權限;安裝前核對 GitHub 源碼與 MIT 許可證。
  • 社區目錄站點(如 skillhub.cn)與 DeepSeek / 幻方無官方從屬關係,本文檔描述的是社區維護的聯網工具插件,非官方應用商店條目。
  • GitHub 公開星標爲 0(截至撰寫時線索);功能事實以 README 與 package.json 爲準。

結尾

dsh-web-search-tavily 把 Tavily 接到 DSH 的 ctx.web 搜索接縫:默認 keyless、可漸進升級到 API key,並用 AbortSignal.any 補上本地硬超時,緩解「點停止仍轉圈」這類協作取消斷鏈問題。按 README 完成 link: 安裝與 cordis.patch.yml 後,即可在不依賴公網 DeepSeek 搜索 key 的前提下恢復聯網檢索。

  • 目錄頁:https://www.skillhub.cn/plugins/liufeicc/dsh-web-search-tavily
  • 源碼:https://github.com/liufeicc/dsh-web-search-tavily
羽毛球分组比赛记分
小程序二维码

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

小夜