dsh-web-search-doubao:爲 DSH 的 web_search 接入豆包搜索摘要

前言

DeepSeek Harness(DSH)裏,模型常用的 @deepseek-ai/dsh-tool-web 會調用標準 web_search 工具。Harness 自帶的 @deepseek-ai/dsh-web-search-deepseek 走 Anthropic 兼容 Messages API,讓模型去調服務端 web_search;這條路徑能拿到標題和鏈接,但歸一化後的 sources[].snippet 往往是空的,模型缺少可直接引用、可閱讀的摘錄。

若你希望聯網結果裏每條來源都帶正文片段,又不想爲每次搜索多燒一輪模型 token,可以把搜索後端換成火山引擎 Doubao Search API。下面介紹社區插件 dsh-web-search-doubao(維護者 gilsaia,分類:聯網工具)的做法。

這是什麼

dsh-web-search-doubao 是 DSH 的 search provider 插件:註冊 Doubao Search(Volcengine)後端,並通過 Harness 的 ctx.web 能力接縫把搜索提供方指到該後端。對模型側而言,@deepseek-ai/dsh-tool-web 無需改動,變的只是背後的實現。

插件當前版本 0.2.1(見倉庫 package.json),許可證 MIT。社區目錄頁:SkillHub 插件頁;源碼與說明:GitHub 倉庫。

與默認聯網搜索的差異

README 用表格對比了模型側 web_search 工具在本插件接入 Doubao Search API 前後的字段與成本(以下爲資料原文要點,非獨立測評):

能力 默認 DeepSeek 聯網路徑 本插件(Doubao Search API)
sources[].title / .url 有 有
sources[].snippet 恆爲空 每條結果有真實摘錄
sources[].publishedAt 有時爲 1970-01-01 哨兵值 真實日期,並過濾哨兵
單次搜索成本 多一輪模型調用(數千 token) 一次 API 調用,不消耗模型 token
典型延遲 約 6–14 s 約 0.2–0.6 s

Doubao Search 返回結構化結果,含每條結果的 body;插件把它映射到 snippet,便於模型閱讀與引用。

環境與依賴

安裝前請確認:

  1. DeepSeek Harness >= 0.2.0-rc.2(提供 ctx.web 接縫的 provider API)。
  2. Node.js >= 22。
  3. 火山引擎 API Key。文檔說明:Agent Plan 的 key 可用,並消耗計劃內的 AFP 配額;Agent Plan 文檔將 Doubao Search 描述爲該計劃的搜索服務,需用計劃專用 API key。其它火山產品的 key 可能能鑑權,但不在計劃配額範圍內。

默認請求地址爲 https://open.feedcoopapi.com/search_api/web_search(公開 Doubao Search URL),一般無需改 endpoint 即可訪問。

安裝與啓用

在 web profile 下從 GitHub 安裝(命令來自 README,勿自行拼接其它形式):

dsh plugin --profile web add github:gilsaia/dsh-web-search-doubao

若使用本地目錄,則爲:

dsh plugin --profile web add /path/to/dsh-web-search-doubao

包聲明瞭 dsh.bundle.patch,添加插件時會寫入 bundle,並通過 patch 選中該 provider。README 給出的 patch 片段如下(fetchProvider 需一併寫出,因爲 row patch 會替換整行 config,省略會導致 web_fetch 失效):

- insert:
    - id: web-search-doubao
      name: 'dsh-web-search-doubao'

- id: web
  config:
    searchProvider: doubao
    fetchProvider: http

安裝後 重啓 Harness(或 reload profile),再執行搜索。若出現 Issues with peer dependencies found,README 說明這是預期現象:@deepseek-ai/dsh-* 由 Harness 在加載時提供,pnpm 會報缺失 peer,運行時由 Harness 解析。

配置 API Key

插件 必須 提供 key,按以下順序解析:

  1. 配置項 apiKey 的字面量;
  2. apiKeyEnv(默認 ARK_API_KEY)所指的 credential,經 Harness credentials 服務讀取,並回退到啓動環境變量。

無 GUI 時,可導出環境變量後啓動:

export ARK_API_KEY=...        # then start the harness

或在 profile 的 patch 層寫入(密鑰更推薦 apiKeyEnv,避免明文進配置文件):

- id: web-search-doubao
  config:
    apiKey: '...'

