为内置 web_search 工具提供 Bing 搜索源:优先解析 Bing 的 RSS 输出,以 cn.bing.com 公开 HTML 结果页作为兜底,无需 API Key,国内可直连,搜索不再消耗模型自带的搜索额度。端点、结果数量与结果语言可配置;适配 DSH 0.2.x(0.1.7+ 亦可用)。
安装
# npm 包(预构建)
dsh plugin --profile web add @godchen520/dsh-web-search-bing
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:godchen520/dsh-web-search-bing
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。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
面向 DeepSeek Harness (DSH) 的免费 Bing 搜索 provider。无需 API Key,不消耗模型额度。
特点
- 完全免费:走 Bing 公共 HTML 搜索页面,无需 API Key、无需注册
- 国内可达:默认
cn.bing.com,中国大陆可直连(DuckDuckGo 在此不可达) - 零配额消耗:不消耗 DeepSeek 或任何 LLM 的搜索配额
- 可配置:搜索端点、中英文结果、单页结果数,且设置热生效(改完不用重载插件)
- 适配 DSH 0.2.x:使用新版 schema 驱动的设置模型(导出
Config,由 host 自动生成设置表单)
与内置 DeepSeek 搜索的区别
内置 dsh-web-search-deepseek(deepseek-official) |
本插件(bing-free) |
|
|---|---|---|
| 原理 | 调 DeepSeek Messages API + 原生 web_search 工具,每次搜索是一次 LLM 请求 |
GET cn.bing.com/search,解析 HTML |
| 凭证 | 需 API Key | 零凭证 |
| 配额 | 消耗 DeepSeek 模型额度 | 不消耗任何额度 |
| 设置项 | key / endpoint / model / maxTokens / maxUses | endpoint / maxResults / ensearch |
内置的是「用模型额度换高质量检索」,本插件是「用网页抓取换零成本」。两者可共存,通过 web.searchProvider 选择。
安装
# 1. 从 npm 安装(推荐)
cd $DSH_HOME/profiles/web
pnpm add @godchen520/dsh-web-search-bing
# 也可以从 GitHub 安装(跟随最新提交):
# pnpm add github:godchen520/dsh-web-search-bing
# 2. package.json 的 dependencies 会自动出现:
# "@godchen520/dsh-web-search-bing": "^1.2.2"
# 3. package.json 的 dsh.profile.bundles 里加上 "@godchen520/dsh-web-search-bing"
# 4. 重启
dsh web
注意:只加进
dependencies而不加进dsh.profile.bundles的话,插件的cordis.patch.yml不会被应用——插件是「装了但没启用」,搜索仍走内置 provider。
配置
设置项由 host 从插件导出的 Config schema 自动生成,出现在 设置 → Plugins 页面
(注意:专属的「网页搜索」设置页是内置 DeepSeek provider 的,本插件不在那里)。
四个字段都是 .volatile(),保存后下一次搜索即时生效:
| 参数 | 默认值 | 说明 |
|---|---|---|
endpoint |
https://cn.bing.com/search |
搜索端点(可换镜像/代理) |
maxResults |
10 |
单页解析结果上限(seam 还会按 searchMaxResults 再截断) |
ensearch |
0 |
0=中文结果,1=英文 |
preferRss |
true |
优先走 RSS;设 false 强制走 HTML 抓取 |
工作原理
双通道:RSS 优先,HTML 兜底。
web_search 工具 → ctx.web.search() → bing-free provider
│
├─ 1) GET cn.bing.com/search?q=...&ensearch=0&format=rss ← 默认主路径
│ 结构化 XML:<title> / <link> / <description> / <pubDate>
│ 有 <item> → 直接映射(含 publishedAt),完成
│ 无 <item> / 非 feed / 请求失败 ↓
│
└─ 2) GET cn.bing.com/search?q=...&ensearch=0 ← 兜底
解析 <li class="b_algo"> → {url, title, snippet}
| RSS 通道(主) | HTML 通道(兜底) | |
|---|---|---|
| 体积 | ~4 KB | ~100 KB |
| 摘要 | 完整段落 | 被 lineclamp 截断 + 需清 UI 尾巴 |
publishedAt |
✅ 有(<pubDate>) |
❌ 无 |
| 抗变化 | 标准 RSS 字段 | 依赖 b_algo / b_lineclamp* class 名 |
| 相关性 | — 两者完全相同(同一批结果、同一顺序) | — |
其他行为:
- 带浏览器 UA(Bing 会拒绝裸 Node/undici agent)。
- 命中 captcha/风控页时抛结构化
WEB_PROVIDER_ERROR,不会伪装成「无结果」。 - 支持
AbortSignal取消,且取消不会被兜底吞掉。 &count=对两种通道都无效,Bing 每页固定约 10 条。
兼容性
| DSH 版本 | 状态 |
|---|---|
| 0.2.x(如 0.2.0-rc.2) | ✅ 支持(当前版本) |
| 0.1.7 ~ 0.1.x | ✅ 支持(readField 同时兼容 .get() 访问器与纯值) |
| ≤ 0.1.6 | ❌ 不支持(那时用 installSettingsSection 手写注册,API 已移除) |
本插件只 import 两个包:@deepseek-ai/schemastery、@deepseek-ai/dsh-web。
不再依赖 @deepseek-ai/dsh-settings(新版已移除 settingsNamespace / installSettingsSection)。
测试
npm install # 首次:安装官方包(测试需要 import 真实的 lib/index.js)
npm test # 离线测试:40 + 41 项,确定性,可进 CI
npm run test:live # 额外真实请求 cn.bing.com(+7 项,需要网络)
| 文件 | 内容 |
|---|---|
tests/parse.smoke.test.cjs |
40 项纯解析:HTML 解析 / 命名实体 / UI 尾巴清理 / RSS feed / 本地化 pubDate。自包含,不依赖官方包 |
tests/e2e.provider.test.mjs |
41 项端到端:直接 import 真实的 BingFreeSearchProvider(不复制逻辑),用桩 fetch 驱动两种传输 |
端到端覆盖的关键行为:
- RSS 优先:默认只发一次请求且带
format=rss;publishedAt正确映射(含中文pubDate) - HTML 兜底:
preferRss: false时强制走 HTML,且不请求 RSS - 回退触发:RSS 返回非 feed、返回 HTTP 500 —— 都要回退到 HTML
- 取消不被吞:
AbortSignal取消后抛WEB_ABORTED,不继续回退 - 空 query / captcha 页:抛结构化
WEB_PROVIDER_ERROR,不伪装成「无结果」 maxResults截断
License
MIT
链接
同类插件
Tencent/BrowserSkill#dsh-plugin-browserskill★ 9697
BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
omdsh-dev/dsh-browser#packages/browser/bridge-browser★ 924
Chrome 侧边栏扩展,让 DSH 直接操控你的浏览器,无需视觉能力。
liustack/modsearch★ 857
纯文本 agent 的联网搜索桥:搜索网页与 X,返回结构化 JSON 证据(search/fetch/引用)。
DDDMUC/dsh-free-search★ 673
DSH 免费搜索插件:7 个引擎(DuckDuckGo/Bing/SearXNG 免费 + Exa/Perplexity/DeepSeek 付费)、自动回退、设置页 UI(API key 输入 + 官网链接)、web_fetch、引擎测试工具。
wqty123/dsh-browser★ 149
共享真实浏览器:用户可观看并随时接管的原生 Electron 窗口,agent 通过 CDP 驱动,内置 20 个 browser_* 工具(打开/快照/执行/填表/截图/下载/登录态);任务级会话隔离、登录态持久化、人机验证识别,纯 `dsh web` 无需桌面外壳即可自托管。
Tabbit-Browser/dsh-tabbit★ 116
让 DeepSeek Harness 能够控制 Tabbit 浏览器:安装即自动加载 tabbit-browser skill,检测国际版 Tabbit 与国内版 Tabbit Browser 正式版(>= 1.9.0),检查 tabbit-cli 常驻运行时,按平台诊断调用 CLI 所需的 DSH sandbox 模式,并在没有合格版本时通过后台任务下载与系统地区匹配的正式版安装包。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。