dsh-web-search-brave:在 DSH 官方 ctx.web 接縫上接入 Brave 網頁搜索

前言

DeepSeek Harness(dsh)裏,模型可以通過內置的 web_search 工具查網頁,而不必把「上網」塞進模型上下文裏額外燒 token。前提是 profile 裏要有一個在 ctx.web 上註冊好的 search provider。

dsh 0.2.1 前後插件接口有過變動:不少社區裏的 Brave provider 會從 @deepseek-ai/dsh-settings 等宿主包 import 運行時符號,宿主移除導出後模塊加載失敗,表現就是插件「裝了但搜索沒用」。下面介紹維護者 thomasly 的 dsh-web-search-brave:單文件、零依賴,走官方 ctx.web 接縫,provider id 爲 brave-search,複用你在憑據庫裏已有的 Brave API key。

這是什麼

dsh-web-search-brave(GitHub:thomasly/dsh-web-search-brave)把 Brave Search API 接進 dsh 的網頁搜索能力。它註冊在 dsh 官方 ctx.web 搜索接縫上,因此所有模型都能通過 dsh 自帶的 web_search 搜索,不綁定某一模型,也不靠模型自己「上網」。

  • 直連 Brave 官方接口,不經過 LLM,不產生模型側搜索費用。
  • 複用 ~/.dsh/.credentials.yaml 裏配置好的 Brave key,不在對話或日誌裏明文暴露。
  • 單文件、零依賴、零 import 宿主包,降低因宿主接口變動或本地 link: 安裝路徑導致的加載失敗。
  • 結果帶發佈日期(publishedAt,來自 Brave 的 page_age),對時效性查詢更有用。

適用版本:dsh 0.2.x(README 寫明在 0.2.1-rc.2 上實測通過)。運行環境:Node.js ≥ 22.19(見 package.json 的 engines)。插件版本 1.0.0,許可證 MIT。

核心功能

與 dsh 的銜接方式

