dsh-web-degoog:用自建 degoog 接 DSH 的 web_search 与 web_fetch

前言

在 DeepSeek Harness(DSH)里做带联网的智能体,通常会用到框架自带的 web_search 和 web_fetch。若你希望搜索走后端自建的 degoog 实例(多引擎聚合、自行部署),同时抓取环节仍在 Harness 本机直连目标 URL,就需要把「搜索后端」和「抓取路径」拆开配置。官方 @deepseek-ai/dsh-web 并不为第三方搜索源单独提供配置页;社区插件 dsh-web-degoog 以 bundle 形式注册并选中 degoog 提供方,并在 Plugins 页或补丁里填写实例地址即可复用同一发布包。

下面按安装、配置、行为与安全说明介绍该插件;事实以 GitHub 仓库 README 与 package 元数据为准。本包当前面向 DSH 0.2.2-rc.1(next)及 volatile-config / Plugins 页模型;若仍使用 0.1.x 设置模型,应使用该包的 0.3.1 发行版。

这是什么

dsh-web-degoog 是 maintainer shantanugoel 发布的 DSH bundle:用任意自托管 degoog 实例支撑 Harness 原生的 web_search 与 web_fetch 工具。实例 URL 与 API Key 均为配置项,一份安装包可适配不同部署。

核心能力

安装后会注册并选中两个 provider(id 均为 degoog):

Provider id 能力 实际支撑
degoog web_search 向你配置的 degoog 实例发起原生 GET /api/search(多引擎合并、打分、去重)。受保护实例可选用 Bearer Token。
degoog web_fetch 不经过 degoog:由 Harness 所在机器在 SSRF 防护下直接拉取 URL;degoog 核心无 scrape 端点。HTML 以 kind: 'html' 返回,由 dsh-tool-web 转为 Markdown。

因此:搜索流量指向你的 degoog;抓取流量不接触 degoog 实例,但仍受插件内置 fetch 守卫约束。

安装与启用

在 web profile 下安装:

dsh plugin --profile web add dsh-web-degoog

包声明了 dsh.bundle.patch,CLI 会自动维护 profile 的 bundle 栈:安装时并入图层并写入补丁,将 web.searchProvider / web.fetchProvider 设为 degoog;卸载时移出。

安装后必须配置 degoog 实例基址(serverUrl 为空时搜索侧视为未配置)。任选其一:

1、Plugins 页(推荐,免改文件)

侧栏打开 Plugins,在 Installed plugins 下展开 dsh-web-degoog,找到 web-search-degoog 行,点 Configure。修改会写入当前 profile 的实时条目,Save 后对下一次 search/fetch 生效,无需重启。

2、启动环境变量

DEGOOG_SERVER_URL=https://degoog.example.com dsh --profile web

API Key 可通过环境变量 DEGOOG_API_KEY 提供(与配置中的 apiKeyEnv 默认一致)。

3、Patch 文件(重启与热载仍有效)

在 ~/.dsh/profiles/web/cordis.patch.yml 中追加:

- id: web-search-degoog
  config:
    serverUrl: https://degoog.example.com

配置优先级(高到低):Plugins 页写入的 profile 条目 → 本包 bundle patch → 启动环境(DEGOOG_SERVER_URL、DEGOOG_API_KEY)→ 内置默认(空 URL 表示搜索未配置)。DSH 0.2.x 上这些字段为 volatile:操作时读取,保存后无需重载 provider;界面会对覆盖项显示重置入口。

若之后想用官方搜索等其它源,可在不卸载的前提下用用户 patch 或环境变量 $DSH_WEB_SEARCH_PROVIDER 覆盖 bundle 的选择。

web_fetch 与 Agent 预设

在 web profile 上,宿主侧的 tool-web 行默认关闭;各会话的 web_search / web_fetch 由 agent preset 决定。自带的 Standard、PTC、Cordis 预设已开启 fetch: true。Minimal 或自定义预设若未启用抓取,需在你自有副本的预设中显式打开,例如:

- id: tool-web
  name: '@deepseek-ai/dsh-tool-web'
  config:
    fetch: true
    searchTimeoutMs: 60000

已开始的会话不会随 bundle 变更 preset;bundle 不能修改官方内置预设,只能改你自己复制的预设。

配置字段摘要

字段 默认 含义
serverUrl '' degoog 实例根 URL;为空则搜索不可用,若仍选中 degoog 会在首次搜索时报 DEGOOG_SERVER_URL_MISSING。
apiKey - 明文 API Key;更宜用 apiKeyEnv,避免秘密进配置文件。Configure 页不展示,必要时写 patch。
apiKeyEnv DEGOOG_API_KEY 从凭证服务或启动环境解析,可解析时以 Authorization: Bearer ... 发送。
searchType web 传给 degoog 的 type(如 web、images 等,取决于实例安装的引擎)。
lang '' 可选语言代码,对应 degoog lang 参数。
allowPrivateAddresses false 仅 fetch 侧:为 true 时守卫允许拨号私有/回环地址,便于 homelab 与内网站点同机部署;Configure 页不展示,需 patch。

常见错误码包括:DEGOOG_SERVER_URL_MISSING、WEB_PROVIDER_CREDENTIAL_MISSING(401/403 且无 Key)、WEB_PROVIDER_ERROR、WEB_ABORTED。

安全与策略

Fetch 守卫(摘要):仅 http/https;拒绝 URL 内嵌凭证与过长 URL;先 DNS 再拨号;拒绝解析到 loopback/私有/链路本地等地址;连接绑定校验后的 IP 并保持 TLS SNI/Host;重定向逐步复检(最多 5 跳);解码正文上限 2 MB(可带 truncated);拒绝二进制类型;单跳 stall 30 s、总时长 60 s 兜底。

web_fetch 允许模型选择目标 URL,属于产品设计。若策略不允许,请使用 fetch: false 的预设。

搜索请求发往你所配置的实例;API Key 应仅通过 HTTPS 发送。

插件以当前 dsh 进程权限运行;安装前请自行审阅 源码 与 MIT 许可证,并确认实例与密钥管理方式符合你的合规要求。

卸载或切回官方搜索

dsh plugin --profile web remove dsh-web-degoog

bundle 图层会自动退出栈,含 degoog provider 选择,便于再选 DeepSeek 官方搜索。本包不删除代理预设目录或遗留 settings;若旧版创建过 ~/.dsh/.agent-presets/degoog-standard,需在 Settings → Agent presets 切换默认预设并手动删除目录;亦可从 ~/.dsh/settings.yaml 去掉遗留的 web-search-degoog: 段(DSH 0.2.x 首次启动会导入并重命名该遗留文件)。

结尾

dsh-web-degoog 把 DSH 的联网工具接到自托管 degoog:搜索走实例 API,抓取在本机直连并带 SSRF 防护,适合希望搜索基础设施自控、又要在 Harness 内保留标准 web_search / web_fetch 接口的 web profile 用户。

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装与配置请以仓库 README 为准。

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

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

小夜