dsh-web-search-opencode:把 DSH 网页搜索接到 OpenCode Go

前言

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 插件页(推荐)

  1. 左侧栏打开 插件 页。
  2. 点 添加插件 旁箭头 → 安装第三方插件。
  3. 输入 GitHub 仓库地址或本地源码目录绝对路径。
  4. 点 安装;Host 检查包名/版本与组合包 patch 后,以 link: 装进 profile,安装默认启用。
  5. 若提示需重启(如 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 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