dsh-exa:用 Exa 接管 DSH 的 web_search 與 web_fetch

前言

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。

典型用法

  1. 零配置試用:不填 API Key,依賴託管 MCP 完成 web_search、web_fetch、exa_code_context 等無需 key 的能力。
  2. 全能力:在配置頁或憑證庫寫入 EXA_API_KEY,即可使用 exa_answer、exa_research、exa_similar 等。
  3. 控 token:默認不暴露三個大 schema 工具;需要時再 exa_tools({ enable: ["search"] }),或在配置頁預先打開對應開關。
  4. 開發自測(維護者腳本,需網絡時用於 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。

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

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

小夜