dsh-search-tools:爲 DeepSeek Harness 提供可插拔的網頁搜索與正文抓取

前言

DeepSeek Harness(DSH)內置了 web_search 和 web_fetch,但默認後端不一定滿足所有人的需求:有人已有自建 SearXNG,有人需要通過代理轉發搜索請求,也有人希望抓取到的內容直接是乾淨的正文而非整頁 HTML。

dsh-search-tools 把“搜索/抓取後端”從 DSH 核心解耦出來。所有配置在 DSH Web GUI 的 設置 → 搜索工具 完成,不要求用戶手改 YAML。插件向 DSH 註冊穩定的 provider id,切換後端不會改變 DSH 的 web.searchProvider。新增後端只需註冊 adapter,設置頁按 manifest 自動渲染,無需改頁面代碼。此外還提供 web_research 工具,一次調用完成“搜索 + 抓取前 N 條正文”,適合需要頁面內容而非只拿鏈接的模型回合。

插件不提供公共搜索 API,不繞過目標站點的登錄/付費牆,也不替代 DSH 的權限與沙箱模型。渲染能力取決於抓取 adapter:readable-http 不執行頁面 JavaScript;可選的 wire-http 在本地做瀏覽器級 HTTP/TLS 指紋和 PDF 文本提取,同樣不執行頁面 JavaScript;可選的 jina-reader 把公網 URL 交給 Reader 服務做瀏覽器渲染(自託管時留在本機),三者都不登錄、不繞過付費牆、不破解驗證碼。

插件信息

  • 插件名稱:dsh-search-tools
  • 維護者:ThzxxArt
  • 分類:聯網工具
  • 倉庫版本:0.1.9(2026-10-24)
  • 許可證:MIT
  • GitHub:https://github.com/ThzxxArt/dsh-search-tools
  • 目錄頁:https://www.skillhub.cn/plugins/ThzxxArt/dsh-search-tools

核心功能

穩定的搜索/抓取 provider

  • dsh-search-tools:穩定的搜索 provider id
  • dsh-search-tools-fetch:穩定的抓取 provider id

這兩個 provider id 永不隨後端變化,切換後端時不會影響 DSH 的 web.searchProvider。

內置搜索 adapter

SearXNG

  • 多實例支持:可配置順序/輪詢、故障轉移
  • 輸出格式:支持 JSON 和 HTML
  • 請求方式:支持 GET/POST
  • 認證方式:支持 Bearer 和 Basic
  • 功能:代理、緩存、分頁、域名過濾

本地直連搜索 adapter(可選)

Local Direct

  • 本機直接請求 DuckDuckGo 和 Bing 的公開 HTML 結果頁
  • 可選啓用 Brave Search 或 360 搜索
  • 本地解析、去重、RRF 融合、域名多樣性、緩存
  • 不需要部署服務、API key、Reader 或瀏覽器,不執行頁面 JavaScript

內置抓取 adapter

Readability HTTP

  • 複用 DSH 安全 HTTP
  • 使用 Readability 提取正文,失敗時可回退原文
  • 不執行頁面 JavaScript

本地強抓取 adapter(可選)

Wire HTTP

  • 使用 impit 本地瀏覽器級 TLS/HTTP2 指紋
  • 逐跳公網出口 pinning
  • 支持 Readability 和 PDF 文本提取
  • 不需要 Reader/Key/瀏覽器/容器,不執行頁面 JavaScript

可選渲染抓取 adapter

Jina Reader

  • 瀏覽器渲染
  • 支持 PDF/Office、CSS 選擇器、iframe/Shadow DOM
  • 代理選項
  • 目標必須是公網地址,Reader 可託管或自託管

研究工具

web_research

  • 搜索、按併發抓取前 N 頁
  • 按頁/總預算截斷
  • 返回來源與正文

工作原理

DSH ctx.web
  searchProvider = "dsh-search-tools"         (穩定)
  fetchProvider  = "dsh-search-tools-fetch"   (穩定)
        │
        ▼
  SearchDispatcher / FetchDispatcher
        │ 讀取 config.search.adapter / config.fetch.adapter
        ▼
  ctx.searchTools(adapter 註冊表)
    ├── searxng         內置搜索 adapter(默認)
    ├── local-direct    內置搜索 adapter(本機直連 DDG + Bing)
    ├── readable-http   內置抓取 adapter(默認,DSH 安全 HTTP)
    ├── wire-http       內置抓取 adapter(可選,本地瀏覽器級 HTTP + PDF)
    ├── jina-reader     內置抓取 adapter(可選,Reader 渲染)
    └── 未來由獨立包註冊的 adapter

關鍵設計:

  1. provider id 穩定,adapter 可換。增加後端不會改變 web.searchProvider,也不要求 DSH 重啓後重新註冊 provider。
  2. 配置按 section 開放。search.adapters 和 fetch.adapters 是開放字典,adapter 擁有默認值與校驗邏輯;核心 schema 不需要爲每個後端加字段。
  3. manifest 驅動設置頁。Host 路由把 adapter manifest 發給瀏覽器,頁面按 fields 通用渲染;新增 adapter 不需要改 React 代碼。
  4. 配置在調用時解析。Dispatcher 每次按當前配置選擇 adapter;切換後不需要重新註冊 provider。

