dsh-web-search-ocgo:走 OpenCode Go 的 DSH 网页搜索 Provider

前言

在 DeepSeek Harness(DSH)里做需要联网的智能体,通常会挂一个网页搜索 provider。官方 dsh-web-search-deepseek 走 api.deepseek.com/anthropic/v1,能搜,但 result.content 实测摘要覆盖率为 0%,也没有查询缓存和 Go 端点失败后的回退。社区里曾有人 fork 出 dsh-web-search-opencode-go,把请求改到 OpenCode Go;在 DSH 0.1.7-rc.2 上,它还会因静态 import 了不存在的 installSettingsSection 而加载即崩,或靠 profile 里指向旧版 dsh 的 symlink 侥幸跑起来。

dsh-web-search-ocgo 由 jitang-open 维护,从零重写并保持对外行为兼容:走 OpenCode Go(自动注入 x-opencode-session),补上失败回退官方端点、查询缓存、result.content 总结与自带设置页。下面介绍它是什么、能做什么,以及如何挂进 web profile。

这是什么

  • 仓库:jitang-open/dsh-web-search-ocgo
  • 分类:联网工具(SkillHub 目录:dsh-web-search-ocgo)
  • 定位:DSH 网页搜索 provider,provider id 为 opencode-go,loader entry id 为 web-search-ocgo
  • 依赖面:只 import @deepseek-ai/schemastery 一个外部包;其余通过 ctx.get() 取服务,避免插件目录解析不到 @deepseek-ai/dsh-* 的版本错配

与官方 dsh-web-search-deepseek 相比,端点改为 https://opencode.ai/zen/go/v1,模型只认 deepseek-v4-flash / deepseek-v4.1-flash;并自动注入 x-opencode-session 与 x-opencode-client。

核心功能

端点与会话头

默认 baseURL 为 https://opencode.ai/zen/go/v1(不含 /messages),默认模型 deepseek-v4.1-flash。凭据通过配置项 apiKeyEnv(默认 OPENCODE_API_KEY)从 DSH 凭据中心读取。

result.content 与结果质量

官方 provider 不填 result.content;本插件从响应 text 块取模型总结写入 result.content,默认截断 2000 字符(answerMaxChars,设为 0 则不返回)。单条摘要默认截断 300 字符(snippetMaxChars)。page_age 会规范成 ISO-8601;解析失败则丢弃,不塞假日期。

查询缓存

默认开启:TTL 5 分钟(cacheTtlMs: 300000),LRU 最多 50 条(cacheMaxEntries: 50)。命中缓存时 token 消耗为 0。README 中 32 次请求实测表明,下调 maxUses 对总 prompt 和结果条数几乎无影响(每次实际只发起 1 次 web_search),省额度应靠缓存而非改 maxUses(默认仍为 5)。

失败回退与重试

Go 端点重试耗尽后,可回退到官方端点(fallbackEnabled 默认 true,回退模型默认 deepseek-flash,会消耗 DeepSeek 余额)。对 429、5xx 和网络错误有退避重试(retryCount 默认 1)。

设置页

Web profile:「设置 → 插件」→ dsh-web-search-ocgo,改动在失焦或回车时写入 profile 的 cordis.patch.yml。dsh-tui 下会注册 TUI 设置区块(约 19 个字段、7 个分组)。响应统计走 logger.info,不写自定义会话事件,避免历史日志因未知事件类型无法加载。

诊断与开发脚本

仓库提供 node scripts/check.mjs、node --test test/*.test.js、node bin/doctor.mjs(可 --probe 真发搜索)、以及 bench 脚本;当前 package 版本为 0.2.0,许可证 MIT,Node 要求 ^22.19.0 || >=24.0.0。

安装与启用

README 未提供 dsh plugin add 一类命令,需在本地 clone 或下载源码后,用符号链接挂进 profile。以下步骤摘自仓库说明(路径请按本机实际目录替换 README 中的示例)。

1. 准备 schemastery 链接

让插件目录能解析唯一外部依赖:

ln -sfn ~/.dsh/profiles/web/node_modules/@deepseek-ai/schemastery \
        node_modules/@deepseek-ai/schemastery

在插件源码根目录执行;node_modules/@deepseek-ai 不存在时需先创建。

2. 挂进 web profile

ln -sfn "$PWD" ~/.dsh/profiles/web/node_modules/dsh-web-search-ocgo

3. 登记 bundle

编辑 ~/.dsh/profiles/web/package.json:在 dsh.profile.bundles 中加入 dsh-web-search-ocgo,并在 dependencies 中加入指向本机绝对路径的 link,例如:

"dsh-web-search-ocgo": "link:/你的路径/dsh-web-search-ocgo"

4. 清理旧 fork(若曾用过)

从 ~/.dsh/profiles/web/cordis.patch.yml 删除旧的 web-search-opencode-go 段,并从 dsh.profile.bundles 移除 dsh-web-search-opencode-go。

5. 重启并验证

dsh web

日志中应出现类似:

[web-search-ocgo] 已装载 provider id=opencode-go endpoint=https://opencode.ai/zen/go/v1 model=deepseek-v4.1-flash fallback=deepseek-flash

进一步检查:

dsh --profile web --dump-config | grep -A5 "id: web$"      # searchProvider 应为 opencode-go
node scripts/check.mjs
node --test test/*.test.js
node bin/doctor.mjs

典型配置

图形界面

Web:「设置 → 插件」→ dsh-web-search-ocgo。TUI:在 /settings 中找 web-search-ocgo 分组(端点与模型、凭据、OpenCode Go 会话头、失败回退、查询缓存、结果质量、可靠性)。

YAML 片段

可在 ~/.dsh/profiles/web/cordis.patch.yml 中覆盖默认值,例如:

- id: web-search-ocgo
  name: dsh-web-search-ocgo
  config:
    apiKeyEnv: OPENCODE_API_KEY
    baseURL: https://opencode.ai/zen/go/v1
    model: deepseek-v4.1-flash
    fallbackEnabled: true
    cacheTtlMs: 300000
    answerMaxChars: 2000

常用字段:sessionId(空则每次启动随机)、fallbackModel(默认 deepseek-flash)、cacheEnabled / cacheMaxEntries、retryCount。

适用场景与注意

适合谁:已在用或计划用 OpenCode Go 做网页搜索、需要 result.content 摘要、希望 Go 挂了还能回退官方端点、并想用缓存降重复查询成本的用户。

临时回滚:在「设置 → 插件」把 web 的 searchProvider 改回 deepseek-official 并重启,无需卸载本插件。

安全与权限:插件在 DSH 进程权限下运行,会读凭据、发外网请求。安装前应阅读 GitHub 源码 与 MIT 许可证,确认 apiKeyEnv 与端点配置符合你的合规要求。SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。

完全卸载:从 package.json 的 bundles 与 dependencies 移除、删除 cordis.patch.yml 中 web-search-ocgo 段并将 searchProvider 改回官方、删除 node_modules 下的 symlink,再重启 dsh web。

结尾

dsh-web-search-ocgo 把 DSH 网页搜索接到 OpenCode Go,并在官方能力之外补上摘要、缓存、回退与双端设置页,同时把依赖压到 schemastery,减轻 dsh 升级时的加载风险。目录页:SkillHub;源码与完整说明:GitHub README。

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

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

Xiaoye