前言¶
在 DeepSeek Harness(DSH)裏做需要聯網的智能體,通常會掛一個網頁搜索 provider。官方 dsh-web-search-deepseek 走 api.deepseek.com/anthropic/v1,能搜,但 result.content 實測摘要覆蓋率爲 0%,也沒有查詢緩存和 Go 端點失敗後的回退。社區裏曾有人 fork 出 dsh-web-search-opencode-go,把請求改到 OpenCode Go;在 DSH 0.1.7-rc.2 上,它還會因靜態 import 了不存在的 installSettingsSection 而加載即崩,或靠 profile 裏指向舊版 dsh 的 symlink 僥倖跑起來。
dsh-web-search-ocgo 由 jitang-open 維護,從零重寫並保持對外行爲兼容:走 OpenCode Go(自動注入 x-opencode-session),補上失敗回退官方端點、查詢緩存、result.content 總結與自帶設置頁。下面介紹它是什麼、能做什麼,以及如何掛進 web profile。
這是什麼¶
- 倉庫:jitang-open/dsh-web-search-ocgo
- 分類:聯網工具(SkillHub 目錄:dsh-web-search-ocgo)
- 定位:DSH 網頁搜索 provider,
provider id爲opencode-go,loader entry id爲web-search-ocgo - 依賴面:只 import
@deepseek-ai/schemastery一個外部包;其餘通過ctx.get()取服務,避免插件目錄解析不到@deepseek-ai/dsh-*的版本錯配
與官方 dsh-web-search-deepseek 相比,端點改爲 https://opencode.ai/zen/go/v1,模型只認 deepseek-v4-flash / deepseek-v4.1-flash;並自動注入 x-opencode-session 與 x-opencode-client。
核心功能¶
端點與會話頭¶
默認 baseURL 爲 https://opencode.ai/zen/go/v1(不含 /messages),默認模型 deepseek-v4.1-flash。憑據通過配置項 apiKeyEnv(默認 OPENCODE_API_KEY)從 DSH 憑據中心讀取。
result.content 與結果質量¶
官方 provider 不填 result.content;本插件從響應 text 塊取模型總結寫入 result.content,默認截斷 2000 字符(answerMaxChars,設爲 0 則不返回)。單條摘要默認截斷 300 字符(snippetMaxChars)。page_age 會規範成 ISO-8601;解析失敗則丟棄,不塞假日期。
查詢緩存¶
默認開啓:TTL 5 分鐘(cacheTtlMs: 300000),LRU 最多 50 條(cacheMaxEntries: 50)。命中緩存時 token 消耗爲 0。README 中 32 次請求實測表明,下調 maxUses 對總 prompt 和結果條數幾乎無影響(每次實際只發起 1 次 web_search),省額度應靠緩存而非改 maxUses(默認仍爲 5)。
失敗回退與重試¶
Go 端點重試耗盡後,可回退到官方端點(fallbackEnabled 默認 true,回退模型默認 deepseek-flash,會消耗 DeepSeek 餘額)。對 429、5xx 和網絡錯誤有退避重試(retryCount 默認 1)。
設置頁¶
Web profile:「設置 → 插件」→ dsh-web-search-ocgo,改動在失焦或回車時寫入 profile 的 cordis.patch.yml。dsh-tui 下會註冊 TUI 設置區塊(約 19 個字段、7 個分組)。響應統計走 logger.info,不寫自定義會話事件,避免歷史日誌因未知事件類型無法加載。
診斷與開發腳本¶
倉庫提供 node scripts/check.mjs、node --test test/*.test.js、node bin/doctor.mjs(可 --probe 真發搜索)、以及 bench 腳本;當前 package 版本爲 0.2.0,許可證 MIT,Node 要求 ^22.19.0 || >=24.0.0。
安裝與啓用¶
README 未提供 dsh plugin add 一類命令,需在本地 clone 或下載源碼後,用符號鏈接掛進 profile。以下步驟摘自倉庫說明(路徑請按本機實際目錄替換 README 中的示例)。
1. 準備 schemastery 鏈接¶
讓插件目錄能解析唯一外部依賴:
ln -sfn ~/.dsh/profiles/web/node_modules/@deepseek-ai/schemastery \
node_modules/@deepseek-ai/schemastery
在插件源碼根目錄執行;node_modules/@deepseek-ai 不存在時需先創建。
2. 掛進 web profile¶
ln -sfn "$PWD" ~/.dsh/profiles/web/node_modules/dsh-web-search-ocgo
3. 登記 bundle¶
編輯 ~/.dsh/profiles/web/package.json:在 dsh.profile.bundles 中加入 dsh-web-search-ocgo,並在 dependencies 中加入指向本機絕對路徑的 link,例如:
"dsh-web-search-ocgo": "link:/你的路徑/dsh-web-search-ocgo"
4. 清理舊 fork(若曾用過)¶
從 ~/.dsh/profiles/web/cordis.patch.yml 刪除舊的 web-search-opencode-go 段,並從 dsh.profile.bundles 移除 dsh-web-search-opencode-go。
5. 重啓並驗證¶
dsh web
日誌中應出現類似:
[web-search-ocgo] 已裝載 provider id=opencode-go endpoint=https://opencode.ai/zen/go/v1 model=deepseek-v4.1-flash fallback=deepseek-flash
進一步檢查:
dsh --profile web --dump-config | grep -A5 "id: web$" # searchProvider 應爲 opencode-go
node scripts/check.mjs
node --test test/*.test.js
node bin/doctor.mjs
典型配置¶
圖形界面¶
Web:「設置 → 插件」→ dsh-web-search-ocgo。TUI:在 /settings 中找 web-search-ocgo 分組(端點與模型、憑據、OpenCode Go 會話頭、失敗回退、查詢緩存、結果質量、可靠性)。
YAML 片段¶
可在 ~/.dsh/profiles/web/cordis.patch.yml 中覆蓋默認值,例如:
- id: web-search-ocgo
name: dsh-web-search-ocgo
config:
apiKeyEnv: OPENCODE_API_KEY
baseURL: https://opencode.ai/zen/go/v1
model: deepseek-v4.1-flash
fallbackEnabled: true
cacheTtlMs: 300000
answerMaxChars: 2000
常用字段:sessionId(空則每次啓動隨機)、fallbackModel(默認 deepseek-flash)、cacheEnabled / cacheMaxEntries、retryCount。
適用場景與注意¶
適合誰:已在用或計劃用 OpenCode Go 做網頁搜索、需要 result.content 摘要、希望 Go 掛了還能回退官方端點、並想用緩存降重複查詢成本的用戶。
臨時回滾:在「設置 → 插件」把 web 的 searchProvider 改回 deepseek-official 並重啓,無需卸載本插件。
安全與權限:插件在 DSH 進程權限下運行,會讀憑據、發外網請求。安裝前應閱讀 GitHub 源碼 與 MIT 許可證,確認 apiKeyEnv 與端點配置符合你的合規要求。SkillHub 爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。
完全卸載:從 package.json 的 bundles 與 dependencies 移除、刪除 cordis.patch.yml 中 web-search-ocgo 段並將 searchProvider 改回官方、刪除 node_modules 下的 symlink,再重啓 dsh web。
結尾¶
dsh-web-search-ocgo 把 DSH 網頁搜索接到 OpenCode Go,並在官方能力之外補上摘要、緩存、回退與雙端設置頁,同時把依賴壓到 schemastery,減輕 dsh 升級時的加載風險。目錄頁:SkillHub;源碼與完整說明:GitHub README。