環境要求

  • DSH:>=0.2.1-rc.2 <0.3.0
  • Node.js:^22.19.0 || >=24.0.0
  • 搜索後端:
  • Local Direct(不需要部署,直接查 DDG/Bing)
  • 或一個可訪問的 SearXNG 實例
  • 也可暫時保持 DSH 默認搜索
  • 抓取後端:公網 http(s) 頁面
  • readable-http 由 DSH SSRF 防護攔截內網
  • wire-http 在本地逐跳 pin 公網地址
  • jina-reader 在發出前做公網目標守衛
  • Reader(可選):
  • r.jina.ai 的 API key
  • 或一個可訪問的自託管 Jina Reader 端點
  • 不配置時繼續用 readable-http 或 wire-http
  • 瀏覽器:DSH Web GUI(設置頁只在 Web 端註冊)

DSH 本身仍是 preview 軟件,接口可能變化。插件把 peer 範圍鎖在已驗證的 0.2.1-rc.2 線,升級 DSH 前請先看 CHANGELOG。

安裝與啓用

方式一:Web UI(推薦)

  1. 打開 DSH Web GUI。
  2. 進入 插件。
  3. 點擊 添加插件。
  4. 輸入包名:
   dsh-search-tools
  1. 安裝完成後啓用這個 bundle。
  2. 打開 設置 → 搜索工具。

設置頁出現,說明 Host 與瀏覽器兩半都已加載。

方式二:CLI

dsh plugin --profile <profile> add dsh-search-tools

<profile> 換成實際 profile 名。安裝後啓動該 profile:

dsh --profile <profile>

方式三:離線 tarball

從 GitHub Releases 下載最新可用的 dsh-search-tools-<version>.tgz,然後:

dsh plugin --profile <profile> add ./dsh-search-tools-<version>.tgz

發佈資產與 npm 產物字節一致,適合內網或無法訪問 npm 的環境。

升級

DSH 插件目前不支持自動更新。升級步驟:

  1. 先在 設置 → 搜索工具 → 概覽 關閉搜索/抓取接管(如果已開啓)。
  2. 在 插件 頁卸載舊版本。
  3. 重新添加 dsh-search-tools 或新的 tarball。
  4. 重新啓用,檢查設置頁配置是否保留(配置在 profile 的 YAML patch 中,通常不會因重裝丟失)。
  5. 重新測試搜索與抓取。

CLI 對應:

dsh plugin --profile <profile> remove dsh-search-tools
dsh plugin --profile <profile> add dsh-search-tools

不要在接管仍開啓時直接卸載。內置 web_search 會指向一個不存在的 provider,直到你重裝插件或手動恢復 web.searchProvider。

安裝後檢查

  • 設置 → 搜索工具 能看到五個頁籤。
  • 診斷 裏能看到版本號、配置文件路徑、抓取/研究運行狀態和緩存統計。
  • 如果模型工具已啓用,會話裏應能看到 web_research。
  • 搜索測試通過後,才建議開啓搜索接管。

典型用法

使用 Local Direct 進行零配置搜索

  1. 打開 設置 → 搜索工具 → 搜索。
  2. 在 後端 選擇 Local Direct。
  3. 勾選 DuckDuckGo / Bing / Brave Search / 360 搜索 中至少一個,按需選擇市場、安全搜索、結果數。
  4. 不需要實例或密鑰。點 測試搜索引擎 可檢查可達性。
  5. 點擊 保存並應用。

使用 SearXNG 實例

  1. 打開 設置 → 搜索工具 → 搜索。
  2. 在 後端 選擇 SearXNG。
  3. 點擊 添加實例,填寫實例地址(http(s) 絕對 URL,例如 https://searx.example.com)。
  4. 備註名可選。按需設置引擎、分類、語言、安全搜索、分頁、結果數、超時。
  5. 需要認證時選擇 Bearer / Basic 並保存密鑰。
  6. 點擊 測試,確認返回結構化來源。
  7. 點擊 保存並應用。

使用 Readability HTTP 抓取正文

  1. 打開 抓取 頁籤。
  2. 保持 Readability HTTP,使用默認值。
  3. 測試一個公網頁面,例如 https://example.com。
  4. 如果需要回退原文,可在配置中啓用“失敗時回退原文”。

使用 Jina Reader 抓取動態內容或 Office 文件

  1. 在 抓取 頁籤選擇 Jina Reader。
  2. 託管服務:填 https://r.jina.ai/,在 Jina API key 保存密鑰。
  3. 自託管:填 http://127.0.0.1:3000/(僅 loopback 允許明文 HTTP)或 HTTPS 反代地址。
  4. 需要動態內容時把 Fetch engine 設爲 browser。
  5. 需要新鮮內容時打開 Bypass Reader cache。

使用 web_research 一次性獲取搜索與正文

  1. 在會話中調用 web_research。
  2. 在配置中指定搜索與抓取 adapter。
  3. 設置抓取頁數或總預算。
  4. 插件會執行搜索,併發抓取前 N 頁,返回來源與正文。

適用場景與注意

適合需要自定義搜索/抓取後端、希望將搜索與抓取從 DSH 核心中解耦的開發者與研究者。

注意:

  • 插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證。
  • DSH 目前是 preview 軟件,接口可能變化。
  • 插件把 peer 範圍鎖在已驗證的 0.2.1-rc.2 線,升級 DSH 前請先看 CHANGELOG。

短結尾

dsh-search-tools 通過 adapter-first 的設計,讓 DeepSeek Harness 的搜索與抓取能力更易擴展與組合,配置集中在 Web 設置頁,切換後端不改變 provider id,適合需要靈活後端組合的場景。更多細節與文檔見 GitHub 倉庫。

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

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

小夜