前言¶
在 DeepSeek Harness(DSH)里,智能体要通过 web.fetch 把 URL 变成可用的正文。内置抓取链在「直连失败」之后往往会马上走系统无头浏览器;在部分机器上,这一步可能空转满 25 秒超时,才轮到 Jina、firecrawl 等云端档位。硬站点因此常常先白等半分钟。
社区插件 dsh–web-fetch(维护者 liamugong,分类:联网工具)把多条抓取后端串成一条由你拖动排序的回退链,并支持按域名锁定专用后端。顺序改动即时写盘,无需重启 DSH。下文介绍其定位、能力、安装方式与使用注意。
这是什么¶
dsh–web-fetch 是面向 DeepSeek Harness 的 web-fetch provider 聚合插件(package.json 当前版本 0.4.0,许可证 MIT)。它把直连 HTTP、Jina Reader、firecrawl、fastCRW(本地 CRW)、Exa、无头浏览器、CDP、Lightpanda,以及知乎开放平台、小红书 Cookie 等后端编排成一条可配置的失败回退链;命中站点规则时则只走指定后端,不再回退通用链。
插件在满足条件时会自动接管 web.fetchProvider(仅当当前为空或为 http 时,不抢占你已显式指定的其他 provider)。
为什么需要可编排的回退链¶
README 给出的典型排序思路包括:
- 追求速度:
direct → jina → firecrawl - 追求稳定:
firecrawl → crw → jina → direct - 无 API Key:
direct → jina → browser - 对付 Cloudflare:把
crw提前
拖动卡片中的顺序即生效;另有 ↑ / ↓ 按钮,不方便拖拽时也可调整。每个后端可单独启用或禁用;缺少 Key 或缺少二进制时会自动跳过该档。
核心功能¶
十个抓取后端¶
| id | 说明(摘自 README) |
|---|---|
direct |
进程内 node:http(s),跟随重定向,无额外依赖 |
jina |
https://r.jina.ai/<url>,免 Key,有速率限制 |
firecrawl |
需 FIRECRAWL_API_KEY,适合反爬与 Cloudflare |
crw |
本地 fastCRW;打开开关可自动下载 crw-server 并在 127.0.0.1 启动(无鉴权、仅回环) |
exa |
需 EXA_API_KEY |
browser |
默认 Obscura,或本机 Chromium/Chrome --dump-dom |
cdp |
本机 Chromium/Chrome,CDP 取 outerHTML,可持久化登录态 |
lightpanda |
需本机 lightpanda 二进制;README 注明中文站基本全挡,不建议当主力 |
zhihu |
知乎开放平台,需 ZHIHU_API_KEY,问题/回答返回摘要(非全文) |
xiaohongshu |
需小红书 Cookie,解析页面内 window.__INITIAL_STATE__ |
站点规则¶
按域名后缀匹配;命中后只走指定后端,失败直接报错,不走通用链。默认包括:zhuanlan.zhihu.com → jina;zhihu.com → zhihu;xiaohongshu.com → xiaohongshu。未命中域名的 URL 仍走通用回退链。
配置与 UI¶
- API Key:在设置页卡片内编辑 firecrawl / Exa / Jina / 知乎 Key 与小红书 Cookie,保存到
~/.dsh/dsh-web-fetch/keys.json(权限 0600);留空时可复用 DSH 凭据中的同名 Key。 - 拖动排序:HTML5 拖拽调整回退顺序,实时写盘。
- 连通性测试:输入 URL 跑完整条链,逐档显示耗时与字节数,失败附原因。
- 质量闸门:正文短于
minChars.accept(默认 400)不算成功,继续下一档;全部偏短时按minChars.floor(默认 80)与最长结果策略处理。 - 性能层:URL 缓存(TTL 可调)、域名亲和、全局 deadline、可选前两档并发、连接复用等,可在卡片中开关与清空。
- 独立 UI:除设置页卡片外,另有
/api/dsh-web-fetch/ui拖拽页。
与内置链的差异(事实摘要)¶
内置链在直连失败后立即尝试系统无头浏览器;本插件把顺序交给你,并可把浏览器档位后移或关闭,避免在部分环境下每个硬站先等满浏览器超时。
安装与启用¶
engines.dsh 要求 >=0.2.0-rc.1 <0.3.0。安装命令以 README 为准:
# 从 npm(发布后)
dsh plugin --profile desktop add dsh--web-fetch
# 从 GitHub 源码(纯 JS,无需构建)
dsh plugin --profile desktop add github:liamugong/dsh--web-fetch
# 本地开发
git clone <this repo> && cd dsh--web-fetch
dsh plugin --profile desktop add ./
安装后重启 DSH,或在「设置 → 插件」中找到 dsh–web-fetch。
若你已显式指定其他 fetchProvider,需在 profile 的 cordis.patch.yml 中手动改为:
- id: web
config:
searchProvider: ddg
fetchProvider: dsh-web-fetch
典型用法¶
1. 调整回退顺序¶
打开 DSH 设置中的 dsh–web-fetch 卡片(或访问 /api/dsh-web-fetch/ui),拖动后端行顺序。例如无 Key 时可设为 direct → jina → browser;有 firecrawl Key 且要稳时可将 firecrawl 前置。
2. 填写密钥与 Cookie¶
在卡片「接口密钥」区域填写所需 Key;小红书笔记需 Cookie(至少 a1 与 web_session),且笔记 URL 需保留 xsec_token 等查询参数。
3. 启用本地 CRW¶
打开 crw 开关后,插件会尝试自动下载并启动 crw-server(README 写明约 23MB 单文件),绑定本机回环地址。需要 stealth 等进阶能力时,README 提供了自编译 crw-server 的 cargo 示例(tag v0.43.1 及 feature 列表)。
4. 浏览器档位¶
默认无头引擎为 Obscura(Rust 自渲染,无需 Chromium);调用形态类似:
obscura fetch <url> --dump markdown --timeout <s> --allow-private-network --quiet [--stealth]
README 强调:使用 TUN/fake-IP 代理时须开启 --allow-private-network 与 OBSCURA_ALLOW_PRIVATE_NETWORK=1,否则私网解析可能被 SSRF 规则拦截。需要登录态时优先考虑 cdp 与持久化 userDataDir(默认可为 ~/.dsh/dsh-web-fetch/chrome-profile),而非在 --dump-dom 路径上使用 --user-data-dir(Chromium 已知行为可能导致进程不退出)。
5. 连通性测试¶
在卡片中输入待测 URL,一次执行完整回退链,用于核对各档耗时与失败原因。
适用场景与注意¶
适合谁:需要在 DSH 桌面 profile 下统一编排网页抓取、按站点定制后端、或减少内置链在浏览器档位上的等待时间的开发者。
权限与安全:插件以当前 DSH 进程权限运行;会读写 ~/.dsh/dsh-web-fetch/ 下的配置与密钥文件,并可能下载、启动本地 CRW 或调用本机浏览器。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,自行评估 Key、Cookie 与出站请求风险。
能力边界(README 明示):知乎开放平台返回回答摘要;小红书依赖 Cookie 与页面内嵌状态解析;本地浏览器在部分机房 IP 上难以通过 Cloudflare JS 挑战,稳定过强 CF 往往依赖 firecrawl 等云端档位或网络环境。lightpanda 不建议作为中文站主力。
生态说明:DSH 奉行「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。截至目录信息,该仓库 GitHub 星标为 0。
结尾¶
dsh–web-fetch 把多条网页抓取后端收成一条可拖动排序的回退链,并用站点规则与质量闸门减少无效重试。若你正在 DSH 里调 web.fetch 的行为,可从官方 README 中的安装命令入手,在卡片里试连通性测试再定顺序。