dsh-web-search-9router:为 DSH 接入 9router 的 web_search 与 web_fetch

前言

DeepSeek Harness(DSH)内置 web_search、web_fetch 工具,实际检索与抓取由 ctx.web 上的 provider 完成。默认的 web-search-deepseek 依赖上游实现 Anthropic 的 web_search_20250305 服务端搜索工具,并返回 web_search_tool_result 块。

9router 是 OpenAI 兼容网关:它把该工具定义以普通 function 形式交给模型,而不是在服务端执行搜索,因此无法单独提供与默认 provider 相同形态的「原生搜索」。若你在 DSH 里把模型路由到 9router,仍希望 Agent 能联网搜索、抓取页面,就需要把 DSH 的 web 能力接到 9router 自带的 /v1/search 与 /v1/web/fetch。

下面介绍社区插件 dsh-web-search-9router(维护者 rebron1900,仓库 rebron1900/dsh-web-search-9router)。它在 DSH 的 web seam 上注册 provider 9router,直接调用上述端点,并把响应映射为 DSH 期望的 WebSource 与 WebFetchBody 类型。

这是什么

dsh-web-search-9router 是面向 DSH >=0.2.0-rc.2 的 ESM 插件(当前发布版本 0.2.4,MIT 许可证)。它不引入额外构建步骤,纯 JavaScript 实现。

数据流可以概括为:

 web_search / web_fetch (DSH 原生工具)
            │
            ▼
        ctx.web seam
            │  provider = "9router"
            ▼
  dsh-web-search-9router
   ├── search  → POST {baseURL}/search      → WebSource[]
   └── fetch   → POST {baseURL}/web/fetch   → WebFetchBody
            │
            ▼
      9router 网关

与默认方案的对比如下(依据仓库 README):

web-search-deepseek(默认) 9router(本插件)
依赖 Anthropic web_search_20250305 服务端工具 任意 9router 兼容网关
与 9router 配合 否 是
搜索 由模型侧工具链路提供 POST /v1/search
抓取 由模型侧工具链路提供 POST /v1/web/fetch

核心功能

搜索 provider

DSH 调用原生 web_search 时,插件向 9router 的 search 端点发起请求,返回经去重处理的 WebSource 列表(含 title、snippet、published date 等字段)。

抓取 provider

web_fetch 经插件转发到 9router 的 web fetch 端点,返回整理后的文本或 markdown 正文(WebFetchBody)。

配置与凭据

插件在 bundle 详情页提供表单:可配置 base URL、搜索/抓取模型名、结果上限、超时等。API Key 通过 DSH credentials 服务写入,默认凭据引用为 NINE_ROUTER_API_KEY;密钥不会写入插件 settings 明文配置。

错误行为

失败以可路由的 WebError 码暴露(如 WEB_PROVIDER_ERROR、WEB_PROVIDER_CREDENTIAL_MISSING、WEB_ABORTED)。fetch 的非 2xx 响应作为结果返回,而不是静默抛错。

环境要求

  • DSH:>=0.2.0-rc.2
  • Node.js:>=20

安装与启用

1、安装插件

在 README 给出的命令中,profile 为 web:

npx @deepseek-ai/dsh plugin --profile web add github:rebron1900/dsh-web-search-9router

若需固定版本,可在 GitHub 源后追加 release 标签,例如:

npx @deepseek-ai/dsh plugin --profile web add github:rebron1900/dsh-web-search-9router#v0.2.4

2、启用 bundle

安装并启用 bundle 后,search 与 fetch 会自动选用 provider 9router。在 Plugins 中关闭整个 bundle 时,会恢复由其余配置层选择的 provider(通常为 deepseek-official 与 http)。

若你曾在 profile、home 配置或 launch 覆盖里显式指定过 web provider,更高优先级的选择仍会生效。要让 bundle 启用主导 provider,需移除旧的 id: web provider 配置覆盖。

3、填写配置

重启 DSH 并刷新浏览器。打开 Plugins,进入 dsh-web-search-9router 的 bundle 详情页完成配置。填写 API Key 时,内容存入 DSH credentials,对应你选择的 credential reference。

配置项说明

Key 类型 默认值 说明
baseURL string 9router 默认端点 9router 兼容 API 的 Base URL;环境变量 NINE_ROUTER_BASE_URL 也可生效
searchModel string search-combo 搜索端点使用的模型名
fetchModel string fetch-combo 抓取端点使用的模型名
searchType string web 传给搜索端点的 search_type
maxResults number 8 单次搜索最多返回条数
timeoutMs number 30000 单次请求超时(毫秒)
API key credential — 只写字段,由 DSH credentials 存储
apiKeyEnv credential-ref NINE_ROUTER_API_KEY 解析 API Key 时使用的凭据引用

典型用法

启用并配置完成后,无需在 Agent 侧单独调用插件 API:DSH 会话里使用内置 web_search、web_fetch 即可,底层由 provider 9router 转发到网关。

开发仓库中,维护者用以下命令跑测试(供二次开发参考,非终端用户必做步骤):

pnpm install
pnpm test

入口与布局见仓库:src/index.js(search + fetch providers)、client.js(bundle 设置表单)、cordis.patch.yml(bundle 注册)。

适用场景与注意

适合谁: 已在 DSH 中使用或计划使用 9router 作为 OpenAI 兼容网关,且希望保留 DSH 原生联网工具语义、又不想依赖 web-search-deepseek 所要求的服务端 Anthropic 搜索工具实现。

分发与版本: GitHub 仓库为唯一分发源;稳定版以 v<version> 形式的 GitHub Releases 发布。插件也收录于社区列表 awesome-dsh-plugin。SkillHub 等目录页为社区索引,与 DeepSeek / 幻方无官方从属关系。

安全: 插件在当前 DSH 进程权限下运行,会向配置的 9router 端点发送搜索与抓取请求。安装前请阅读源码与 MIT 许可证,确认 base URL、凭据引用与网络策略符合你的环境。

结尾

dsh-web-search-9router 把 DSH 的 web_search、web_fetch 接到 9router 的 /v1/search 与 /v1/web/fetch,填补「网关不执行默认 deepseek 搜索工具、但仍需联网」这一组合下的能力缺口。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