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

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)、今日 / 本月 / 累计 用量,标题右端一个可以点的动作直接切换接管;侧边栏变窄时文案先缩写、再逐档降列,不会折行。

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

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。
评论
0发表评论