为 DeepSeek Harness 提供有依据的网页搜索,跑在你已经付费的网关上。
31.4/100
综合分
2
GitHub 星标
65
npm 周下载
—/5
用户评分
数据截至 2026/10/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/vitas/dsh-web-search-gateway.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-web-search-gateway @ 1.3.0
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 01:47:49
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 4 处,展示前 4 条)
- 发起网络请求lib/client.js:398
const response = await fetch(CREDENTIAL_ROUTE, { headers: { accept: "application/json" } }); - 发起网络请求lib/client.js:412
const response = await fetch(CREDENTIAL_ROUTE, { - 发起网络请求lib/client.js:474
const response = await fetch(TEST_ROUTE, { - 发起网络请求src/host/provider.js:150
response = await fetch(endpoint, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 提供有据可依的联网搜索
- 与聊天模型共用端点密钥
为 DeepSeek Harness 在任意兼容 OpenRouter 的网关上提供有据可依的联网搜索:内置 web_search 工具与聊天模型共用同一端点和密钥。
README
由 DeepSeek 最新模型翻译生成dsh-web-search-gateway
为 DeepSeek Harness 提供有依据的网页搜索,跑在你已经付费的网关上。
为什么做这个
内置的 web_search 跑在 DeepSeek 自己的端点上,账单记在那个账号上——一次搜索就是完整一轮模型调用,因为 DeepSeek 没有提供专门的搜索端点。如果你的对话跑在更便宜的地方,搜索却不在。
这个插件把搜索调用挪到兼容 OpenRouter 的网关上,于是搜索的账单落在你对话已经在用的地方,按你网关的价格计费,模型也由你挑:
- 你的模型。 搜索模型和对话模型分开配置,便宜的小模型可以原样不动。
- 你的价格。 在 api.b.ai 上:对话用打折的 deepseek-v4.1-flash,搜索用 gpt-5.4-nano——那里真正会搜索的最便宜模型。
- 你的上限。 dsh-tool-web 的 searchMaxQueries(默认 4)能把一次工具调用变成四次搜索。设成 1,成本就是一次搜索。
面向模型的工具没有任何变化:同一个工具、同样的参数、同样可引用的结果。变的只是背后的引擎。
便宜模型通常不会搜索。 在 api.b.ai 上,DeepSeek、GLM、Qwen、MiniMax 和 MiMo 这些模型会接受请求,然后悄悄不搜索——所以在这个网关上,搜索模型必须和你的对话模型不同。
展开完整文档(README 剩余 1 节)
dsh-web-search-gateway
为 DeepSeek Harness 提供有依据的网页搜索,跑在你已经付费的网关上。
为什么做这个
内置的 web_search 跑在 DeepSeek 自己的端点上,账单记在那个账号上——一次搜索就是完整一轮模型调用,因为 DeepSeek 没有提供专门的搜索端点。如果你的对话跑在更便宜的地方,搜索却不在。
这个插件把搜索调用挪到兼容 OpenRouter 的网关上,于是搜索的账单落在你对话已经在用的地方,按你网关的价格计费,模型也由你挑:
- 你的模型。 搜索模型和对话模型分开配置,便宜的小模型可以原样不动。
- 你的价格。 在 api.b.ai 上:对话用打折的 deepseek-v4.1-flash,搜索用 gpt-5.4-nano——那里真正会搜索的最便宜模型。
- 你的上限。 dsh-tool-web 的 searchMaxQueries(默认 4)能把一次工具调用变成四次搜索。设成 1,成本就是一次搜索。
面向模型的工具没有任何变化:同一个工具、同样的参数、同样可引用的结果。变的只是背后的引擎。
便宜模型通常不会搜索。 在 api.b.ai 上,DeepSeek、GLM、Qwen、MiniMax 和 MiMo 这些模型会接受请求,然后悄悄不搜索——所以在这个网关上,搜索模型必须和你的对话模型不同。插件会大声报错,而不是把模型的记忆当成搜索结果返回。见已验证的网关。
Web search 设置卡片,连接测试通过
安装
dsh plugin add dsh-web-search-gateway --profile web
dsh credential set OPENROUTER_API_KEY # or export it before launching dsh
包里带了一个 bundle 补丁,所以第一行就把一切组装好了:它把 web 接缝指向这个服务商,并插入服务商那一行。密钥是每次搜索时解析的(先查 credentials 服务,再查进程环境),所以轮换密钥不需要重启——但补丁和链接的主机条目在启动时读取,所以安装后重启一次 dsh web。
用 GitHub 或本地检出代替 npm
dsh plugin add github:vitas/dsh-web-search-gateway --profile web
git clone https://github.com/vitas/dsh-web-search-gateway.git
cd dsh-web-search-gateway && npm install && npm run build
dsh plugin add link:$PWD --profile web
快速开始
1. 安装,然后重启 dsh web。
2. Settings → Plugins → Web search (OpenRouter)。
3. 设置 Endpoint、Search model,粘贴 API key。
4. Test search —— 你会拿到来源数量、延迟,以及前几条命中结果。
已验证的网关
Web search 是服务端工具:网关必须为你指定的模型实现它,而且它不属于 OpenAI 兼容标准的一部分——兼容的只是消息结构。所以「OpenAI 兼容」这句话并不能说明搜索能不能用,这也是本文每一条结论都靠实测、而不是靠假设的原因。
为什么不直接把内置服务商指向我的网关?
内置的 dsh-web-search-deepseek 服务商兼容 Anthropic,也确实暴露了 baseURL 和 model,所以重新指向它是最先想到的办法。在 api.b.ai 上这行不通:请求会被接受,但搜索从不执行——deepseek-v4.1-flash 凭记忆作答(0 条结果,整个回合 44 个 input token),而 gpt-5.4-nano 拿回来的工具是客户端调用。在那里只有 /v1/responses 配合 OpenAI 原生工具才能搜索,而且只对 OpenAI 系列有效。实测数据见:docs/gateways.md。
api.b.ai(协议 openai)
在 /v1/responses 上配合 tools: [{ type: 'web_search' }] 可用;命中结果以 url_citation 注解的形式返回。按价格从低到高:
| 模型 | 引用数 | 备注 |
| gpt-5.4-nano | 2 | 已验证中最便宜;每次查询约 8.5k input token |
| gpt-5.4-mini | 4 | |
| gpt-5.5-instant | 8 | |
| gpt-5-mini | 4 | input token 数量很大 |
| gpt-6-astra、gpt-6-sol、gpt-5.6-sol、gpt-5.5 | 1–4 | |
不支持——glm-、deepseek-、qwen、minimax-、mimo- 和 gpt-5-nano 全都返回 HTTP 200,但完全没有搜索(它们没实现 OpenAI 的服务端工具,而 tools 里无法识别的条目会被丢弃,而不是被拒绝);Gemini 和 Anthropic 在路由层就被拒,报 not supported on /v1/responses;:online、plugins: [{ id: 'web' }] 和 openrouter:web_search 都是 OpenRouter 的约定,这里不存在。
input token 能区分真搜索和静默空转。 真正跑过的搜索会把结果注入上下文,所以同一个提示词会突然贵出几千个 token:gpt-5.4-nano 是 4313,而 gpt-5-nano 只有 18,非 OpenAI 系列是 24–105。这就是服务商检查 searched、而不是看到 200 就放心的原因。各模型的失败情况和省钱手段见:docs/gateways.md。
openrouter.ai(协议 openrouter)
baseURL: https://openrouter.ai/api/v1,再加上一个带 web-search 徽标的模型。engine、searchContextSize、maxUses、maxTotalResults 和域名过滤条件会作为服务端工具的 parameters 透传。在非 OpenRouter 的网关上,这个协议会被拒绝——那是网关在说话,不是插件。
对 OpenAI 官方(https://api.openai.com/v1)来说,默认协议开箱即用;来源以 web_search_call.action.sources[] 的形式返回,走的是同一段代码路径。
协议
| protocol | 线上格式 | 适用场景 |
| openai (默认)* | tools: [{ type: 'web_search' }] | OpenAI、Azure,以及代理原生工具的聚合服务商(api.b.ai) |
| openrouter | tools: [{ type: 'openrouter:web_search', parameters }] | openrouter.ai,以及采用该服务端工具的网关 |
| plugin (已弃用) | plugins: [{ id: 'web', … }] | 从未采用服务端工具的旧网关 |
服务商还会读取 web_search_call.action.sources[]、
openrouter:web_search.action.sources[] 和 url_citation 注解 ——
网关没有发送摘录时,会从引用片段中切出摘要。
配置项
每个字段都能在卡片里编辑,也能从 composition 条目初始化。卡片的位置取决于你的 harness 版本:DSH 0.1.7 把它放在该行自己的页面上,位于 Plugins 下(侧边栏条目),DSH 0.1.5 放在 Settings → web-search-openrouter 下。编辑结果写入配置档的补丁,0.1.5 上则写入 settings.yaml。覆盖了 composition 条目的值会标记为 overridden,可以在卡片里重置。
| 字段 | 默认值 | 含义 |
| protocol | openai | 启用面(见上表) |
| baseURL | https://openrouter.ai/api/v1 | 网关基址;会追加 /responses |
| model | openai/gpt-5.2 | 在该网关上提供网页搜索的模型 |
| apiKeyEnv | OPENROUTER_API_KEY | 凭据引用,每次搜索时解析 |
| apiKey | — | 字面密钥;优先于 apiKeyEnv(别写进共享配置档) |
| maxResults | 5 | 请求的结果数,1–25;越低越便宜 |
| maxOutputTokens | 1024 | 单轮搜索的 max_output_tokens |
| includeAnswer | false | 同时把搜索模型的文本作为 content 返回 |
| allowedDomains、excludedDomains | — | 只保留或剔除这些主机名的结果 |
| engine、searchContextSize、maxUses、maxTotalResults | — | 仅 openrouter 协议;作为服务端工具参数透传 |
| referer、title | — | HTTP-Referer / X-Title 归属头 |
成本
按搜索模型的 token 计费,不按查询次数。可调的杠杆,从最省钱的开始:挑最便宜的能搜索的模型(而且只用它 —— 对话模型是分开的),把 searchMaxQueries: 1 设上,maxResults 保持低值,includeAnswer 关掉。实测数据:docs/gateways.md。
故障排查
| 现象 | 原因 |
| WEB_PROVIDER_CREDENTIAL_MISSING | apiKeyEnv 下没有密钥;在卡片里设置,或启动 dsh 前导出它。 |
| "the gateway ran no server-side search for model …" | 该模型在那个网关上不提供网页搜索。从上表里挑一个。 |
| "Invalid value: 'openrouter:web_search'" | 网关没有实现 OpenRouter 的服务端工具;把 protocol 换成 openai。 |
| 「节点只允许访问推理 API 路径」 | 网关侧的代理限制;检查 baseURL(多余的尾部斜杠以前会产生 //responses)。 |
| /responses 返回 HTTP 404 | 网关只支持 chat completions;这个服务商需要 Responses 端点。 |
开发
npm install # esbuild + typescript
npm run check # host syntax check + client typecheck
npm test # 35 tests, no network, no credentials (1 skipped: the live one)
npm run check-locales
npm run build # rebuild the committed lib/client.js (also runs on npm pack)
Live smoke test — opt-in, never in CI.
DSH_WEB_SEARCH_LIVE=1 OPENROUTER_API_KEY=sk-... \
DSH_WEB_SEARCH_BASE_URL=https://api.b.ai/v1 DSH_WEB_SEARCH_MODEL=gpt-5.4-nano \
node --test test/live.test.mjs
架构、接缝约定和发布流程见 docs/。三套协议;一张浏览器卡片(English / 中文 / Русский);不引入 @deepseek-ai/* 运行时依赖;没有安装期脚本——打包产物已提交,一旦漂移 CI 就会失败。
隐私
不存储数据,不做后台任务。每次搜索向 baseURL 发一个 HTTPS 请求,带上你的查询、模型名和配置的参数;其余事项由网关自己的条款约束。密钥在调用时从 DSH 凭据存储读取,绝不写入设置、日志或浏览器。
许可证
Apache-2.0。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
vitas/dsh-web-search-gateway
为 DeepSeek Harness 提供有依据的网页搜索,跑在你已经付费的网关上。
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1