前言¶
DSH (DeepSeek Harness) 的核心设计理念是“一切皆插件”。默认的 web_search 工具调用 DeepSeek 官方的按量计费后端。如果你需要更多搜索次数且不想付费,或者希望在本地环境中运行搜索逻辑,dsh-freeweb 插件提供了一个基于 Parallel 免费搜索后端的方案。
功能特点¶
- 真·零依赖:纯全局
fetch+ 标准 JS,没有任何import。不存在装完缺依赖崩溃的问题。 - 完整错误处理:所有异常返回诊断信息,不静默失败。
- 组合包形态:0.2.0+ 版本声明
dsh.bundle,支持 Web 插件页安装/启停/卸载。 - 手动挂载支持:0.1.5+ 支持本地文件挂载,配置极其轻量。
- MCP 协议:基于 JSON-RPC over HTTP,直接调用 Parallel Search 免费后端。
安装与启用¶
本插件通过 GitHub 仓库分发,尚未发布到 npm。安装前请确保 DSH 版本 ≥ 0.1.5(手动挂载)或 ≥ 0.2.0(组合包安装),并已安装 Node.js ≥ 18。
方式 A:插件页安装(推荐,DSH 0.2.0+)¶
- 打开侧栏的 插件 → 添加插件。
- 输入本目录的绝对路径(例如:
D:\plugins\DSH-freeweb)。 - Host 会读取
package.json中的dsh.bundle声明,完成安装并自动启用。 - 在 已安装 分组中会出现
dsh-freeweb卡片,可进行整包启停或卸载。
方式 B:命令行安装¶
npx @deepseek-ai/dsh plugin --profile web add "<本目录绝对路径>"
这会将插件写入 package.json 的 dsh.profile.bundles。
方式 C:手动挂载(零打包,最轻)¶
- 将
freeweb-search.js放入 profile 目录:
~/.dsh/profiles/web/freeweb-search.js(Windows:C:\Users\<你>\.dsh\profiles\web\) - 在 profile 的
cordis.patch.yml中追加配置(注意:config是整段替换,必须包含fetchProvider):
- id: web
config:
searchProvider: freeweb
fetchProvider: http
- insert:
- id: freeweb-search
name: ./freeweb-search.js
- 重启 DSH。
配置与验证¶
配置要求¶
Web 行的 config 是整段替换,必须同时配置 searchProvider: freeweb 和 fetchProvider: http。若不写 fetchProvider,会丢失 dsh-base 的默认抓取后端。
验证方法¶
- 侧栏 插件 → 已安装,确认出现
dsh-freeweb卡片。 - 设置 → 内置插件 中检查
include:freeweb-search状态。 - 发起一次搜索请求。官方 DeepSeek 搜索 provider 每次都会在日志写入
web/deepseek-search-llm-request事件,freeweb 不写该事件。若日志无此条,即表示走的是 freeweb。
注意事项与限制¶
- 互斥性:手动挂载与组合包安装互斥,会导致
WEB_DUPLICATE_PROVIDER错误。请二选一。 - 免费层限速:Parallel 匿名层有速率限制,遇到
HTTP 429需稍后重试。 - 索引偏好:主要索引偏英文,中文可用但质量不如英文。
- 结果形态差异:返回结构为
url / title / publish_date / excerpts,而非官方的cited_text。模型能引用的原文片段可能会比官方少。 - 失败处理:插件失败时以“答案文本”形式返回诊断信息,不抛出
WebError。这是刻意的取舍,旨在保持“永不阻断、故障透明”。
回退与故障排查¶
回退官方¶
- 插件页/CLI:卸载组合包后,搜索自动回到官方
deepseek-official。 - 手动挂载:删除
cordis.patch.yml中的配置块并重启。注意顺序:先删 patch 行,再删文件,否则 DSH 启动会报错。
常见错误¶
WEB_DUPLICATE_PROVIDER:检查是否同时使用了两种安装方式。WEB_PROVIDER_AMBIGUOUS:未显式指定searchProvider。not-a-bundle:目录未声明dsh.bundle(若复制了旧版单文件需更新)。- 找不到
pnpm:方式 A/B 需要,方式 C 不需要。