插件在 ctx.web 上註冊 id 爲 brave-search 的 search provider。profile 裏把 web.searchProvider 設爲 brave-search 後,模型調用 web_search 時會走 Brave 的 Web Search 端點(默認 https://api.search.brave.com/res/v1/web/search)。

實現上不寫任何 import:只用運行時自帶的 fetch、URL,以及 ctx.web、ctx.credentials、ctx.launchEnvironment。配置與 key 在每次搜索時重新讀取,改憑據庫或環境變量後不必重啓 dsh 即可生效(bundle 仍須在安裝後重啓 web 進程纔會掛載)。

返回給模型的字段

web_search 需要 { url, title?, snippet?, publishedAt? }。插件從 Brave 響應映射如下(摘要):

字段 來源 說明
url web.results[].url 空值丟棄,按 url 去重
title title 去 HTML 標籤、解實體、壓縮空白
snippet description + extra_snippets 最多再併入 3 條額外摘要,壓到 1000 字以內
publishedAt page_age 僅當格式像日期才透傳,不補時區

可選配置項

bundle 在 cordis.patch.yml 中插入 web-search-brave-local 行;其下 config 全部可選,常見字段包括:

字段 默認值 說明
providerId brave-search 須與 searchProvider 一致
apiKeyEnv BRAVE_API_KEY 憑據庫引用名 / 環境變量名
count 10 單次條數,Brave 上限 20
safesearch moderate off / moderate / strict
minIntervalMs 1100 兩次請求最小間隔(免費檔約 1 次/秒)
timeoutMs 20000 單次請求超時(毫秒)
freshness 空 provider 級時效過濾,如 pw 或日期區間

freshness 是整個 provider 級設置,不是每個 query 單獨設置;dsh 的 web_search 入參只有 queries,若希望默認只看最近一週,可在 profile 裏配 freshness: pw。

API Key 解析順序

按順序找到即用:

  1. 行配置裏的字面量 apiKey(不推薦,會進配置文件);
  2. 憑據庫 refs.<apiKeyEnv>(默認 refs.BRAVE_API_KEY);
  3. dsh 啓動環境快照中的 BRAVE_API_KEY(含 ~/.env);
  4. 當前進程環境變量 BRAVE_API_KEY。

手工寫入憑據庫示例:

refs:
  BRAVE_API_KEY: your-key-here

錯誤與限速

錯誤對象沿用接縫的 WebError 形狀(如 WEB_PROVIDER_CREDENTIAL_MISSING、WEB_PROVIDER_RATE_LIMITED、WEB_PROVIDER_TIMEOUT 等)。收到 429 且 Retry-After 不超過 5 秒時會自動等一次再重試;插件默認串行節流,web_search 一次最多 4 個 query 會串行發送。

安裝與啓用

從 GitHub 安裝(推薦)

dsh plugin --profile web add github:thomasly/dsh-web-search-brave

裝完後重啓一次 dsh web(bundle 類插件需要重啓纔會掛載)。也可在 Web 界面 插件 → 安裝 中填寫同一 GitHub 地址。

選中 provider

在 ~/.dsh/profiles/web/cordis.patch.yml 中增加或合併:

- id: web
  config:
    searchProvider: brave-search
    fetchProvider: http

fetchProvider: http 表示 web_fetch 繼續走 dsh 內置本地 HTTP 抓取,不額外爲抓取選付費 provider。

確認是否生效

重啓後問一句帶時效的問題(例如 README 中的 latest AI model release),觀察結果:

  • 日期形如 (2026-11-01T10:55:46)(無 Z、無毫秒)通常表示 Brave 的 page_age 透傳;
  • 若報 configured web provider "brave-search" is not registered,先確認已重啓,再執行:
dsh --profile web --dump-config | grep web-search-brave

應能看到 - id: web-search-brave-local。

本地目錄開發安裝時,README 說明可用 plugin_manager install_bundle 指向目錄絕對路徑,pnpm 以 link: 掛載;該目錄之後不能刪、不能移,否則搜索會失效。本文不展開 clone 流程,生產環境以 GitHub 安裝爲準。

典型用法

安裝並完成 searchProvider: brave-search 後,在 dsh web 對話中正常提問即可觸發 web_search;無需爲每個模型單獨配置搜索能力。

需要調參時,在 cordis.patch.yml 的 web-search-brave-local 插入塊下追加 config,例如:

- insert:
    - id: web-search-brave-local
      name: dsh-web-search-brave
      config:
        providerId: brave-search
        apiKeyEnv: BRAVE_API_KEY
        count: 10
        safesearch: moderate

保存後下一次搜索會讀取新配置(key 仍建議只放在憑據庫或環境變量)。

適用場景與注意

適合誰:已在 Brave Search API 有訂閱、希望在 dsh 0.2.x 裏用統一 web_search、且希望與舊版「import 宿主包」Brave 插件脫鉤的開發者。

分類:社區目錄將其歸爲聯網工具(目錄頁:skillhub.cn/plugins/thomasly/dsh-web-search-brave)。SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,安裝來源以你信任的倉庫與許可證爲準。

安全與權限:插件以當前 dsh 進程權限運行,會向 Brave 官方 API 發起 HTTPS 請求;安裝前請閱讀 倉庫源碼 與 MIT 許可證,自行評估 key 存放方式(優先憑據庫,避免字面量 apiKey 寫進 patch)。

配額:Brave 的速率與月額度由賬戶決定;插件默認保守節流,不改變 Brave 側額度。多 query 串行可能多等數秒。

故障提示:providerId 與 searchProvider 不一致、或多個 search provider 衝突時,可能出現 500 或註冊失敗;只保留一個 searchProvider 並保持 id 對齊。

結尾

dsh-web-search-brave 用零 import 的方式把 Brave Search 掛到官方 ctx.web 上,讓各模型共用 web_search,並複用已有 BRAVE_API_KEY 憑據。經過上面的安裝、啓用與重啓步驟,即可在 profile 裏穩定選中 brave-search。

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

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

小夜