前言¶
DeepSeek Harness(DSH)里,智能体常用的联网入口是内置的 web_search 和 web_fetch。若你希望搜索与抓取统一走 Exa,并在同一套插件里按需打开 Exa 的深调研、带引用答案、代码上下文等能力,就需要把 web 层 provider 换成 Exa,而不是在对话里临时拼多个外部脚本。
下面介绍社区插件 dsh-exa(维护者 GoldenLoaf24h,GitHub:GoldenLoaf24h/dsh-exa)。它在 DSH 0.2.x 上把网络检索整体接到 Exa:内置的 web_search、web_fetch 由 Exa 提供,并额外暴露若干 exa_* 工具;分类上属于「联网工具」。目录页:skillhub.cn/plugins/GoldenLoaf24h/dsh-exa(社区站点,与 DeepSeek / 幻方无官方从属关系)。
这是什么¶
dsh-exa(当前 package 版本 0.1.0,MIT 许可证)的定位是:Exa web search and fetch for DeepSeek Harness —— 替换内置 web_search / web_fetch,并暴露 Exa 的高级检索能力。
两种接入方式在 README 里写得很清楚:
- 配置了
EXA_API_KEY时走 Exa REST API(https://api.exa.ai),全部能力可用。 - 没有 key 时自动退到 Exa 托管 MCP(
https://mcp.exa.ai/mcp),搜索、抓取、代码检索仍可用,无需额外配置;需要 key 的能力(如exa_answer、exa_similar、exa_research、深度检索、结构化输出)会给出明确提示,而不是静默降级。
核心功能¶
接管 web_search / web_fetch¶
插件自带的 cordis.patch.yml 声明:
- id: web
config:
searchProvider: exa
fetchProvider: exa
profile 自己的 patch 层在 bundle 层之后应用。若 profile 的 cordis.patch.yml 里也有 - id: web,会覆盖插件设置。要真正接管,需要把 profile 里对应段改成与 README 一致,例如:
- id: web
name: "@deepseek-ai/dsh-web"
config:
searchProvider: exa
fetchProvider: exa
工具一览¶
除常驻的 web_search、web_fetch 外,插件还注册 Exa 相关工具。README 中的默认与 token 成本如下(启动成本约 900 token):
| 工具 | 作用 | 默认 | 需要 key |
|---|---|---|---|
web_search |
内置搜索,Exa 接管 | 常驻 | 否 |
web_fetch |
内置抓取,Exa 接管 | 常驻 | 否 |
exa_research |
多来源深调研,可轮询 | 开 | 是 |
exa_answer |
带引用的综合答案 | 开 | 是 |
exa_code_context |
库与 API 的代码示例 | 开 | 否 |
exa_tools |
按需开启 exa_search / exa_contents / exa_similar |
常驻 | 否 |
exa_search |
完整搜索参数(类型、分类、域名、日期等) | 关 | 部分 |
exa_contents |
按 URL 批量取正文、摘要、高亮 | 关 | 部分 |
exa_similar |
找相似页面 | 关 | 是 |
三个 schema 较大的工具(exa_search、exa_contents、exa_similar,合计 3200+ token)默认不注册;需要域名/日期筛选或批量正文时,可由模型调用 exa_tools({ enable: ["search"] }) 等按需开启,开启后会保持到会话结束。不需要深调研时,也可用 exa_tools 的 disable 收起 research 等以节省 token。
配置页(热生效)¶
路径:设置 → 插件 → dsh-exa。保存后下一次请求即用新值,无需重启 DSH。
- API Key:写入 DSH 凭证库(
EXA_API_KEY),不写入普通配置文件;留空表示沿用已保存的 key。 - 搜索 / 抓取默认值:影响
web_search、web_fetch的默认行为;模型仍可通过exa_search等逐次覆盖。 - 工具开关:控制各
exa_*是否「启动即暴露」;改开关会清掉模型在本轮自行开/关的状态。 - 连接:REST 地址、MCP 地址、单次请求超时。
API key 解析顺序(先命中者生效):配置里的 apiKey(字面量,不推荐)→ 凭证库 EXA_API_KEY → 环境变量 EXA_API_KEY(含 $DSH_HOME/.env、项目 .env 等)。
安装与启用¶
README 给出的安装示例为本地路径(开发/自托管场景):
dsh plugin --profile desktop add D:/workspace/dsh-exa/dsh-exa
安装后在插件页面启用 dsh-exa。若 profile 的 cordis.patch.yml 里写死了别的 search provider,需按上一节改为 exa。
运行环境要求(来自 package.json):dsh 版本 >=0.2.0 <0.3.0。
典型用法¶
- 零配置试用:不填 API Key,依赖托管 MCP 完成
web_search、web_fetch、exa_code_context等无需 key 的能力。 - 全能力:在配置页或凭证库写入
EXA_API_KEY,即可使用exa_answer、exa_research、exa_similar等。 - 控 token:默认不暴露三个大 schema 工具;需要时再
exa_tools({ enable: ["search"] }),或在配置页预先打开对应开关。 - 开发自测(维护者脚本,需网络时用于 live 测试):
node test/offline.mjs # 配置、工具 schema、keyless 参数转换、页面解析
node test/client.mjs # 配置页挂载、快照、暂存与保存
node test/live.mjs # 真实调用 Exa(需要网络)
适用场景与注意¶
适合谁:已在 DSH 0.2.x 上跑智能体、希望统一用 Exa 做联网检索与抓取,并偶尔需要 Exa 的调研/答案/代码上下文能力的开发者。
权限与安全:插件以当前 DSH 进程权限运行;安装前应阅读 仓库源码 与 MIT 许可证,自行判断是否接入生产环境。
已知边界(README):
- Exa 不返回目标页 HTTP 状态码;抓取成功统一记为
200,失败抛出带原因的WebError。 - 无 key 时托管 MCP 有并发与频率限制,插件内做了串行化与退避重试。
- 无 key 时无法使用
outputSchema、contents.extras、type: deep等仅 REST 支持的参数,会明确报错。
结尾¶
dsh-exa 把 DSH 的联网层换成 Exa,并在同一插件里分层暴露工具:日常用 web_search / web_fetch 即可,复杂检索再通过 exa_tools 或配置页打开大 schema 工具。无 key 可先用 MCP 路径验证流程,需要深调研与结构化能力再配置 EXA_API_KEY。