dsh-deepseek-search
Manifest validDeepSeek 搜索:DeepSeek Harness 多引擎网页搜索、正文抓取与深度资料收集插件
DeepSeek 搜索(dsh-deepseek-search)
给 DeepSeek Harness 桌面端补上“真正能上网查资料”的能力:多引擎搜索 + 网页正文抓取 + 一次调用完成深度收集,并提供一个中文设置页。
仓库地址:https://github.com/a2042798096-debug/dsh-deepseek-search
- 原生
web_search会自动切换到本插件的多引擎搜索链,模型不需要换工具名。 - 新增
web_research:搜索 → 选页 → 抓正文 → 汇总,带出处。 - 新增
web_collect:一次读多个 URL 的正文。 - 新增
web_engines:查看引擎启用/可用状态。 - 设置页可开关引擎、填 API Key、调超时与正文上限、直接试搜。
当前版本默认接入国内可直连的 必应、百度、搜狗、360;Tavily / Exa / Firecrawl / Brave / Serper 需要 Key,DuckDuckGo / SearXNG 默认关闭。在部分中国大陆网络中,Google、DuckDuckGo、Brave、SearXNG 公共实例可能连接超时,所以没有把它们设为默认。
优势
- 不消耗 DeepSeek 模型 token:默认四个免费引擎直接发 HTTP 请求,不走“辅助模型回合”;只有你自己启用的 Tavily/Exa 等 API 引擎才使用对应服务商的额度。
- 多源交叉,而不是单一官方结果:必应、百度、搜狗、360 并行检索,按加权 RRF 合并、按 URL 去重;多个引擎同时命中的结果会自动加分。
- 一次调用完成“查 + 读”:
web_research把“多查询 → 多引擎 → 选页 → 抓正文 → 带出处汇总”串起来,不用模型来回十几轮。 - 原生工具零迁移:
web_search/web_fetch的名字和参数不变,已有提示词、技能、工作流不用改;只是web_search背后的提供方换成了多引擎。 - 失败隔离:某个引擎超时、被反爬或改版,只影响它自己;其他引擎继续返回。连续失败会记录在
web_engines的“最近错误”里,方便判断是 Key、网络还是反爬。 - 直连失败可回退:免费引擎的 GET 请求在直连被重置/超时时,会自动再走一次 DSH 的
ctx.web.fetch(),复用它配置的代理、DNS 校验和安全限制。 - 隐私可控:每个引擎都能单独关闭;API Key 只写本机;设置页明确提示查询会发往哪些引擎;不想让查询离开 DeepSeek 时,可以只保留官方提供方。
- 中文场景优化:默认启用百度、搜狗、360,覆盖公众号、CSDN、知乎、博客园等中文来源;搜狗/360 的
/link跳转壳会自动解析成真实地址。 - 上下文可控:
web_research支持includeContent: false摘要模式、maxPages、每页字符上限和总输出上限,调研长文时也能控制上下文。 - 开源可扩展:新增一个引擎只需要改
config.mjs的目录、engines.mjs的 runner/parser,再加一个离线 fixture。
与原版 DSH 网页搜索的区别
| 维度 | 原版 DSH | 本插件 |
|---|---|---|
| 搜索方式 | DeepSeek 官方:deepseek-official(Messages 原生搜索)或 deepseek-search-api | 本插件注册 deepseek-search,聚合多个搜索引擎 |
| 引擎数量 | 单一官方提供方 | 默认 4 个免费引擎;可选 7 个 API/自建引擎 |
| 成本 | 一次搜索通常是一次辅助模型请求,消耗 token/官方额度 | 免费引擎零模型 token;API 引擎使用各家额度 |
| 延迟 | 更接近一次模型回合 | 并行 HTTP,通常 1–3 秒返回搜索结果;抓正文另计 |
| 结果 | 官方排序与结构化来源 | 加权 RRF、跨引擎去重、来源引擎标注 |
| 工具 | web_search、web_fetch | 原生两个不变,另加 web_research、web_collect、web_engines |
| 网页抓取 | http 或 deepseek-fetch-api | 仍走 ctx.web.fetch(),默认固定 http |
| 配置入口 | 设置 → 内置插件设置 → 网页搜索 | 设置 → DeepSeek 搜索 |
| 查询去向 | api.deepseek.com | 你启用的 Bing/百度/搜狗/360 或 Tavily/Exa 等 |
| 失败模式 | 凭据、端点、官方额度 | 反爬、网页改版、网络;多引擎 + 可选 API 兜底 |
什么时候仍然用原版
- 要求所有查询只到 DeepSeek、不接受第三方搜索引擎;
- 已经有稳定的 DeepSeek API 额度,且更信任官方结构化结果;
- 只需要单页
web_fetch,不需要批量收集; - 对免费 HTML 解析的稳定性没有把握,也不想配置 API 引擎。
什么时候用本插件
- 需要中文多源结果、交叉验证;
- 想省模型 token,或模型本身没有官方搜索额度;
- 需要一次读多页、做调研、输出带出处的资料;
- 愿意用 Tavily/Exa 等 API 换取更稳的英文/技术结果。
1. 安装
先获取代码:
git clone https://github.com/a2042798096-debug/dsh-deepseek-search.git
cd dsh-deepseek-search
方式 A:双击脚本(推荐)
-
完全退出 DeepSeek Harness(不是最小化到托盘,是退出进程)。
-
双击本目录下的
安装.cmd,或在 PowerShell 中运行:powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -
脚本会把本目录以
link:方式装进desktopprofile,并打印验证结果。 -
重新启动 DeepSeek Harness。
-
打开 设置 → DeepSeek 搜索,点一次“试搜”确认引擎可用。
方式 B:手动命令
# 按你的实际路径修改这两行
$dsh = "D:\deepseekharness\resources\runtime\cli\bin\dsh.cmd"
$plugin = "C:\path\to\dsh-deepseek-search"
& $dsh plugin --profile desktop add "link:$($plugin -replace '\\','/')"
如果 DSH 安装路径不同,把 $dsh 换成实际安装目录(目录下应有 resources\runtime\cli\bin\dsh.cmd)。
安装完成后,profile 的 package.json 会自动把 dsh-deepseek-search 加入 dependencies 和 dsh.profile.bundles;插件包内的 cordis.patch.yml 会把 web.searchProvider 切到 deepseek-search。
方式 C:在 DSH 插件页安装
- 打开 设置 → 插件。
- 选择“从本地目录安装 / 安装本地插件”。
- 选中本目录,安装后重启。
桌面端同一时间只建议由一种方式安装,重复安装前先卸载。
2. 使用
安装并重启后,正常和模型聊天即可。例如:
- “帮我查一下 DeepSeek Harness 最近有哪些值得装的插件,列出来源。”
- “用 web_research 调研一下 2026 年国产大模型 Agent 框架的差异,deep 深度。”
- “把这三篇文章的正文抓下来对比:https://… https://… https://…”
模型会自己选择:
| 工具 | 用途 |
|---|---|
web_search(原生) | 普通搜索,返回标题、URL、摘要;现在由本插件的多引擎链提供结果 |
web_fetch(原生) | 打开单个 URL,DSH 自带,带 SSRF 防护与正文转换 |
web_research | 多查询、多引擎搜索 + 抓取前 N 页正文 + 汇总;适合调研 |
web_collect | 批量抓取指定 URL 的正文;适合已有链接 |
web_engines | 查看引擎是否可用、配置路径、当前参数 |
web_research 参数
| 参数 | 说明 |
|---|---|
query | 必填,主题/问题,建议关键词 |
queries | 可选,额外的查询角度,最多 4 组 |
depth | quick(3 页)/ standard(6 页)/ deep(10 页) |
maxPages | 可选,1–10,覆盖 depth 的页数 |
includeContent | 可选,默认 true;设为 false 只返回摘要/节选,节省上下文 |
engines | 可选,指定引擎 id,如 ["bing","baidu"] |
web_collect 参数
| 参数 | 说明 |
|---|---|
urls | 必填,1–10 个 http(s) URL |
maxCharsPerPage | 每页正文上限,1000–50000 |
includeLinks | 是否附带页面内链接 |
小技巧
- 问“最新/今天/价格/版本号”这类问题时,明确要求“用 web_research 查并给出来源链接”。
- 需要更全的中文资料时,在设置页同时打开百度、搜狗、360。
- 需要英文/技术资料时,填 Tavily 或 Exa 的 Key 并启用;它们的结果通常比网页解析稳定。
- 单页读不到正文时,先试
web_fetch;仍不行再用web_collect或换 URL。
3. 设置页
设置 → DeepSeek 搜索:
- 免费引擎:必应、百度、搜狗、360、DuckDuckGo、SearXNG。
- API 引擎:Tavily、Exa、Firecrawl、Brave、Serper。
- 每个引擎可单独启用/停用;API 引擎填写 Key 后才会可用。
- “抓取与结果设置”可调:每引擎结果数、单引擎超时、整次搜索超时、每页正文上限、深度收集默认页数、缓存时间。
- “试搜”会使用已保存的配置,直接显示聚合后的前 10 条结果和引擎来源。
- 某个引擎最近失败时,会显示“最近错误”;常见是反爬、超时或 Key 无效。
- 页面顶部有数据流向提示:查询会发往已启用的引擎/API 服务商,不需要的引擎直接关掉。
Key 只写入本机配置文件,设置页只显示 •••• 加后四位;保存时留空表示保持原 Key。
4. 引擎与配置
引擎
| id | 名称 | 类型 | 默认 | 说明 |
|---|---|---|---|---|
bing | 必应 Bing | 免费 | 开 | 默认走 cn.bing.com,可改地址 |
baidu | 百度 | 免费 | 开 | 中文覆盖好;结果条数受反爬影响 |
sogou | 搜狗 | 免费 | 开 | 公众号内容多;跳转壳会自动解析 |
so360 | 360 搜索 | 免费 | 开 | 作为中文补充 |
duckduckgo | DuckDuckGo | 免费 | 关 | 大陆通常需代理 |
searxng | SearXNG | 自建 | 关 | 填实例地址;需实例开启 JSON 输出 |
tavily | Tavily | API | 关 | 需 TAVILY_API_KEY 或设置页 Key |
exa | Exa | API | 关 | 需 EXA_API_KEY |
firecrawl | Firecrawl | API | 关 | 需 FIRECRAWL_API_KEY |
brave | Brave Search | API | 关 | 需 BRAVE_API_KEY |
serper | Serper (Google) | API | 关 | 需 SERPER_API_KEY |
配置文件
默认路径:
C:\Users\<你的用户名>\.dsh\deepseek-search\config.json
- 也可用环境变量
DSH_DEEPSEEK_SEARCH_CONFIG指定其他路径。 - API Key 也可以放在环境变量里(配置留空时读取):
TAVILY_API_KEY、EXA_API_KEY、FIRECRAWL_API_KEY、BRAVE_API_KEY、SERPER_API_KEY。 - 参考
config.example.json。修改后可在设置页点“保存”,或直接重启 DSH。
关键字段
{
"engines": {
"bing": { "enabled": true, "baseURL": "https://cn.bing.com", "weight": 1 },
"tavily": { "enabled": true, "apiKey": "<your-tavily-key>", "weight": 1.1 }
},
"search": {
"resultsPerEngine": 10,
"engineTimeoutMs": 15000,
"totalTimeoutMs": 30000,
"maxEnginesPerQuery": 6,
"cacheTtlMs": 180000
},
"fetch": {
"maxCharsPerPage": 12000,
"researchMaxPages": 6,
"concurrency": 3,
"readerBaseURL": ""
}
}
weight影响 RRF 排序权重,默认必应 1、百度 0.95、搜狗 0.85、360 0.8,API 引擎略高。readerBaseURL可选:正文过短时调用第三方阅读器,支持{url}占位符,例如https://r.jina.ai/{url}。默认关闭。
5. 工作原理
- 搜索层:并行请求已启用的引擎,解析各自 HTML/JSON;单引擎失败只记警告,不影响其他引擎。
- 合并层:按 URL 去重,用加权 Reciprocal Rank Fusion 排序;多个引擎共同命中会加分。
- 跳转解析:搜狗/360/百度的
/link跳转壳会被解析成真实域名,解析失败的结果丢弃。 - 抓取层:通过 DSH 的
ctx.web.fetch()读取页面,复用其 SSRF 防护、DNS 校验、连接固定、重定向和大小限制。插件 bundle 补丁会同时固定web.searchProvider: deepseek-search和web.fetchProvider: http;因为补丁层的config是替换而不是深合并,漏掉fetchProvider会让deepseek-fetch-api与http同时可用并报歧义。 - 正文层:轻量 HTML 解析,优先
article/main/ 公众号#js_content/ CSDN#content_views/ 知乎RichText/ GitHubmarkdown-body,按文本长度和链接密度选最佳容器。 - 汇总层:按域名分散选页(同域最多 2 页),并发抓取,输出标题、URL、来源引擎、时间、摘要和正文。
6. 安全与隐私
- 搜索请求发往你启用的引擎/API 服务商(必应/百度/搜狗/360 或 Tavily/Exa 等);不会发往本插件作者的服务器,也没有遥测。
- 页面抓取走 DSH 的
ctx.web.fetch(),不会绕过它的公网地址校验。 - 不收集、不上传你的 Key;Key 只写入本机
~/.dsh/deepseek-search/config.json(尽力设为 0600),也可以改用环境变量。 - 工具输出会明确标注“网页内容属于外部不可信数据”,模型不应执行网页里的指令。
- 正文长度有上限,避免把超长网页塞进上下文。
- 本插件不执行网页脚本,不解析 PDF/压缩包/音视频;遇到这些会返回明确错误。
7. 故障排查
设置页没有“DeepSeek 搜索”
- 确认已重启 DSH(Host 插件必须重启,Client 页面才会出现)。
- 打开 设置 → 插件,确认
dsh-deepseek-search已安装且启用。 - 查看 profile:
C:\Users\<你>\.dsh\profiles\desktop\package.json的dsh.profile.bundles是否包含它。 - 如果安装时 DSH 正在运行,先完全退出再重装。
原生 web_search 仍然走 DeepSeek 官方搜索
-
检查 profile 的
cordis.patch.yml是否有:- id: web config: searchProvider: deepseek-search -
或打开 设置 → 插件 → 内置插件设置 → 网页搜索,确认提供方已切换。切换后重启。
搜索返回 0 条
- 在设置页“试搜”看 warnings:常见是百度/搜狗反爬、网络超时、API Key 无效。
- 先只开必应测试;确认网络能访问
https://cn.bing.com。 - 百度/搜狗偶尔返回验证页,过几分钟或换关键词再试。
- 打开 Tavily/Exa 作为稳定后备。
页面抓取失败
- 公众号、知乎、CSDN 等可能有反爬;
web_fetch失败时换用文章镜像或搜索结果里的其他来源。 - PDF、压缩包、音视频会明确提示不支持。
- 需要代理才能访问的站点,DSH 的 fetch 会按它的代理配置处理;搜索引擎默认直连,直连失败时会回退到
ctx.web.fetch(),因此也能复用 DSH 的代理。API 引擎的 POST 请求不会走这个回退。 - 如果错误是
multiple usable web providers are registered (deepseek-fetch-api, http),说明web的fetchProvider没有被固定。请确认插件自带的cordis.patch.yml同时包含searchProvider: deepseek-search和fetchProvider: http;旧版本可在 profile 的cordis.patch.yml里补上,然后重载/重启。
超时
- 调低“每引擎结果数”,或调低“整次搜索超时”。
deep深度会抓 10 页,慢是正常的;日常用standard。
8. 卸载
powershell -NoProfile -ExecutionPolicy Bypass -File .\uninstall.ps1
或:
$dsh = "D:\deepseekharness\resources\runtime\cli\bin\dsh.cmd"
& $dsh plugin --profile desktop remove dsh-deepseek-search
卸载后重启 DSH。配置文件默认保留在 ~/.dsh/deepseek-search/config.json;如需彻底清除,加 -PurgeConfig 或手动删除该目录。
9. 开发与测试
本插件不需要构建:lib/index.mjs 是 Host ESM,lib/client.js 是手写的 __ModuleLoader__.load 浏览器包,直接改源码即可。
# 语法检查
node --check lib/index.mjs
node --check lib/client.js
# CI 同款离线测试:解析器、配置、正文提取、输出格式化
node test/offline.test.mjs
# Client bundle 包装与设置页注册
node test/client.test.mjs
# 也可以直接跑 npm test(offline + client,不访问网络)
npm test
# 真实网络冒烟:多引擎搜索
node test/engines.test.mjs "DeepSeek Harness 插件"
# 正文提取(网络)
node test/extract.test.mjs
# 搜索 + 抓取 + 汇总(网络)
node test/research.test.mjs
# 假 ctx 下的 Host 集成测试(工具、提供方、设置路由,需要网络)
node test/host.test.mjs
GitHub Actions 的 CI 工作流只跑离线测试和 bundle 包装检查,不会访问搜索引擎,因此在 CI 中稳定。真实网络测试保留给本地手动运行。
目录:
dsh-deepseek-search/
├─ lib/
│ ├─ index.mjs Host 入口:提供方、3 个工具、HTTP 路由
│ ├─ config.mjs 配置模型、默认值、持久化、脱敏
│ ├─ engines.mjs 引擎实现、解析、RRF 合并、跳转解析
│ ├─ html.mjs 轻量正文提取
│ ├─ research.mjs 抓取、批量收集、深度收集、输出格式化
│ └─ client.js 设置页浏览器包
├─ test/ 离线测试 + 真实网络冒烟/集成测试
├─ .github/workflows/ci.yml
├─ cordis.patch.yml 插件 bundle 补丁
├─ package.json
├─ config.example.json
├─ install.ps1 / uninstall.ps1 / 安装.cmd / 卸载.cmd
├─ SECURITY.md
├─ CONTRIBUTING.md
├─ CHANGELOG.md
└─ README.md
10. 已知限制与应对
这个插件不是“比官方搜索更强”的承诺,而是在官方搜索之外多给一套可调、可省 token、可多源交叉的方案。下面是明确的取舍。
| 限制 | 影响 | 插件里的应对 |
|---|---|---|
| 免费引擎靠 HTML 解析 | 搜索引擎改版、反爬、验证码会让结果变少或为空 | 多引擎并行、单引擎失败隔离、结果缓存;设置页显示“最近错误”;可切到 Tavily/Exa 等 API 引擎 |
| 百度在无 Cookie 时结果少 | 中文结果覆盖不如预期 | 同时启用必应/搜狗/360;需要更稳时加 API 引擎 |
| 搜狗/360 有跳转壳 | 不能直接拿到真实域名 | 自动解析 /link 跳转;解析失败的结果丢弃,避免返回垃圾链接 |
| 查询会发给第三方 | 隐私边界从“只到 DeepSeek”变成“到多个搜索引擎” | 每个引擎可单独关闭;Key 只存本机;设置页明确数据流向;不想外发时只用官方提供方 |
| 某些引擎在当前网络不可达 | DuckDuckGo/Google/Brave/SearXNG 可能超时 | 默认只开国内四引擎;直连失败时自动回退到 ctx.web.fetch()(可复用 DSH 代理);API 引擎 POST 不走该回退 |
| 长文会占用上下文 | 多页正文可能很长 | includeContent:false 摘要模式、maxPages、每页字符上限、总输出上限;页面默认截断 |
| 不支持 PDF/Office/音视频 | 这些链接会明确失败 | 用 web_fetch 打开可读页面;配置 readerBaseURL 走第三方阅读器;或换来源 |
| 没有内部 LLM 总结 | web_research 只做检索和正文拼接,不做二次生成 | 主模型直接阅读带出处的资料;需要更短时用摘要模式;不额外消耗一次模型调用 |
补丁会替换 web 配置 | 漏写 fetchProvider 会导致抓取提供方歧义 | cordis.patch.yml 同时固定 searchProvider: deepseek-search 和 fetchProvider: http;故障排查里有说明 |
通过 link: 安装 | 移动/删除插件文件夹会让链接失效 | 安装脚本使用绝对路径;移动后重新执行安装;README 已注明 |
| API Key 存在本机 JSON | 本机文件被读取时可能泄露 | 尽力设为 0600;优先用环境变量;设置页只显示后四位;不写入日志/工具输出 |
不是替代关系:原生 web_fetch 仍然保留,web_research/web_collect 也复用它的安全抓取;如果只需要官方搜索,把 web.searchProvider 切回 deepseek-official 或卸载插件即可。
Contributing
见 CONTRIBUTING.md。提交前请运行 npm test,并确保不要把任何真实 API Key 写进仓库。
License
MIT
Comments
Loading…
Similar plugins
by RailgunHamster
A DeepSeek Harness plugin for selecting and routing web search providers.
★ 0
JavaScript
Sep 29, 2026
dsh plugin --profile web add dsh-web-searchby abcdream-Lary
DeepSeek Harness (DSH) 的多提供商网页搜索和页面获取插件:AnySearch、Bing、DuckDuckGo、Tavily、Exa
★ 2
↓ 35/wk
MIT
JavaScript
Aug 22, 2026
dsh plugin --profile web add dshsearch-multiby u9521
Custom Web Search plugin for DeepSeek Harness (DSH), replacing web-search-deepseek with multi-engine sequential fallback.
★ 0
MIT
TypeScript
Sep 29, 2026
dsh plugin --profile web add @local/dsh-cust-searchby 131CDA1
用于DeepSeek Harness的网页读取插件
★ 9
↓ 230/wk
MIT
JavaScript
Aug 20, 2026
dsh plugin --profile web add dsh-scrape-webpageby sunx16963-design
A configurable third-party web-search plugin for DSH (DeepSeek Harness)/一个用于DSH(DeepSeek Harness)的可配置第三方网络搜索插件
★ 4
↓ 104/wk
BSD-3-Clause
TypeScript
Sep 27, 2026
dsh plugin --profile web add dsh-web-search-thirdpartyby huangxp12
Keyword search for the DeepSeek Harness Plugins page: filter installed and official plugins by name, description, or package name. · 给 DSH「插件」页加上关键词搜索。
★ 1
MIT
JavaScript
Oct 8, 2026
dsh plugin --profile web add dsh-plugin-search