做了个 Deepseek 搜索服务的 OpenCode 插件

| 约 5 分钟
QThinker
QThinker
80后,前地产屌丝,宽客,Coder

搞了个插件,用 Deepseek 刚开放的搜索接口承接 OpenCode V2 自带的 websearch 工具,顺手把本地用量统计也做了。之前试过 OpenCode 控制台中的 Hosted Web Search 服务,感觉有点不划算,随随便便几刀就没了,相比之下还是 Deepseek 性价比高。

160e13b44dba4f17bc786085b8ce277a.jpg

npm - @qthinker/opencode-deepseek-search
Github - opencode-deepseek-search

插件做三件事

1. 接管内置 websearch,模型零感知。
插件不改提示词、不加新工具名,而是在 websearch 被调用时把结果换成 DeepSeek 的。模型的调用习惯、权限确认、
输出格式都和原来一样——这是我觉得最舒服的接入方式:不需要在系统提示里教模型"搜索请用 xxx 工具"。
同时它也注册了一个名为 deepseek 的 websearch provider,喜欢显式配置的可以用
"websearch": { "provider": "deepseek" } 强制路由。

2. 干净的网页抓取。
deepseek_fetch 传一个 URL 进去,拿回来的是提取好的 Markdown 正文,超长按 fetchMaxChars 截断并明确告知。
理论上 deepseek 的 fetch 接口直接返回 markdown ,应该会比较节省 token 。

3. 本地用量与费用估算。
deepseek_usage 报告今天 / 本月 / 累计的搜索与抓取次数和估算费用。计费口径和 DeepSeek 文档一致:只有返回了结果的请求计费,空结果与失败不计费;单价用 pricePerThousand(元 / 千次,默认 5,即 ¥0.005/次)估算。数据只存在本机插件存储里(保留 60 天)。

界面:侧边栏与三种语言

除了工具,插件内置 OpenCode V2 的 TUI 和 Desktop 侧边栏支持:

  • TUI:会话侧边栏末尾多一块 DeepSeek 卡片——状态(已启用 / 已停用 / 未接管 / 缺 Key)、今日 / 本月 / 累计 用量,标题右端一个可以点的动作直接切换接管;侧边栏变窄时文案先缩写、再逐档降列,不会折行。
    baf0d894156b4c4db794abf05850115f.png

  • 桌面端:会话侧区域多一个 DeepSeek 页签(也会出现在 New tab 列表和 + 菜单里),同样的状态和数字,一个按钮切换,实时刷新。
    f61c25a9bce4467ab19b4a75917f3912.jpg

0.3.0 起这两处的文案支持 英文 / 日文 / 简体中文。语言由服务端解析一次
(options.language > LC_ALL/LANG 前缀 > 英文),再经 RPC 下发给两侧边栏——工具输出和界面永远同一种语言。侧边栏很窄,所以每种语言都有自己的文案阶梯:中文能放下今日 Search 0 Fetch 3 ¥0.015,放不下就用降级文案,日文和英文同理。

有一点是刻意保留英文的:模型可见的文本——工具描述、搜索结果的 ## [title](url) 格式、Published:、空结果提示。这样被接管的websearch 和内置工具输出形状完全一致。

快速上手

先把 DeepSeek API Key,写进用户级环境变量(Windows):

[Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "sk-...", "User")
opencode service restart   # User 变量只进新进程

然后在全局 ~/.config/opencode/opencode.jsonc 里加一条插件(桌面端只读全局配置):

{
  "plugins": [
    {
      "package": "@qthinker/opencode-deepseek-search",
      "options": {
        "mode": "deepseek",
        "language": "zh-CN",        // "en" | "ja" | "zh-CN";不填则跟随 LC_ALL/LANG
        "count": 5,
        "pricePerThousand": 5,
        "apiKey": "{env:DEEPSEEK_API_KEY}"
      }
    }
  ]
}

参数含义可以参考 Github 项目 README 。

随时切回原生

有三种方式随时切回系统内置的 websearch 服务:

方式 操作 持久化
侧边栏 点卡片右端的动作,或桌面面板按钮 是
配置 改 options.mode,保存即生效 是
工具 让模型调 deepseek_mode {"mode":"native"} 是

平常喜欢使用 OpenCode 的朋友可以试试这个插件,欢迎提 issue。

22 0

评论

0
正在加载评论...

发表评论