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 仓库。

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

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

Xiaoye