dsh-deepseek-search-account:第三方对话网关下用 DeepSeek 账号恢复 web_search / web_fetch

前言

在 DeepSeek Harness(DSH)里,对话模型可以走 DeepSeek 账号,也可以走第三方订阅或网关,例如 OpenCode Go(opencode.ai/zen/go)、其他 Anthropic 兼容端点,或 pi-ai 等 provider。聊天照常进行,但内置的 web_search、web_fetch 是否还能用,取决于 harness 里搜索 provider 如何判断「当前会话」的模型路由。

内置实现(dsh-web-search-deepseek、dsh-web-deepseek-api)只有在发起会话的 provider 为 deepseek-account 时,才会用已登录的 DeepSeek 账号做搜索;走 OpenCode Go 等路由时,会回退到 DEEPSEEK_API_KEY。未配置 API Key 时,常见报错是:DeepSeek search has no API key for "DEEPSEEK_API_KEY"。下面介绍社区插件 dsh-deepseek-search-account(维护者 Chip-G0202,分类:联网工具),它把搜索与抓取改走官方 Search / Fetch API,并优先使用 DSH 里已登录的 DeepSeek 账号,从而在不依赖 DEEPSEEK_API_KEY 的前提下恢复联网工具。

这是什么

dsh-deepseek-search-account 是一个体量很小的 DSH 插件(package 版本 0.3.0,MIT 许可证)。定位是:当聊天模型由外部订阅或网关提供、而你在 DSH 设置里仍登录了 DeepSeek 账号时,让内置 web_search 与 web_fetch 继续工作;搜索与页面抓取在官方 DeepSeek Search / Fetch API 上执行,消耗的是该账号的联网配额,不占用 OpenCode Go 等聊天订阅的 token。

目录页:https://www.skillhub.cn/plugins/Chip-G0202/dsh-deepseek-search-account
源码与说明:https://github.com/Chip-G0202/dsh-deepseek-search-account

为什么需要它

内置 provider 会用类似下面的条件判断是否会话属于 DeepSeek 账号路由:

ctx.get("agents")?.currentInitiator()?.session.requestContext()?.provider === "deepseek-account"

第三方网关作为 chat provider 时,上述检查不成立,内置逻辑会尝试 DEEPSEEK_API_KEY;没有 Key 则 web_search 失败。本插件在每次 search / fetch 时通过 ctx.deepseekAccount.resolveToken(endpoint) 解析账号 token,不依赖会话的 model route;仅在账号登录不可用时才回退到 DEEPSEEK_API_KEY(Bearer)。

核心功能

经 README 核实,插件主要做这些事:

  1. 在 ctx.web 上注册搜索 provider deepseek-account-search 与抓取 provider deepseek-account-fetch。
  2. 搜索(默认 mode: search-api):对官方接口 POST https://api.deepseek.com/v1/tools/search 发起请求(约 0.5–1 秒/次),返回 title、url、snippet、date;不额外占用对话模型的辅助轮次与 token。
  3. 抓取:对 POST https://api.deepseek.com/v1/tools/fetch 发起请求,将页面正文以 Markdown 形式返回,替代内置匿名 http 抓取路径(可在配置里只改搜索、保留 fetchProvider: http)。
  4. 保留 legacy 后端 mode: messages(Anthropic 兼容 Messages + web_search_20250305 服务端工具),作为显式降级选项。
  5. 通过包内 cordis.patch.yml 注册上述 provider,并将 web.searchProvider / web.fetchProvider 固定指向它们;包声明 dsh.bundle,dsh plugin add 会写入 profile bundles 并在启动时应用 patch。

适用与不适用

适合安装(需同时满足 README 中的条件):

  • DSH 对话模型来自第三方订阅或网关,而非 DeepSeek Account 模型。
  • 已在 DSH(Settings → Account)登录 DeepSeek 账号,且允许该账号用于搜索与抓取。
  • 内置 web_search 因缺少 DEEPSEEK_API_KEY 报错,且你无意或无法配置 DeepSeek API Key。

不必安装:

  • 聊天模型本身就是 DeepSeek Account 模型(内置已用账号登录搜索)。
  • 已保存 DEEPSEEK_API_KEY,且可在 Plugins → Built-in plugin settings → Web search 启用内置 Search API。
  • 已使用其他联网插件(Exa、Tavily、SearXNG、智谱等)且满足需求。

