@tonydua/dsh-web-search-exa:DeepSeek Harness 的免密钥 Exa 搜索插件

前言

在 DeepSeek Harness(DSH)里,给 ctx.web 接缝接入 Exa 搜索时,通常需要处理 API key、provider id 和 profile 配置。已有官方包 @deepseek-ai/dsh-web-search-exa 走 Exa REST 搜索路径;如果没有配置 key,这个 provider 会不可用。

@tonydua/dsh-web-search-exa 提供的是同一个接缝下的零配置变体:默认走匿名 MCP,配置 key 后自动切到 Exa REST 搜索。

插件定位

它是 npm 包 @tonydua/dsh-web-search-exa,由 TonyDua 维护,MIT 许可,要求 Node.js >=18

这个包实现 DSH 的 WebSearchProvider,注册到 ctx.web 接缝上。现有的 web_search / web_fetch 工具、prompt sections 和结果卡片保持不变。

核心能力

  • 默认免 key:搜索通过 Exa 托管 MCP 服务 mcp.exa.ai/mcp,不发送凭证。
  • 有 key 自动切换 REST:设置 EXA_API_KEY 后,自动使用 Exa 的 POST /search REST API。
  • 接缝兼容:作为 drop-in provider 接入 dsh ctx.web,不改变现有 web_search / web_fetch 工具行为。
  • 可切换 provider id:通过 providerId 与官方 @deepseek-ai/dsh-web-search-exa 在同一 profile 共存。
  • npm 可用:MIT 许可,ESM,bundled types。

安装与启用

先安装到目标 dsh profile:

dsh plugin --profile web add @tonydua/dsh-web-search-exa

如果没有 API key,官方 DeepSeek 搜索 provider 不可用,DSH seam 会自动选择这个 provider,无需配置 key。

如果已经配置了 Exa API key,需要在 $DSH_HOME/profiles/web/cordis.patch.yml 中显式选择 Exa:

- id: web
  name: '@deepseek-ai/dsh-web'
  config:
    searchProvider: exa

也可以在运行时通过环境变量选择:

DSH_WEB_SEARCH_PROVIDER=exa

如果是本地开发 checkout,可以使用路径安装:

dsh plugin --profile web add ../plugins/dsh-web-search-exa

安装后,现有的 web_search 工具会通过这个 provider 工作,不需要额外修改工具配置。

典型配置

这个 provider 暴露的配置项包括:

providerId
apiKey
apiKeyEnv
apiURL
mcpURL
searchType
numResults
highlightsPerResult

如果只想从环境变量读取 Exa key,可以配置 apiKeyEnv

apiKeyEnv: EXA_API_KEY

如果希望它作为匿名 provider 与官方包共存,需要给它一个不同的 provider id,例如:

providerId: exa-anon

然后在 web seam 中选择这个 id:

searchProvider: exa-anon

也可以运行时选择:

DSH_WEB_SEARCH_PROVIDER=exa-anon

与官方包共存

@tonydua/dsh-web-search-exa@deepseek-ai/dsh-web-search-exa 都默认注册 provider id exa,并使用相同的 cordis plugin name web-search-exa

如果两个包都安装到同一个 profile,且不改动配置,DSH 启动时会以 WEB_DUPLICATE_PROVIDER 报错;这里没有静默覆盖。

共存方式是显式切换:

1、官方 @deepseek-ai/dsh-web-search-exa 继续使用 exa
2、给本插件配置不同的 providerId,例如 exa-anon
3、在 web seam 或 $DSH_WEB_SEARCH_PROVIDER 中选择 exa-anon;如果要使用官方包,则选择 exa

注意事项

匿名 MCP 路径不发送凭证,并受 Exa 的匿名使用速率限制。如果发生 HTTP 429,会以 WEB_PROVIDER_ERROR 暴露,并提示配置 API key;配置 key 后也会自动切到 REST 路径。

DSH 宿主 profile 需要保证 @deepseek-ai/dsh-tools 解析到同一个物理包实例;这个 provider 本身不依赖它。如果宿主 profile 的其他插件以普通嵌套依赖方式引入 @deepseek-ai/dsh-tools,应先修正依赖声明,或让 profile 的包管理器解析共享实例。

该插件会以当前 dsh 进程权限运行。安装前请检查源码、依赖和 MIT 许可证,确认符合你的使用要求。

链接

GitHub 仓库:https://github.com/TonyDua/dsh-web-search-exa

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

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

小夜