dsh-fetch-search:安全網頁抓取與自建搜索

前言

在 DeepSeek Harness(DSH)裏,模型需要聯網時通常走官方 web_search,摘要往往不夠回答細節問題;若本機直接 fetch 目標 URL,又會把 SSRF 風險留在 harness 進程裏。按次計費的搜索通道在長時間開發會話裏也不便宜。下面介紹的插件把抓取委託給用戶自選的第三方或自建服務,本機不直連任意 URL;從 2.0 起還可把搜索後端換成自建的 SearXNG,模型側仍用原來的 web_search 與 web_fetch_url。

這是什麼

dsh-fetch-search 由 tallahandsome-ux 維護,在 SkillHub 分類爲 admin-security,當前倉庫版本 2.1.0(MIT)。它向 DSH 官方的 ctx.web 插槽註冊兩類能力:安全的網頁抓取(Tavily / Jina Reader / Firecrawl / 契約 v1 自定義服務)與 自建搜索(SearXNG,需單獨開啓)。簡介強調:API key 只進託管憑據庫、會話級抓取預算、可選自動管理的本地 Crawl4AI 棧,本機零出站到模型指定的目標 URL。

核心功能

安全抓取(快遞員模式)

模型先通過 web_search 拿摘要;不夠時會自主調用 web_fetch_url({ url })。實際 HTTP 由你配置的服務商完成,DSH 主機不直接訪問目標網址,從架構上收窄 SSRF 面。轉發前默認拒絕內網/保留地址目標(縱深防禦);主服務商失敗時可沿有序回退鏈降級,並帶配額與失敗冷卻。

憑據與會話預算

API key 僅寫入 DSH 託管保險箱(~/.dsh/.credentials.yaml,0600),GUI 只顯示「已配置/未配置」,不回顯明文。默認每會話最多 10 次抓取,超限拒絕並提示。同一 URL 在緩存有效期內重複抓取走內存緩存,不消耗第三方額度與會話預算(默認緩存開啓,TTL 600 秒)。

多服務商與結構化結果

支持 Tavily、Jina Reader(可匿名)、Firecrawl 及自定義契約 v1 服務;可配置本地 HTTP 代理(如 http://127.0.0.1:27822)應對網絡阻斷。web_fetch_url 除正文外返回標題、標題大綱、鏈接、字數、預計閱讀時長等字段,便於模型引用。

自建 SearXNG 搜索(2.0 起)

開啓 searchEnabled 後,插件以 third-party 註冊搜索 provider,替代按次計費的官方聯網搜索;搜索不佔用 maxFetchesPerSession。需在 profile 的 web 行將 searchProvider 設爲 third-party(整行 patch,需保留 fetchProvider)。遠程實例可配 searchBaseURL 與鑑權頭組合;本地 Docker 默認可匿名。搜索請求超時默認 20s;403/429 等錯誤在 README 中有對應診斷說明。SearXNG 側前置條件見倉庫 docs/search-searxng.md。

Crawl4AI 與自動棧

商業服務不可用時,可將 Crawl4AI 作爲自定義服務商(內置 crawl4ai 適配器,直連 /md 協議)。當默認或兜底爲 loopback 上的自定義服務時,插件可自動拉起容器與包裝進程並 watchdog 自愈(資料中的「自建 Crawl4AI 棧自動管理」)。

安裝與啓用

環境:已安裝 DeepSeek Harness 與 pnpm。本插件 v1.1.0 起要求 dsh ≥ 0.2.0-rc.0 且 < 0.2.2(README 已實測多個 0.2.x 版本);更舊的 dsh 0.1.x 應使用插件 v1.0.0。

推薦安裝(來自 README 原文):

dsh plugin --profile web add https://github.com/tallahandsome-ux/dsh-fetch-search.git

pnpm v11 首次安裝若報 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED,需按報錯提示在 web profile 的 pnpm-workspace.yaml 裏放行對應 git 依賴的 build,再重試。

安裝完成後重啓 dsh web;在「插件」面板 → 已安裝插件中出現「網頁抓取與搜索」即成功。配置入口:設置 → 網頁抓取與搜索(settings.section 插槽,字段 volatile 熱生效),或插件詳情頁同一張卡片。

DSH Desktop:desktop profile 不由 CLI 管理,應在桌面應用內通過本地路徑(file:...)安裝;勿對 desktop profile 執行 dsh plugin --profile desktop。

典型用法

驗證抓取鏈路

  1. 重啓 dsh web,瀏覽器 Ctrl+F5 強刷。
  2. 打開 網頁抓取與搜索,選擇服務商(如 Jina Reader),點「測試連接」應成功。
  3. 新建會話,模型即可通過 web_fetch_url 抓取全文。

配置要點(卡片)

  1. 服務商下拉與 API Key(Tavily/Firecrawl 建議配置;Jina 可留空)。
  2. 每會話抓取上限(默認 10)、本地代理、抓取緩存、單次內容上限(默認 100000 字符)、拒絕內網目標、回退鏈。
  3. 啓用 SearXNG 時:打開搜索節、按提示 patch profile,點「測試搜索」。

Crawl4AI 示例(Docker)

容器需自帶 token,默認監聽 127.0.0.1:11235:

docker run -d -p 127.0.0.1:11235:11235 --name crawl4ai --shm-size=1g `
  -e CRAWL4AI_API_TOKEN=<你的token> unclecode/crawl4ai:latest

在卡片 自定義服務商 添加名稱 crawl4ai、類型 crawl4ai(自建容器),設爲默認服務商,token 寫入 Key 框進保險箱。

工作流程(摘自 README):

用戶提問 → web_search → 摘要足夠則回答
         → 否則 web_fetch_url → 第三方/自建服務抓取 → 模型基於全文回答

適用場景與注意

適合:需要在 DSH 裏讓模型自主讀網頁全文、又要把出站與 SSRF 風險外包給可信抓取服務或自建 Crawl4AI/SearXNG 的開發者;希望搜索零邊際成本、可自控引擎與隱私邊界時,可啓用 SearXNG 分支。

注意:

  • 插件以當前 dsh 進程的權限運行;安裝前請自行審閱 GitHub 源碼 與 MIT 許可證,勿把 API key 寫入會被提交的 .env 或聊天記錄。
  • key 只應通過官方 credentials Remote 寫入;若疑似泄露,應在服務商控制台輪換。
  • 社區目錄 SkillHub 爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;星標等元數據以目錄與 GitHub 爲準(資料中 GitHub 2 stars)。

結尾

dsh-fetch-search 把「搜索 + 全文抓取」收進 ctx.web,用第三方/自建鏈路換本機安全邊界,並用會話預算與緩存控制成本。進一步細節(契約 v1、SearXNG 前置條件、回退鏈行爲)見倉庫 README 與 docs/。

  • 目錄頁:https://www.skillhub.cn/plugins/tallahandsome-ux/dsh-fetch-search
  • 源碼:https://github.com/tallahandsome-ux/dsh-fetch-search
羽毛球分组比赛记分
小程序二维码

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

小夜