前言¶
在 DeepSeek Harness(DSH)里做带联网能力的智能体时,ctx.web 的搜索后端通常要在设置里改 searchProvider,或在不同插件、不同 API 之间来回对照文档。换引擎往往意味着打开 Plugins › Web search、确认凭据是否齐全,再重启或刷新才能验证行为是否生效。
下面介绍社区插件 dsh-search-picker(维护者 xiaoxiaosrm,分类:联网工具)。它在 DSH 桌面侧栏底部(Settings 行上方)增加 Search: … 按钮,用菜单在多种搜索后端之间切换,写入与官方设置页相同的 web.searchProvider 字段,切换后立即生效并持久化到宿主配置文档。
- 目录页:https://www.skillhub.cn/plugins/xiaoxiaosrm/dsh-search-picker
- 源码与文档:https://github.com/xiaoxiaosrm/dsh-search-picker
- 当前 Release:v0.1.0(MIT 许可证)
- 声明兼容:DSH desktop 0.2.1-rc.2
这是什么¶
dsh-search-picker 是一个 DSH bundle 插件:服务端通过 cordis.patch.yml 注册搜索提供方补丁;客户端在 web 平台注入 UI,在侧栏提供搜索引擎选择器。
它解决的核心问题是:在不与官方 Plugins › Web search 打架的前提下,用一次点击在 DeepSeek Messages、DeepSeek Search API、OpenCode Go、Tavily、Exa 之间切换 ctx.web 的搜索实现。菜单里未配置凭据的引擎会灰显;若在设置里选了未注册/不可用的提供方,web_search 会返回明确的 WEB_PROVIDER_* 错误,而不是静默落到别的引擎。
插件以当前 DSH 进程权限运行;安装前请自行阅读仓库源码与 MIT 许可证,并只在可信来源获取代码。
支持的搜索引擎¶
资料中的引擎列表如下(id 即 searchProvider 取值方向):
| id | 引擎 | 凭据环境变量 | 说明 |
|---|---|---|---|
deepseek-official |
DeepSeek 官方 Messages | DEEPSEEK_API_KEY |
内置;Anthropic Messages + web_search_20250305;每次搜索消耗模型 token |
deepseek-search-api |
DeepSeek 官方 Search API | DEEPSEEK_API_KEY |
内置;直连检索端点;不消耗模型 token |
opencode-go |
OpenCode Go | OPENCODE_GO_API_KEY |
由本插件提供;Anthropic Messages + x-opencode-session 头;约 $0.01/次搜索 |
tavily |
Tavily | TAVILY_API_KEY |
由本插件提供;未配置 key 时菜单灰显 |
exa |
Exa | EXA_API_KEY |
由本插件提供;未配置 key 时菜单灰显 |
凭据不由插件直接读写凭据文件;搜索时通过 ctx.credentials 解析 apiKeyEnv 所指引用,并回退到进程环境变量。缺失时抛出 WEB_PROVIDER_CREDENTIAL_MISSING,错误信息会点名对应变量名。
核心功能¶
与官方设置共用同一字段¶
选择器写入官方 web 命名空间下的 searchProvider,与 Plugins › Web search 编辑的是同一字段,因此:
- 切换后立刻生效,无需重启 DSH;
- 选择会随宿主设置文档持久化,重启后仍保留;
- 侧栏菜单与设置页不会互相覆盖不同字段。
侧栏 UI 行为¶
按钮位于侧栏底部、Settings 行正上方。菜单为 position: fixed 弹出层:宽度跟随侧栏内容宽度(侧栏默认 280px,可拖拽 264–420px,菜单约 240–396px),拖拽时实时更新,避免被侧栏列 overflow: hidden 裁切。侧栏收起到 56px 图标轨时,菜单向右侧以 280px 宽度弹出。
菜单背景为不透明材质(浅色主题为白、深色主题为深灰,使用 --dsw-alias-bg-layer-1),带官方 popover 描边与 --dsw-elevation-panel 阴影;未采用仅 58% 不透明度且依赖 backdrop-filter 的官方菜单材质,以免侧栏文字透出。
仓库 docs/ui.png 中有界面示意。
安装与启用(desktop profile)¶
官方 README 面向 desktop profile,通过本地 file: 依赖把 bundle 挂进 profile。下面步骤对应资料原文逻辑;请将插件完整目录放到固定路径(README 示例为 Windows D:\tools\dsh-search-picker,POSIX 下自选等价路径),不要与未核实的 dsh plugin add github:... 类命令混用。
- 编辑
%DSH_HOME%\profiles\desktop\package.json(POSIX:$DSH_HOME/profiles/desktop/package.json):
- 在 dependencies 中增加"dsh-search-picker": "file:D:/tools/dsh-search-picker"(路径按你本机实际目录修改);
- 在dsh.profile.bundles中追加"dsh-search-picker"。 - 在
%DSH_HOME%\profiles\desktop下执行:
pnpm install
- 完全退出并重新打开 DSH 桌面应用。Loader 仅在启动时扫描 profile bundles,客户端半部也在启动时读入内存,仅刷新页面不足以加载新插件。
若 file: 依赖无法解析,可将插件目录复制到 %DSH_HOME%\profiles\desktop\node_modules\dsh-search-picker,并仍将包名加入 dsh.profile.bundles(无需 file: 依赖项)。
运行环境要求 Node >= 20(见 package.json → engines)。
配置¶
bundle 自带默认补丁项(cordis.patch.yml),字段均可选,省略则用下列默认值。可在 profile 的 cordis.patch.yml 中针对同一 entry id(search-picker)覆盖。
- insert:
- id: search-picker
name: dsh-search-picker
config:
opencodeGo:
baseURL: https://opencode.ai/inference/go/anthropic/v1
model: deepseek-v4.1-flash
maxTokens: 4096
maxUses: 5
tavily:
baseURL: https://api.tavily.com
apiKeyEnv: TAVILY_API_KEY
exa:
baseURL: https://api.exa.ai
apiKeyEnv: EXA_API_KEY
典型用法¶
- 按上一节完成 profile 安装并冷启动桌面端。
- 在 DSH 凭据或环境中配置目标引擎所需变量(例如
DEEPSEEK_API_KEY、TAVILY_API_KEY)。 - 点击侧栏 Search: …,选择当前要用的引擎;未配凭据的项保持灰显不可选。
- 在对话或工作流中触发
web_search;行为与在 Plugins › Web search 中选择同一searchProvider一致。
需要改回内置路径时,在菜单选 deepseek-official,或打开官方 Plugins › Web search 页面修改。
卸载与回退¶
- 在菜单或官方页面切回
deepseek-official。 - 从 profile 的
package.json中移除dsh-search-picker依赖及dsh.profile.bundles中的包名,执行pnpm install,再完全重启桌面应用。
适用场景与注意事项¶
适合谁: 经常在 DSH 桌面端对比 DeepSeek 官方 Messages / Search API、OpenCode Go、Tavily、Exa 检索效果或成本的开发者;希望少进设置页、但仍与官方 searchProvider 保持一致的团队。
务必注意:
- 菜单内引擎列表固定;若官方提供方把
apiKeyEnv映射到其他凭据名,灰显逻辑仍按默认引用名检查。 - 与运行时接管
web.searchProvider的插件(如dsh-free-search、dsh-web-search-free等)冲突,勿同时安装。 opencode-go在无法取得当前 session id 时,x-opencode-session使用进程内随机 UUID(中继仅需不透明且稳定)。deepseek-official返回 404:检查 profile 补丁或其他插件是否改写了web-search-deepseek.baseURL;应保持内置默认https://api.deepseek.com/anthropic/v1,误指向搜索提供方主机会导致异常。- 菜单宽度不跟随侧栏:popover 依赖
ResizeObserver;修改 profile/bundle 后需重启桌面应用以重载客户端 bundle。
DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。本插件 GitHub 星标数为 1(以目录页/仓库公开信息为准),使用前请自行评估维护活跃度与风险。
结尾¶
dsh-search-picker 把 web.searchProvider 的切换搬到侧栏,与官方 Web search 设置同源同字段,适合在桌面 profile 下快速试验多种联网后端。详情与 Issue 见 GitHub:https://github.com/xiaoxiaosrm/dsh-search-picker;插件索引见 SkillHub:https://www.skillhub.cn/plugins/xiaoxiaosrm/dsh-search-picker。