统一的多供应商网络搜索与抓取:多 Key 轮询容灾、用量与健康监控、原生设置面板及搜索模式。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:A3Boy/dsh-web-tools
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh-web-tools
让 DeepSeek Harness 拥有直连全网与社媒平台的搜索与抓取能力。
8 大 Web Provider 原生能力适配 · SearchHints 语义编译 · 多源自动容灾 · 小红书 / Twitter X 平台检索
English | 简体中文
它解决什么问题
当联网能力只依赖一个 Web Provider 时,额度耗尽、限流或服务异常都可能直接中断检索;而简单接入多个搜索 API,往往又只能使用它们共同支持的基础能力,没有真正发挥不同搜索源各自擅长的搜索模式、分类、时效、域名策略和正文提取能力。
dsh-web-tools 将 Exa、Tavily、Firecrawl、Parallel、Brave、You.com、Jina、SearXNG,以及小红书、Twitter / X 接入 DSH 标准 web_search / web_fetch。
在统一 DSH 工具接口的同时,dsh-web-tools 通过 SearchHints 归一化查询意图,再针对不同 Provider 分别编译为其支持的原生参数,尽可能使用各家的分类、时效、域名、地区、深度搜索与正文提取能力;同时通过多 API Key、Provider Fallback 和平台专用浏览器会话,提高整个联网链路的可用性。
核心亮点:
- 8 大 Web Provider 原生能力深度适配:保持统一
web_search/web_fetch接口,但不把不同搜索源压成最低公共能力。针对 Exa、Tavily、Firecrawl、Parallel、Brave、You.com、Jina、SearXNG 分别适配搜索类型、时效、域名策略、地区语言、深度检索与正文提取能力。 - SearchHints → Provider-specific 参数编译:将 Query 中的技术 / 论文 / 新闻、时效、域名、地区与语言等搜索意图归一化,再按不同 Provider 的能力映射为各自原生参数;整个过程由确定性代码完成,不增加额外 LLM 调用。
- 小红书与 Twitter / X 平台来源:两个平台均通过独立的本地浏览器 Profile 提供已登录站内搜索、详情抓取,以及页面实际返回的评论或回复。
- 多搜索源调度与自动容灾:支持多 API Key 分配、鉴权失败切换、429 冷却、Ordered / Round-Robin / Random 路由,以及可配置 Provider Fallback。
- DSH 原生工具集成:直接复用标准
web_search/web_fetch,模型侧无需学习额外工具,同时提供会话级「联网搜索」模式。
DSH Agent
│
web_search / web_fetch
│
▼
SearchHints
topic / freshness / domains
locale / cleanQuery ...
│
Provider-specific
compilation
│
┌────────┬─────────┬───────────┬──────────┐
│ Exa │ Tavily │ Firecrawl │ Parallel │ ...
│ │ │ │ │
│category│ topic │ github │objective │
│ date │ chunks │ research │ policy │
│domains │ time │ tbs │ queries │
└────────┴─────────┴───────────┴──────────┘
8 大 Web Provider 原生能力深度适配
统一的是 DSH 的工具接口和搜索语义,不统一的是各家 Provider 的能力。
dsh-web-tools 通过 SearchHints 表达查询意图,再针对不同 Provider 分别构造请求,而不是把所有搜索源压缩成一套最低公共参数。
例如,同样是“搜索最近一周的 AI 编程资料”:
- Exa:映射分类、ISO 日期范围与域名限制;
- Firecrawl:技术查询映射至
github分类,研究类查询映射至research,并结合tbs时效过滤; - Parallel:组合
objective、search_queries与source_policy; - Brave Search:映射 freshness、国家与搜索语言,并优先使用 LLM Context;
- You.com:通过
boost_domains对指定域名进行软加权。
这些适配全部由确定性代码完成,不会为了选择 Provider 参数再额外调用一次 LLM。
- Exa:精确分类映射(publication / news / financial report)、ISO 日期范围与域名限制。
- Firecrawl:代码与技术查询映射至
github分类,论文与学术查询映射至research,并支持tbs时效、域名限制与 Clean Markdown 抓取。 - Parallel:双层语义优化(
objective软引导 +search_queries纯净词)与source_policy域名/时效过滤。 - Tavily:支持
basic/advanced/fast/ultra-fast搜索深度;basic、advanced、fast模式支持chunks_per_source分块控制,并映射news/finance话题、日期区间、国家与域名约束。 - Brave Search:LLM Context 预提取端点,支持
pd/pw/pm/py时效、国家与搜索语言。 - You.com:原生
boost_domains软加权支持,时效与地区国家过滤。 - Jina:搜索关键词降噪与 ReaderLM-v2 高精度 Markdown 正文解析。
- SearXNG:自建元搜索支持
categories(it/science/news) 与time_range。 - 原生与通用正文提取 (
web_fetch):配置 Tavily、Exa、Firecrawl、Parallel、You.com、Jina 时自动优先调用其原生云端提取接口;未配置或失败时,以及使用 SearXNG / Brave 时,自动平滑回退至插件内置通用 HTTP 抓取器(基于 Defuddle 纯本地 Markdown 解析与 SSRF / DNS 安全防护),无需额外配置或购买第三方 Fetch Key。
平台搜索源(小红书与 Twitter / X)
区别于通用搜索引擎,插件通过专用浏览器会话直接连接社媒平台:
原生独立浏览器会话架构:
- 基于本机已安装的 Edge / Chrome 专用 Profile 与 CDP 通信。
- 0 浏览器扩展、0 Playwright / Chromium 外部打包。Cookie 由专用浏览器 Profile 管理,插件不会将其写入配置、日志或中转服务;浏览器仍会按正常认证流程发送给对应平台。
小红书:
- 笔记详情与评论抓取 (
web_fetch):通过专用浏览器 Profile 解析__INITIAL_STATE__结构化数据并自动 DOM 兜底,保留完整xsec_token签名 URL;页面成功加载评论数据时,同时逐条提取一级评论与已返回的楼中楼回复。 - 站内搜索发现 (
web_search):默认使用已登录浏览器,从/explore的真实搜索框进入,只输入清洗后的主题词,不带平台名或site:限定;同时区分登录墙、安全验证和真实退出登录。排查浏览器问题时可通过XHS_NATIVE_SEARCH=0临时关闭。
- 笔记详情与评论抓取 (
Twitter / X:
- 原生搜索、推文详情与回复:通过 CDP 捕获 X Web 客户端自身的 GraphQL 数据流(SearchTimeline / TweetDetail),结构化解析目标推文及其回复树,并以 DOM 作为补充与兜底;支持
from:、since:、until:等搜索算子。
- 原生搜索、推文详情与回复:通过 CDP 捕获 X Web 客户端自身的 GraphQL 数据流(SearchTimeline / TweetDetail),结构化解析目标推文及其回复树,并以 DOM 作为补充与兜底;支持
单次详情抓取最多附带 30 条评论或回复,单条内容最多保留 800 个字符;仍有后续分页或楼中楼内容时会明确标记为截断,避免无界占用模型上下文。
能力边界说明:对于正文主要位于图片中的小红书笔记,目前会返回标题、文字描述、互动数据、图片数量以及页面已加载的评论,但暂不识别图片中的文字,也不会自动抓取全部评论分页。
Agent 使用 小红书: 或 X: 作为平台路由前缀。前缀只负责选择平台,插件会在实际站内搜索前移除它;例如 小红书: DeepSeek Harness 最终输入小红书搜索框的是 DeepSeek Harness。
- 通用 Web 降级 (Web Fallback):平台来源未启用、运行时暂不可用或发生可重试故障时,改由已配置的通用搜索或抓取 Provider 处理;登录失效、访问受限、站内搜索受限、无效详情地址等非重试错误会直接返回,不会用索引内容冒充原生站内结果、详情或评论。
- 登录态自动验证:Cookie 只作为第一层门槛。小红书要求同时存在
a1与web_session,随后还会通过交互浏览器稳定检查/explore的真实页面状态;可见登录墙会使旧 Session 立即失效并重新显示登录入口。搜索提交后的独立登录墙会直接标记为search-restricted,不会再用网页索引结果掩盖站内搜索失败。
调度策略与容灾机制
- 多 API Key 负载与容灾:支持为单个 Provider 配置多个 API Key,并发调用优先分配低
inFlight的 Key,鉴权失败自动切换备用 Key。 - 确定性 Provider Fallback:遇到网络异常、超时、5xx 服务端错误、429 限流或配额耗尽时,自动降级至链条中的下一搜索源。
- 429 Retry-After 临时冷却:遭遇限流并携带
Retry-After时触发零请求冷却,避免在冷却期内产生无效请求。 - 搜索路由策略:
web_search支持顺序模式(Ordered)、轮询模式(Round-Robin)和随机模式(Random);web_fetch始终按可抓取 Provider 的确定性链条执行。 - 会话级联网搜索 (Search Mode):开启后要求 Agent 在回答前至少完成一次
web_search或web_fetch调用;失败也算已尝试,但 Agent 会被要求说明哪些内容未能验证。 - 代理支持:支持 Windows 系统代理、
HTTP_PROXY、HTTPS_PROXY和NO_PROXY,本地回环地址自动绕过代理。
安装与更新
# 安装插件
dsh plugin --profile web add github:A3Boy/dsh-web-tools
# 更新插件
dsh plugin --profile web update dsh-web-tools
# 卸载插件
dsh plugin --profile web remove dsh-web-tools
重启 dsh web,在左侧侧边栏进入:Settings → Web Search。
Provider 支持矩阵
| Provider | 搜索 (Search) | 抓取/提取 (Fetch / Extract) | 核心特性与深度适配能力 | 配额查询 (Quota) |
|---|---|---|---|---|
| Exa | 支持 | 支持,/contents |
语义检索 (auto / fast / deep)、垂直分类映射、Query-aware 高亮切片、ISO 日期范围与域名限制 |
控制台自查 |
| Tavily | 支持 | 支持,/extract |
搜索深度 (basic / advanced / fast / ultra-fast),前三种模式支持分块控制,并映射 news / finance、日期、国家与域名参数 |
官方 API |
| Firecrawl | 支持 | 支持,/scrape |
技术查询映射 github 分类、学术查询映射 research,支持 tbs、域名限制与 Clean Markdown 提取 |
官方 API |
| Parallel | 支持 | 支持,/v1/extract |
双层语义检索 (advanced / basic / turbo)、objective 软引导、source_policy 域名/时效过滤 |
控制台自查 |
| Brave Search | 支持 | — | 默认优先 LLM Context 预提取模式,支持时效/区域语言过滤,不支持时自动回退 Classic 搜索 | 响应头自动捕获 |
| You.com | 支持 | 支持,/v1/contents |
搜索高亮片段提取、原生 boost_domains 软加权、时效与国家过滤、Markdown 正文接口 |
官方 API |
| Jina | 支持 | 支持,Reader | 搜索关键词降噪、ReaderLM-v2 高精度 Markdown 转换、Token 预算控制 | 尽力解析 |
| SearXNG | 支持 | — | 开源自托管元搜索引擎,映射 categories (it/science/news) 与受支持的 time_range,适配器无需 API Key |
由自建实例决定 |
快速选型指南
新安装默认首选 Provider 为 Exa;已有安装继续沿用已保存的 Provider 配置。
| 需求场景 | 推荐首选 | 说明 |
|---|---|---|
| 社媒内容发现 / 详情抓取 | 小红书 / Twitter / X | 两个平台均支持已登录站内搜索、详情抓取,以及实际返回的评论或回复 |
| 语义检索 / 技术文档 | Exa | 支持语义模式、分类、日期、域名与高亮参数 |
| 预提取搜索上下文 | Brave Search | 优先使用 LLM Context,失败时回退 Classic Search |
| 可调深度搜索与正文提取 | Tavily / Parallel | 提供 Provider 原生深度档位与内容提取接口 |
| 正文转 Markdown | Firecrawl / Jina | 支持正文提取、主内容过滤或 Reader 转换 |
| 时效、地区与域名偏好 | You.com | 支持 freshness、地区语言和 boost_domains 参数 |
| 自托管元搜索 | SearXNG | 使用用户自己的 SearXNG 地址,适配器不要求 API Key |
本地开发
pnpm install # 安装依赖
pnpm test # 运行测试套件
pnpm run typecheck # 类型检查
pnpm run build # 编译构建 (产物输出至 lib/)
常见问题
自建 SearXNG 配置与排错
使用 Docker 或自托管 SearXNG 时,若提示 no usable provider 或返回 403 拒绝访问,请检查以下两项配置:
- 必须开启 JSON 格式输出:SearXNG 默认仅启用了 HTML 输出。编辑 SearXNG 的
settings.yml文件,在search.formats中增加- json:
修改后重启 SearXNG 容器(例如search: formats: - html - json # 必须包含 json,供 API 接口调用docker restart searxng)生效。 - 免 Key 访问:SearXNG 属于自建免 Key 搜索源,插件面板中无需填写 API Key(留空即可)。在
Base URL中填入你的 SearXNG 实例地址(如http://127.0.0.1:8080),点击「测试搜索」即可验证连通性。
缓存与重新安装
若使用本地包或软链接升级遇到缓存问题,可前往 Profile 目录重新安装:
cd ~/.dsh/profiles/web && pnpm install
Exa 和 Parallel 的余额需要在 Provider 控制台查看;Brave 的配额信息来自实际搜索响应头。配额展示仅用于状态说明,不影响正常检索与降级。
小红书和 Twitter / X 分别使用独立的本地浏览器 Profile。插件不会把原始 Cookie 导出到配置、日志或第三方中转服务;浏览器会按正常登录与访问流程将 Cookie 发送给对应的平台域名。
许可
MIT © A3Boy
链接
同类插件
Tencent/BrowserSkill#dsh-plugin-browserskill★ 8657
BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
omdsh-dev/dsh-browser#packages/browser/bridge-browser★ 798
Chrome 侧边栏扩展,让 DSH 直接操控你的浏览器,无需视觉能力。
liustack/modsearch★ 638
纯文本 agent 的联网搜索桥:搜索网页与 X,返回结构化 JSON 证据(search/fetch/引用)。
DDDMUC/dsh-free-search★ 372
DSH 免费搜索插件:7 个引擎(DuckDuckGo/Bing/SearXNG 免费 + Exa/Perplexity/DeepSeek 付费)、自动回退、设置页 UI(API key 输入 + 官网链接)、web_fetch、引擎测试工具。
Tabbit-Browser/dsh-tabbit★ 107
让 DeepSeek Harness 能够控制 Tabbit 浏览器:安装即自动加载 tabbit-browser skill,检测国际版 Tabbit 与国内版 Tabbit Browser 正式版(>= 1.9.0),检查 tabbit-cli 常驻运行时,按平台诊断调用 CLI 所需的 DSH sandbox 模式,并在没有合格版本时通过后台任务下载与系统地区匹配的正式版安装包。
wqty123/dsh-browser★ 107
共享真实浏览器:用户可观看并随时接管的原生 Electron 窗口,agent 通过 CDP 驱动,内置 20 个 browser_* 工具(打开/快照/执行/填表/截图/下载/登录态);任务级会话隔离、登录态持久化、人机验证识别,纯 `dsh web` 无需桌面外壳即可自托管。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。