dsh-fetch-search: Secure Web Scraping and Self-Hosted 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye