dsh 回你「无法联网」时,多数人先怀疑网络;更常见的根因在上一层——默认搜索 provider 依赖 DeepSeek 官方 API key(DEEPSEEK_API_KEY)。dsh-free-search 补的就是这层:它注册一个多引擎 provider(npm dsh-free-search @ 0.4.36,GitHub 276★,周下载 8,304),默认引擎是免费且最稳定的 Bing,无需 key 开箱即用,引擎失败还会自动轮换下一个。
先分清你是哪一种「无法联网」
两种场景落到同一表象:没有官方 key(官方 provider 起不来),或网关不支持(opencode-go 这类网关的 OpenAI 兼容端点不支持 web_search 工具)。共同点是——问题不在网络,而在搜索 provider 缺位,换代理、换网络都无济于事。
装上它:两种形态,别混用
站点生成的是 npm 渠道:
dsh plugin --profile web add dsh-free-search
README 另给本地路径渠道(适合改代码):
git clone https://github.com/DDDMUC/dsh-free-search.git
dsh plugin --profile web add /path/to/dsh-free-search
装完重启:
dsh web
两种形态别混用:本地路径装的包,dsh plugin update 找不到,更新链路跟不到版本。跟版本走就装 npm 包,改源码才用本地路径。npm 包要求 Node >=20(本站基线 22.19 满足)。
装完为什么就通了:接管判定与默认引擎
插件加载后自动接管搜索,判定条件很窄:web.searchProvider 未设置,或仍是 DSH 出厂默认的 deepseek-official 时自动切换为本插件。对照第一节的两种场景,正好都落在范围内——不需要再写任何配置,装完重启即生效。
接管后默认引擎是 Bing:免费、最稳定、中文优化(zh-CN),不注册、不填 key、不挂代理就能出结果。换引擎走设置页 Search engine 下拉或聊天框 /free-search-engine。
一条「失败了也不断」的回退链
任何引擎失败——付费或免费、缺 key 或 401、限流或网络异常——都自动试下一个:先试其他已配 key 的付费引擎,再试免费引擎(exa / tavily / keenable / firecrawl / parallel 没 key 也会试,因自带 keyless 匿名额度),最后是剩余免费引擎。
结果顶部会注明实际生效的引擎,形如 Note: perplexity unavailable or failed, using exa.,看这行就知道链路在第几跳落地;配合 auto 引擎日常基本无需手动干预。
三种验证方式与一条最小验证流程
验证有三个入口:设置页 Test engine(直测当前引擎、不走回退链,付费引擎没配 key 会明确报错)、对 agent 说「测试一下所有搜索引擎」(走 free_search_test,一次给出各引擎结论)、/free-search-engine(切换并保存)。
最小闭环:执行 dsh plugin --profile web add dsh-free-search → dsh web 重启 → 「插件」页已安装分组里点 web-search-free 进配置(需 DSH 0.1.7-rc.1+)→ Test engine 确认引擎可用 → 说「测试一下所有搜索引擎」→ 提一个真实检索问题,看结果顶部的生效引擎提示。
两个容易把配置改坏的细节
其一,写 searchProvider: ddg 不等于「使用 DuckDuckGo」。 ddg 是本插件注册的固定 provider id,不是引擎名,只表示「搜索交给这个 provider」;真正用哪个引擎由设置页 provider 字段决定(可填 bing / baidu / auto 等)。
其二,DSH 0.1.2+ 的 patch 是整段覆盖,不是深度合并。 手改 cordis.patch.yml 时,这条 patch 会替换整条 entry 的 config,原 web 条目里没被重述的字段会被抹掉,典型后果是网页抓取失效或报重复注册。显式声明时务必一并重述 fetchProvider: http:
- id: web
config:
searchProvider: ddg
fetchProvider: http
国内还有一道坎:Node 的 fetch 不读系统代理
DuckDuckGo 这类引擎总超时?先别怀疑插件——Node.js 的 fetch 默认不走系统代理,dsh 进程会直连。给 dsh 进程显式设置即可(Node 24+):
export NODE_USE_ENV_PROXY=1
export HTTPS_PROXY=http://127.0.0.1:7897
export HTTP_PROXY=http://127.0.0.1:7897
不想折腾代理,就优先用 Bing、百度这类国内可达引擎。
总结
「无法联网」的根因往往在搜索 provider 这层而不是网络本身,补齐再验证一次,多数问题就闭环了;想横向看清不同插件的能力边界,可以查站点整理的插件清单。
适合与不适合
适合:没有官方 key 又需要 agent 联网的个人开发者;用 opencode-go 这类网关、端点不支持 web_search 的人;以中文检索为主的用户。
不适合:需要严格时间过滤的场景——Bing 与 AnySearch 直接忽略 timeRange,精确过滤得换 Exa / Keenable 或 Firecrawl 的绝对日期写法;把 agent 暴露到公网、对入网边界有要求的部署——web_fetch 没有 SSRF 防护;以及指望免费引擎扛高频查询的用法,相同查询 5 分钟内会命中缓存,免费引擎也存在匿名限流。
标签:dsh-free-search、DeepSeek Harness、多引擎搜索回退、无 key 联网、避坑实践
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。