前言¶
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 iddsh-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
关键设计:
- provider id 稳定,adapter 可换。增加后端不会改变
web.searchProvider,也不要求 DSH 重启后重新注册 provider。 - 配置按 section 开放。
search.adapters和fetch.adapters是开放字典,adapter 拥有默认值与校验逻辑;核心 schema 不需要为每个后端加字段。 - manifest 驱动设置页。Host 路由把 adapter manifest 发给浏览器,页面按
fields通用渲染;新增 adapter 不需要改 React 代码。 - 配置在调用时解析。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(推荐)¶
- 打开 DSH Web GUI。
- 进入 插件。
- 点击 添加插件。
- 输入包名:
dsh-search-tools
- 安装完成后启用这个 bundle。
- 打开 设置 → 搜索工具。
设置页出现,说明 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 插件目前不支持自动更新。升级步骤:
- 先在 设置 → 搜索工具 → 概览 关闭搜索/抓取接管(如果已开启)。
- 在 插件 页卸载旧版本。
- 重新添加
dsh-search-tools或新的 tarball。 - 重新启用,检查设置页配置是否保留(配置在 profile 的 YAML patch 中,通常不会因重装丢失)。
- 重新测试搜索与抓取。
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 进行零配置搜索¶
- 打开 设置 → 搜索工具 → 搜索。
- 在 后端 选择
Local Direct。 - 勾选 DuckDuckGo / Bing / Brave Search / 360 搜索 中至少一个,按需选择市场、安全搜索、结果数。
- 不需要实例或密钥。点 测试搜索引擎 可检查可达性。
- 点击 保存并应用。
使用 SearXNG 实例¶
- 打开 设置 → 搜索工具 → 搜索。
- 在 后端 选择
SearXNG。 - 点击 添加实例,填写实例地址(
http(s)绝对 URL,例如https://searx.example.com)。 - 备注名可选。按需设置引擎、分类、语言、安全搜索、分页、结果数、超时。
- 需要认证时选择
Bearer/Basic并保存密钥。 - 点击 测试,确认返回结构化来源。
- 点击 保存并应用。
使用 Readability HTTP 抓取正文¶
- 打开 抓取 页签。
- 保持 Readability HTTP,使用默认值。
- 测试一个公网页面,例如
https://example.com。 - 如果需要回退原文,可在配置中启用“失败时回退原文”。
使用 Jina Reader 抓取动态内容或 Office 文件¶
- 在 抓取 页签选择
Jina Reader。 - 托管服务:填
https://r.jina.ai/,在 Jina API key 保存密钥。 - 自托管:填
http://127.0.0.1:3000/(仅 loopback 允许明文 HTTP)或 HTTPS 反代地址。 - 需要动态内容时把 Fetch engine 设为
browser。 - 需要新鲜内容时打开 Bypass Reader cache。
使用 web_research 一次性获取搜索与正文¶
- 在会话中调用
web_research。 - 在配置中指定搜索与抓取 adapter。
- 设置抓取页数或总预算。
- 插件会执行搜索,并发抓取前 N 页,返回来源与正文。
适用场景与注意¶
适合需要自定义搜索/抓取后端、希望将搜索与抓取从 DSH 核心中解耦的开发者与研究者。
注意:
- 插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证。
- DSH 目前是 preview 软件,接口可能变化。
- 插件把 peer 范围锁在已验证的
0.2.1-rc.2线,升级 DSH 前请先看 CHANGELOG。
短结尾¶
dsh-search-tools 通过 adapter-first 的设计,让 DeepSeek Harness 的搜索与抓取能力更易扩展与组合,配置集中在 Web 设置页,切换后端不改变 provider id,适合需要灵活后端组合的场景。更多细节与文档见 GitHub 仓库。