前言¶
在 DSH 里,模型常用的联网能力是内置的 web_search。默认走服务端账号搜索:一次搜索会消耗一轮模型回合。若你已经在 DeepSeek 控制台开通了 Search API(POST /v1/tools/search),希望把同一条 web_search 工具切到付费 API,又希望在密钥缺失、鉴权失败或网络异常时仍能搜到结果,就需要在「API 路由」和「内置路由」之间可切换、可持久化、带降级的方案。
下面介绍社区插件 dsh-plugin-deepsearch(维护者 SeaViod,分类:联网工具)。它在不拆掉 DSH 内置 web_search 的前提下,让你用设置页、侧栏开关或模型工具在 DeepSeek Search API 与 DSH 默认账号搜索 之间即时切换,并在失败时自动回退到其他可用搜索提供方。
这是什么¶
dsh-plugin-deepsearch 是 DeepSeek Harness(DSH)的 bundle 插件(npm 包名 dsh-plugin-deepsearch,当前资料中的版本为 0.2.0)。插件 halves 分工如下:
| 部分 | 文件 | 职责 |
|---|---|---|
| Host | index.js |
注册模型工具 deepsearch、注册搜索提供方(默认 id deepseek-search-api)、路由 web.searchProviderId 开/关、暴露 /deepsearch/ 下四条 HTTP 路由、解析 API Key |
| Browser | client.js |
通过 window.__ModuleLoader__.load(...) 加载:设置页 Tab 与侧栏底部开关 |
安装后由包内 cordis.patch.yml(dsh.bundle.patch)在启动时注入,一般无需手改 profile 的 patch。
核心功能¶
两种搜索路由¶
- ON(
deepseek-api):内置web_search由 DeepSeek Search API 提供。这是付费 API,成功请求按 DeepSeek 计费;启用前请在控制台查看当前定价。 - OFF(
builtin):DSH 默认路由——服务端账号搜索(一次搜索消耗一轮模型回合)。
切换立即生效,重启后仍保持:模式持久化在 $DSH_HOME/deepsearch-mode.json。
失败时不让搜索「不可用」¶
无 Key、401、网络错误,或 429/5xx 重试耗尽时,提供方会回退到先前(或其他可用)搜索提供方,并在 lastError 中说明原因。配置项 fallbackOnError 默认为开启语义(仅严格 true 时启用回退)。
三个入口¶
| 入口 | 位置 | 用途 |
|---|---|---|
| 设置页 | Settings → Built-in plugins → DeepSeek Search | 开关、状态详情、端点测试、API Key 编辑 |
| 侧栏开关 | 左侧边栏底部 | 一键切换,显示当前路由(API / builtin) |
| 模型工具 | deepsearch(status / on / off / search / fetch / check) |
在对话中切换路由或执行搜索 |
设置页与侧栏支持中英文界面。运行时仅依赖 node: 内置模块与全局 fetch,无额外 npm 依赖、无构建步骤。要求 Node.js >= 20,DSH 版本需满足包内 engines.dsh 声明的范围。
安装与启用¶
插件市场¶
在 DSH 插件市场中搜索 dsh-plugin-deepsearch 或 “DeepSeek Search” 安装。商店会使用包的 dsh.bundle.patch 自动注册 Host 端。安装后可在 Settings → Built-in plugins → DeepSeek Search 看到新 Tab;首次使用可能需要刷新浏览器页面以加载 client bundle。
命令行¶
默认 profile 安装:
dsh plugin add dsh-plugin-deepsearch
若服务由 dsh web 提供,可指定 profile:
dsh plugin --profile web add dsh-plugin-deepsearch
Desktop 应用使用桌面 profile 或应用内插件市场(DSH Home 由应用自行管理,无需手填用户目录路径)。插件 browser 端声明 dsh.client.platform: "web",与 Desktop shell 加载方式一致。
从本地目录而非 registry 安装时,可对目录执行 npm pack,再 dsh plugin add 生成的 tarball。
从 0.1.x 升级¶
0.1.x 无 bundle patch,需在 profile 的 cordis.patch.yml 手写 insert。0.2.0 起通过 bundle 安装,不要再保留旧的手写 insert 行,否则会与 bundle 重复加载。$DSH_HOME 下的模式与 Key 文件在升级时可保留。
卸载¶
从 profile 或插件市场移除包即可。可选删除 $DSH_HOME/deepsearch-mode.json、$DSH_HOME/deepsearch-diag.json、$DSH_HOME/deepsearch-key.txt;若计划重装可保留。
配置要点¶
配置来自 profile patch 中该插件条目的 config 块(bundle 安装也可携带同名配置);非法值会归一化为默认值而非抛错。示例:
- insert:
- id: deepsearch
name: dsh-plugin-deepsearch
config:
apiKeyEnv: DEEPSEEK_API_KEY
count: 8
retryCount: 1
常用项(资料中已列出的默认值与含义):
| 键 | 默认 | 说明 |
|---|---|---|
apiKeyEnv |
DEEPSEEK_API_KEY |
环境变量或凭证引用名 |
baseURL |
https://api.deepseek.com |
API 基址 |
searchPath |
/v1/tools/search |
搜索路径 |
fetchPath |
/v1/tools/fetch |
页面抓取路径 |
keyFile |
'' |
空则使用 $DSH_HOME/deepsearch-key.txt |
count |
8 |
结果条数(1–50) |
providerId |
deepseek-search-api |
注册的搜索提供方 id |
fallbackProvider |
'' |
OFF 时优先回退的提供方 id;空则自动检测 |
fallbackOnError |
true |
API 调用失败时是否回退 |
timeoutMs |
30000 |
单次 HTTP 超时 |
retryCount |
1 |
408/429/5xx 的额外重试次数(0–3) |
不建议在 patch 中写明文 apiKey;任何路由都不会回显 Key。
典型用法¶
- 安装插件并配置 Key:环境变量
DEEPSEEK_API_KEY,或在设置页 /$DSH_HOME/deepsearch-key.txt写入(路径可由keyFile覆盖)。 - 在 Settings → Built-in plugins → DeepSeek Search 打开开关,或用侧栏底部切换为
API;用设置页里的端点测试确认连通。 - 在对话中让模型使用内置
web_search时,即走当前所选路由;也可直接调用工具deepsearch做status、on/off或search/fetch/check。
适用场景与注意¶
适合需要在同一套 DSH 工作流里对比或迁移「账号内置搜索」与「DeepSeek Search API」的开发者:切换成本低,且 API 异常时仍可回退到内置或其他提供方。
使用前请注意:
- 插件以当前 DSH 进程的权限运行;安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行评估密钥存放方式与网络出站策略。
deepseek-api模式产生的是 DeepSeek 侧 API 费用;builtin模式仍按 DSH 账号搜索规则消耗模型回合。- DSH 社区插件目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 npm 包元数据为准。