前言¶
在 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 /searchREST 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