前言¶
在 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 核实,插件主要做这些事:
- 在
ctx.web上注册搜索 providerdeepseek-account-search与抓取 providerdeepseek-account-fetch。 - 搜索(默认
mode: search-api):对官方接口POST https://api.deepseek.com/v1/tools/search发起请求(约 0.5–1 秒/次),返回title、url、snippet、date;不额外占用对话模型的辅助轮次与 token。 - 抓取:对
POST https://api.deepseek.com/v1/tools/fetch发起请求,将页面正文以 Markdown 形式返回,替代内置匿名http抓取路径(可在配置里只改搜索、保留fetchProvider: http)。 - 保留 legacy 后端
mode: messages(Anthropic 兼容 Messages +web_search_20250305服务端工具),作为显式降级选项。 - 通过包内
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 可恢复,且与聊天订阅解耦。