DeepSeek Harness 插件:dsh-web-search-session-follow

前言

DeepSeek Harness (DSH) 內置的 web_search provider 將端點和憑據寫死爲官方 DeepSeek。如果用戶配置了代理或使用第三方網關(如 OpenRouter、Zhipu AI),搜索功能會出現認證失敗。dsh-web-search-session-follow 是一個 DSH web_search provider 插件,它讀取當前會話路由的模型 provider,使用該 provider 的端點、憑據和協議方言完成搜索,並在未識別時回退至內置官方方案。

核心功能

  • 運行時優先級鏈:每次搜索按優先級列表從上到下嘗試,第一個成功的路由生效。支持特殊鍵 session 跟隨當前會話路由。優先級可在 Web GUI 設置面板中實時調整並持久化。
  • 會話跟隨路由:通過 agents.currentInitiator().session.requestHeader().config 實時讀取當前會話的 {provider, model},不緩存、不猜測。
  • 方言路由表:支持三種協議:
    • anthropic-web-search:Anthropic Messages + server tool web_search_20250305
    • openrouter-online:chat/completions + 服務端 web 插件,解析 url_citation 註釋
    • zai-web-search:智譜 bigmodel Anthropic 兼容端點,web_search_prime 引擎,解析 tool_result 塊的字符串化 JSON 內容
  • 官方方案回退:優先級鏈全部失敗時,回退至內置官方路由(同 @deepseek-ai/dsh-web-search-deepseek 默認值)。可通過 fallback: none 關閉回退。
  • 設置 UI 面板:Web GUI 設置彈窗側欄「Web 搜索」提供優先級排序、回退策略切換、單路由連通性測試(真實發起一次搜索)。
  • 憑據分平面:解析順序爲字面 apiKey → credentials 服務(apiKeyEnv 引用)→ 環境變量。聊天 key 與搜索 key 各管各的。
  • 模型跟隨:路由未指定 model 時,anthropic 和 openrouter 方言使用會話當前模型,zai 方言固定使用路由模型。
  • 調用審計:每次搜索追加一行 JSON 到 <DSH_HOME>/web-search-session-follow/audit.jsonl(包含 provider/endpoint/fallback/失敗跳 attempts 標記,不含密鑰)。

安裝與啓用

前置:已安裝 DeepSeek Harness(developer preview,dsh web 命令可用)。

1、本地安裝插件:

dsh plugin --profile web add /path/to/dsh-web-search-session-follow

2、在 profile 的 cordis.patch.yml 中覆蓋搜索提供者配置:

- id: web
  config:
    searchProvider: session-follow

3、重啓 dsh web 生效。如需回滾,刪除上述覆蓋段即可恢復內置行爲。

配置示例

插件自帶默認路由表,可在 cordis.patch.yml 或安裝副本中調整。

config:
  priority: [zai-coding-cn, openrouter]
  fallback: official
  routes:
    zai-coding-cn:
      protocol: zai-web-search
      baseURL: https://open.bigmodel.cn/api/anthropic/v1
      apiKeyEnv: ZAI_CODING_CN_API_KEY
      model: glm-5.3-flash
    deepseek-official:
      protocol: anthropic-web-search
      baseURL: https://api.deepseek.com/anthropic/v1
      apiKeyEnv: DEEPSEEK_API_KEY
      model: deepseek-v4-flash
    openrouter:
      protocol: openrouter-online
      apiKeyEnv: OPENROUTER_API_KEY
      maxResults: 5

字段說明:
* priority:路由鍵數組,可包含 session。來源優先級:設置 UI 保存的 config.json > 插件 config 種子 > ["session"]。
* protocol:三選一(anthropic-web-search、openrouter-online、zai-web-search)。
* baseURL:anthropic/zai 方言自動追加 /messages,openrouter 方言追加 /chat/completions。
* apiKeyEnv / apiKey:憑據引用名 / 字面密鑰(字面優先)。
* model:缺省跟隨會話模型(zai 方言固定兜底 glm-5.3-flash)。

適用場景與注意事項

  • 適用場景:使用自定義網關(如 OpenRouter、Zhipu AI)或代理的用戶。插件允許按 provider 切換搜索端點和憑據。
  • 會話日誌安全:本插件絕不向會話日誌寫自定義事件類型。如果日誌被污染(例如 v0.1.0 版本曾寫入 web/session-follow-search-request 事件),會話可能無法從磁盤重開。修復方法:給對應事件行補 "ignorable":true,或等待上游提供 ignorable 機制。
  • 成本:三種方言均計費爲一次完整模型調用。
  • 依賴:零運行時依賴。

結尾

該插件通過將搜索邏輯與會話路由解耦,解決了多網關環境下搜索功能不可用的問題。其可視化的設置面板和回退機制降低了配置門檻。更多細節可查閱插件目錄或源碼倉庫。

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

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

小夜