安装与启用

插件要求 Node.js >= 22。安装后需重启 DSH(profile bundle 列表变更在启动时生效;Desktop 使用 desktop profile)。

从 GitHub 安装到 profile

dsh plugin --profile desktop add github:Chip-G0202/dsh-deepseek-search-account
# 纯 `dsh web` 服务时使用:--profile web

本地路径或 Release 包

dsh plugin --profile desktop add /path/to/dsh-deepseek-search-account
dsh plugin --profile desktop add https://github.com/Chip-G0202/dsh-deepseek-search-account/releases/latest/download/dsh-deepseek-search-account.tgz

手动写入 cordis.patch.yml(可选)

若不想以 package 形式安装,可将插件目录放到稳定路径,在 ~/.dsh/profiles/<profile>/cordis.patch.yml 增加两行(路径改为你本机实际位置):

- insert:
    - id: web-search-deepseek-account
      name: '/path/to/dsh-deepseek-search-account/provider.js'
      config:
        mode: search-api
        count: 10
- id: web
  name: '@deepseek-ai/dsh-web'
  config:
    searchProvider: deepseek-account-search
    fetchProvider: deepseek-account-fetch

仅替换搜索、抓取仍用本地匿名传输时,可将 fetchProvider 设为 http。

说明:DSH 可热加载 profile 配置,但若只改已有行的模块路径,不会重新 import 插件模块;修改 provider.js 后应重启 DSH,或对对应行切换 disabled: true 再改回。

配置

以 bundle 安装时,默认配置在包内 cordis.patch.yml。可在 profile 的 patch 里用相同 id 覆盖,例如:

- id: web-search-deepseek-account
  name: dsh-deepseek-search-account
  config:
    mode: search-api
    count: 8
配置项 默认值 含义
mode search-api search-api 为官方 Search API;messages 为 Messages + web_search_20250305
baseURL https://api.deepseek.com/v1/tools Search/Fetch API 基址(自动追加 /search、/fetch)
count 10 单次搜索返回条数,1–50;工具侧 searchMaxResults 更小时以其为准
sendOriginalQuestion true 是否发送 ori_question(会话最近用户提示,≤128 字符)
fetchMaxChars 100000 单次 fetch 返回 Markdown 字符上限
fetchTimeoutMs 30000 单次 Fetch API 超时(毫秒)
apiKey / apiKeyEnv 未设置 / DEEPSEEK_API_KEY 账号不可用时 API Key 回退
messagesBaseURL、model 等 见 README 仅 mode: messages 时使用

典型用法

安装并重启后,无需单独调用插件 API:会话里 agent 继续使用 harness 内置工具 web_search 与 web_fetch 即可,底层会走本插件注册的 deepseek-account-search / deepseek-account-fetch。

使用前请确认 DSH 已登录 DeepSeek 账号;对话仍由 OpenCode Go 等第三方 provider 承担,搜索与抓取账单与限流落在 DeepSeek 账号侧。

计费、配额与安全注意

  • 自 2026-11-01 00:00(北京时间)起,Search / Fetch API 按成功请求计费:约 5 元 / 1000 次成功请求(约 0.005 元/次);搜索仅在有非空 results 时计费,fetch 仅在返回页面内容时计费;失败与超时不计费。详见官方 Search & Fetch 指南。
  • 搜索与抓取不消耗聊天模型 token,也不动用 OpenCode Go 等聊天订阅;仅涉及 DeepSeek 账号的联网配额。Search 限流约 100 QPS,Fetch 约 25 QPS。
  • mode: messages 每次搜索会多一轮辅助模型调用(数千 input token、约 4–6 秒),仅建议作回退。
  • 账号 token 经 DSH 凭证服务按请求读取;插件以当前 dsh 进程权限运行。安装前请自行审阅源码与 MIT 许可证,社区目录(SkillHub)与 DeepSeek / 幻方无官方从属关系,不宜当作官方应用商店。

结尾

dsh-deepseek-search-account 解决的是「聊天走第三方网关、联网仍想用 DeepSeek 账号官方 Search/Fetch、又不想配 DEEPSEEK_API_KEY」这一组合场景。经过上面的安装与账号登录步骤,内置 web_search / web_fetch 可恢复,且与聊天订阅解耦。

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

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

小夜