前言¶
DeepSeek Harness(DSH)里 Agent 常用 web_search 查资料、web_fetch 拉页面。内置搜索走 @deepseek-ai/dsh-web-search-deepseek(deepseek-official),请求头写死,没法按 OpenCode Go 网关要求带上 x-opencode-session。只改 baseURL 仍会收到 400 MissingSessionID。若你已有 OpenCode Go 订阅、希望搜索走网关上的多模型能力,就需要独立注册搜索提供方并自行维护会话头。下面介绍社区插件 dsh-web-search-opencode(维护者 Mutsum1-WY,分类:联网工具):在 DSH 0.2.x 上把 web_search 接到 OpenCode Go,并在 10 个实测模型、三种协议之间自动兜底;web_fetch 仍用内置 HTTP,不改抓取路径。
这是什么¶
dsh-web-search-opencode 是第三方 DSH 组合包插件(npm 包名 dsh-web-search-opencode,当前版本 1.1.0,MIT)。它向 ctx.web 注册搜索提供方 opencode-go,通过组合包 patch 把 profile 里 web 行的 searchProvider 指向该提供方,fetchProvider 保持 http。
每次搜索按候选链依次尝试模型,返回第一条带来源的结果(WebSearchResult:url / title / snippet / publishedAt,按 URL 去重)。协议在 index.js 里固定归属,配置里主要写模型 id;支持 Anthropic Messages、OpenAI Responses、Google Gemini 三种网关形态。包不 import 任何 @deepseek-ai/*,仅用 Node 内置模块。
适用环境:资料写明适用于 DSH 0.2.x(验证于 0.2.1-rc.3 / profile desktop)。
核心功能¶
搜索与兜底¶
- 默认主模型为
minimax-m3.1-flash(Anthropic Messages);默认候选链共 10 个模型,顺序与 README 中 2026-10-26 实测表一致(表中顺序即兜底顺序)。 - 逐个尝试:HTTP 错误、协议不支持、HTTP 200 但未解析到来源,均视为失败并换下一个;全部失败才抛聚合错误。
- 配置
models可给出完整自定义链(覆盖默认链,不是追加);fallback: false时只试第一个。 timeoutMs(默认 120000)是整次搜索含所有兜底的总预算;Agent 外层还有tool-web.searchTimeoutMs(base 默认 60000),先到者生效。
协议与模型(节选)¶
| 模型 | 协议 | 资料中的单次实测(会随网络浮动) |
|---|---|---|
minimax-m3.1-flash |
Anthropic Messages | 2.8s / 10 条(默认主模型) |
deepseek-v4-pro |
Anthropic Messages | 10.2s / 10 条 |
grok-4.7 |
OpenAI Responses | 约 11s / 6 次搜索 |
gemini-4-argon |
Google Gemini | 约 27s;来源为 vertexaisearch 重定向链接 |
订阅不含某模型时该模型报错并被跳过;deepseek-v4.1-flash、qwen3.x 等在网关侧不支持有效搜索,故默认不用 deepseek-v4.1-flash,需要 DeepSeek 系可在配置里改 model: deepseek-v4-pro 并保留其余兜底。
会话与凭据¶
OpenCode Go 要求稳定 x-opencode-session。插件首次生成会话 ID 后写入 $DSH_HOME/opencode-web-search/session-id(Windows 默认 %USERPROFILE%\.dsh\opencode-web-search\session-id),复用 dsh-websearch-<uuid>。
凭据默认经 OPENCODE_GO_API_KEY 解析:DSH 凭据服务优先,其次进程环境变量。常见缺失错误码为 WEB_PROVIDER_CREDENTIAL_MISSING。
安装与启用¶
前置:DSH 桌面端在运行(Web GUI 默认 http://127.0.0.1:2350);本包零运行时依赖。
方式一:Web 插件页(推荐)
- 左侧栏打开 插件 页。
- 点 添加插件 旁箭头 → 安装第三方插件。
- 输入 GitHub 仓库地址或本地源码目录绝对路径。
- 点 安装;Host 检查包名/版本与组合包 patch 后,以
link:装进 profile,安装默认启用。 - 若提示需重启(如
restart-required),关闭并重新打开 DSH 桌面端后再用。
仓库地址(与资料一致):
https://github.com/Mutsum1-WY/dsh-web-search-opencode
方式二:CLI(等价写法)
在资料中,CLI 示例如下(--profile 须写在 pnpm 参数之前;需本机已有插件源码目录):
dsh plugin --profile desktop add "<本地插件目录>"
装完后若插件页无变化,重启 DSH。不要手工改 profile 的 cordis.patch.yml 去 insert 本插件行——组合包层已负责挂载。
开关(务必用组合包开关)¶
在 插件页 → 已安装插件 → 打开组合包 → 开关 启停:
- 关闭:
web回落 base 层searchProvider: deepseek-official,依赖仍保留。 - 开启:
web_search再次由 OpenCode Go 执行。
不要只关详情页里的行 web-search-opencode,否则会出现 WEB_PROVIDER_CONFIGURED_MISSING。也不要在 设置 → 内置插件 → 网页搜索 里误点保存,以免把 web 写回 profile 覆盖层、切回 DeepSeek 搜索。
典型配置¶
默认值来自 index.js;在 profile 的 cordis.patch.yml(组合包层之后)按行 id 覆盖 config(整行 config 替换,非深合并):
- id: web-search-opencode
name: dsh-web-search-opencode
config:
model: deepseek-v4-pro
models:
- deepseek-v4-pro
- minimax-m3.1-flash
只想换主模型、保留默认 10 个兜底时,只写 model: deepseek-v4-pro 即可。
常用字段摘要:
| 字段 | 默认值 | 说明 |
|---|---|---|
model |
minimax-m3.1-flash |
候选链第一个 |
fallback |
true |
是否继续试下一个模型 |
apiKeyEnv |
OPENCODE_GO_API_KEY |
凭据引用名 |
timeoutMs |
120000 |
整次搜索总超时 |
保存后支持 HMR 的 profile 下一次搜索即生效;无 HMR 时需重启。
本地 link 安装时,可用源码目录中的自检脚本(npm 包不含 test/):
node test/provider-smoke.mjs
(需已配置 OPENCODE_GO_API_KEY。)
适用场景与注意¶
适合:已有 OpenCode Go 订阅与 API Key,希望在 DSH Agent 里用网关多模型搜索、并需要自动兜底;同时仍用内置 HTTP 做 web_fetch 的场景。
注意:
- 插件以当前 DSH 进程权限运行;安装前应阅读仓库源码与 MIT 许可证,自行评估是否满足安全与合规要求。
- 社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系;GitHub 星标以页面展示为准(资料抓取时为 0)。
gemini-4-argon返回的 vertexaisearch 重定向链接属 Google grounding 形态,不是抓取错误。
结尾¶
dsh-web-search-opencode 解决的是「OpenCode Go 网关会话头 + 多协议搜索 + 模型链兜底」这一组合问题,并把 DSH 内置 web_fetch 与 OpenCode 搜索职责拆开。需要细节、错误码与完整模型表时,以仓库 README 为准。