前言¶
用 DeepSeek Harness(DSH)做智能体开发时,一个常见的问题是:模型默认不联网,或者只在它自己认为必要时才调用 web_search。如果你希望某个会话里的回答带最新网络信息,通常只能在每轮提示词里反复强调「回答前先搜索」。
DSH 的理念是「一切皆插件」,这类行为可以交给插件解决。下面介绍的 dsh-web-search-toggle 就是这样一个插件:它在聊天输入框工具行加一个 “Web Search” 开关,开启后强制 agent 在该会话每一轮回答前先调用 web_search,做法对齐 DeepSeek 官方 Web Chat UI 里那个按会话生效的 Web Search 开关。
这是什么¶
dsh-web-search-toggle 是一个 DSH web-profile 插件,由 SeerableOfficial 维护,MIT 许可,当前版本 0.1.0,要求 Node >= 20。
一句话定位:在 composer 工具行提供一个按会话记忆的 “Web Search” 开关,开启时注入强制性 system-prompt 指令,要求 agent 在每一轮回答前先调用 web_search 并引用来源。开关状态按会话保存,页面重载与宿主重启后仍然生效。
工作原理¶
插件分客户端与宿主两半,遵循 DSH 插件约定(dsh.bundle.patch + dsh.client)。
客户端半部¶
lib/client.js 把开关注册到 composer 工具行(conversation.input.left,即常驻的访问模式 / plan / attach 控件旁边的位置)。点击开关时,通过 client↔host RPC 通道通知宿主。
按钮形态:未激活时是中性描边;激活时变为 DeepSeek 品牌蓝,并带一个绿色 on 圆点。
宿主半部¶
index.js 做两件事:
1、提供 RPC 频道 /dsh-web-search,支持 websearch.get-state / websearch.set-state,把开关标志按会话存储,并持久化到 ~/.dsh/dsh-web-search-toggle.json;
2、注册 system-prompt 段 dsh-web-search:force。该段在每次组装 prompt 时求值:当前会话开关为开时,注入「必须先调用 web_search」的指令;为关时渲染为空(空段会自动消失)。
文件结构如下:
package.json 声明 dsh.bundle.patch 与 dsh.client
index.js 宿主半部:RPC 频道 + system-prompt 强制段
lib/client.js 客户端半部:composer 上的 Web Search 开关
cordis.patch.yml bundle patch,挂载宿主半部
为什么是指令而不是硬性拦截¶
DSH 没有「模型每轮必须调用某工具」的原语。所以这里的强制机制是一条始终存在的、强有力的 system-prompt 指令——按 README 的说法,这是该 harness 中引导模型最权威可靠的方式。模型会遵循它,但遵循是概率性的,不保证每一轮都调用 web_search;这一点与 DeepSeek 官方 Web Chat 的开关行为一致。
安装与启用¶
前置条件有两个:
- 使用 DSH 的 web profile(
dsh --profile web); - 已配置 web_search 搜索提供方(内置 DeepSeek 搜索提供方,或其他提供
web_search的 provider)。注意web_search工具由 DSH 自带的dsh-tool-web包(经自动选择的 DeepSeek 搜索提供方 seam)注册,本插件只强制使用该工具,不负责安装它。
满足条件后,在 web profile 下执行:
# 推荐方式,会 reconcile bundle 列表
dsh plugin --profile web add dsh-web-search-toggle
也可以直接用 pnpm 安装(跳过 bundle 列表 reconcile):
cd <your-profile-dir>
npx pnpm add dsh-web-search-toggle
# 然后把 "dsh-web-search-toggle" 加入 package.json 的 dsh.profile.bundles
安装后重启 DSH,让 bundle patch 在启动时生效:
dsh --profile web restart
典型用法¶
经过上面的步骤,按以下顺序使用:
1、在 DSH web UI 打开一个会话;
2、点击 composer 工具行的 Web Search pill,打开开关;
3、提问——agent 会先调用 web_search,并在回答中引用来源;
4、用完再点一下开关关闭,恢复默认行为。
开关的开/关状态按会话记住,页面重载或重启宿主后不会丢失。
适用场景与注意¶
适合的场景:希望某个会话的回答基于最新网络信息、又不想每轮手工重复搜索指令;或者想让 DSH web UI 的体验对齐 DeepSeek 官方 Web Chat 的 Web Search 开关。
几点注意:
1、强制是概率性的。开关开启不保证模型每一轮都调用 web_search,关键信息仍建议核对回答中引用的来源;
2、搜索提供方需自行配置。插件只强制调用 web_search,不负责注册或安装工具;
3、仅适用于 web profile;
4、安全提醒。插件以当前 dsh 进程的权限运行,安装前建议先查看其源码与许可证(MIT)。该插件在 GitHub 上公开源码,文件不多,通读一遍成本不高。
结尾¶
dsh-web-search-toggle 解决的是一个具体的小问题:把「先搜后答」从每轮重复的提示词,变成输入框上一个可按会话切换、可持久化的开关。它的实现也很适合作为 DSH 插件开发的参考——客户端注册 UI、宿主提供 RPC 与 system-prompt 段,两侧通过 dsh.bundle.patch + dsh.client 约定组合。
- GitHub 仓库:https://github.com/SeerableOfficial/dsh-web-search-toggle
- 社区插件目录页:https://www.skillhub.cn/plugins/SeerableOfficial/dsh-web-search-toggle
需要说明的是,后者是独立的社区目录站点,与 DeepSeek / 幻方没有官方从属关系;该链接来自插件线索,未做进一步核实,以 GitHub 仓库为准。