前言¶
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,便於模型閱讀與引用。
環境與依賴¶
安裝前請確認:
- DeepSeek Harness
>= 0.2.0-rc.2(提供ctx.web接縫的 provider API)。 - Node.js
>= 22。 - 火山引擎 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,按以下順序解析:
- 配置項
apiKey的字面量; 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 配額的開發者。
務必注意:
- 插件在 當前 dsh 進程權限 下運行;安裝前請自行審閱 源碼與 LICENSE,確認符合你的安全與合規要求。
- API key 與 endpoint 配置錯誤會導致搜索失敗或計費落在錯誤產品線上;Agent Plan key 與 README 中的說明一致時,纔在計劃配額內調用 Doubao Search。
- SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;插件星標以目錄/GitHub 當時顯示爲準(資料中 GitHub 星標爲 0)。
結尾¶
dsh-web-search-doubao 把 Harness 標準 web_search 的後端換成 Doubao Search API,在不動模型側工具的前提下補全 sources[].snippet,並可選通過設置頁的 聯網搜索 管理 key 與搜索參數。需要細節時以倉庫 README(含 中文 README.zh.md)爲準。