前言¶
在 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。
典型用法¶
验证抓取链路¶
- 重启
dsh web,浏览器 Ctrl+F5 强刷。 - 打开 网页抓取与搜索,选择服务商(如 Jina Reader),点「测试连接」应成功。
- 新建会话,模型即可通过
web_fetch_url抓取全文。
配置要点(卡片)¶
- 服务商下拉与 API Key(Tavily/Firecrawl 建议配置;Jina 可留空)。
- 每会话抓取上限(默认 10)、本地代理、抓取缓存、单次内容上限(默认 100000 字符)、拒绝内网目标、回退链。
- 启用 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