若 profile patch 仍是默認的 bare [],應 替換 該 [] 爲你的條目;在其後追加 - id: 會形成兩個 YAML 文檔,Harness 無法解析 overlay。缺少 key 時搜索失敗,錯誤爲 WEB_PROVIDER_CREDENTIAL_MISSING,並指明查閱的 reference,不會靜默返回空結果。

圖形界面配置

插件帶有 client 半:重啓後在 Harness 設置側欄會出現 聯網搜索 (Web search) 頁,可在該頁完成:

  • API Key:密碼框輸入,經 Harness credentials 域寫入表單指定的 reference;明文不進 settings 文件,頁面僅顯示是否已配置。
  • 各配置字段:endpoint、搜索類型、結果數、時間範圍、權威度過濾、查詢改寫、摘要開關等;修改未保存的字段顯示 未保存,用戶層覆蓋的顯示 已覆蓋 並可 恢復默認。
  • 保存 爲一次 revision-fenced 寫入;撤銷 丟棄未保存編輯。

保存後對 下一次搜索 生效,改配置或 key 無需重啓。僅當 host 提供 web-search-doubao settings 命名空間時頁面纔會掛載;未部署該插件的環境不會出現此頁。

可調參數

以下字段在 每次搜索 時讀取,改完即對下次搜索生效(表格來自 README):

字段 類型 默認 含義
apiKey string (secret) — 明文 API key
apiKeyEnv credential ref ARK_API_KEY 每次搜索解析的 credential
baseURL string Doubao Search URL 完整 endpoint,可改代理或區域
searchType web | image web image 返回圖片結果
maxResults 1–50 10 請求未指定上限時的條數
timeRange string — OneDay / OneWeek / OneMonth / OneYear,或 YYYY-MM-DD..YYYY-MM-DD
authLevel 0–2 0 1 限制權威來源(僅 web 搜索)
queryRewrite boolean false 是否將對話式 query 改寫爲搜索式
needSummary boolean true 是否請求作爲 snippet 的摘錄;關閉則 snippet 爲空

環境變量 DOUBAO_SEARCH_BASE_URL 可覆蓋 baseURL。

啓用與禁用

插件 掛載期間 接管接縫上的 provider 選擇,卸載時 交還先前選擇,因此用普通插件開關即可:

  • 啓用:註冊 provider,接縫選擇 doubao,搜索走 Doubao Search。
  • 禁用:註銷 provider 並恢復之前選擇;若無顯式選擇,接縫會自動選剩餘唯一可用 provider(通常是自帶的 DeepSeek 實現)。

bundle patch 故意不包含 - id: web 的 row patch,避免禁用插件後 profile 仍指向已不存在的 provider(會報 WEB_PROVIDER_CONFIGURED_MISSING 且不會回退)。若要在本插件關閉時仍使用 自帶 DeepSeek provider,需單獨配置,例如 README 中的 Anthropic 兼容 endpoint(與 Doubao key 不通用):

- id: web-search-deepseek
  config:
    baseURL: https://ark.cn-beijing.volces.com/api/plan/v1

若在 自己的 patch 層顯式固定 searchProvider: doubao,則禁用本插件且仍指向 doubao 時會報錯,需自行保證指向已註冊的 provider。

驗證

README 提供本地測試命令(節選):

# pure-function and plugin-contract tests: no network
npm test

另有 npm run test:live(node scripts/smoke.mjs)用於 live smoke,需有效 key 與網絡。

適用場景與注意

適合誰:已在 DSH web profile 中使用標準 web_search,需要 帶 snippet 的聯網摘錄、更低延遲、且願意使用火山引擎 Doubao Search / Agent Plan 配額的開發者。

務必注意:

  1. 插件在 當前 dsh 進程權限 下運行;安裝前請自行審閱 源碼與 LICENSE,確認符合你的安全與合規要求。
  2. API key 與 endpoint 配置錯誤會導致搜索失敗或計費落在錯誤產品線上;Agent Plan key 與 README 中的說明一致時,纔在計劃配額內調用 Doubao Search。
  3. SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;插件星標以目錄/GitHub 當時顯示爲準(資料中 GitHub 星標爲 0)。

結尾

dsh-web-search-doubao 把 Harness 標準 web_search 的後端換成 Doubao Search API,在不動模型側工具的前提下補全 sources[].snippet,並可選通過設置頁的 聯網搜索 管理 key 與搜索參數。需要細節時以倉庫 README(含 中文 README.zh.md)爲準。

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

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

小夜