让 DSH 的 web_search 工具走 Ollama 联网搜索 API,复用 OLLAMA_API_KEY,无需 DeepSeek 官方 Key。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-web-search-ollama
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:sryimnoob123/dsh-web-search-ollama
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
让 DeepSeek Harness 的
web_search工具走 Ollama 的联网搜索 API,无需 DeepSeek 官方 Key,复用你已有的OLLAMA_API_KEY。
这是什么
DeepSeek Harness 自带的 @deepseek-ai/dsh-web-search-deepseek 只支持 DeepSeek 官方 Anthropic 兼容端点(web_search_20250305 服务端工具),并要求一个 DeepSeek 官方 API key。如果你用 Ollama 跑模型(云端或本地),这个插件让 DSH 的 web_search 工具改走 Ollama Web Search API,认证使用与聊天模型相同的 OLLAMA_API_KEY。
| 内置 DeepSeek 插件 | 本插件 | |
|---|---|---|
| 依赖 Key | DEEPSEEK_API_KEY(DeepSeek 官方) |
OLLAMA_API_KEY(Ollama) |
| 协议 | Anthropic Messages + web_search_20250305 |
Ollama REST /api/web_search |
| 适用场景 | 使用 DeepSeek 官方 API | 使用 Ollama(云/本地) |
工作原理
插件在 DSH 的 ctx.web seam 上注册一个 id 为 ollama 的搜索 provider:
- 收到
web_search工具的query - 以
Authorization: Bearer $OLLAMA_API_KEY调用POST https://ollama.com/api/web_search - 将 Ollama 返回的
{title, url, content}映射为 DSH 标准的{url, title, snippet}结果
没有命中时返回空 sources 列表(不是报错),模型会看到"没搜到"而不是"搜索失败"。结果里缺 url 的条目会被丢弃,不会把坏形状传给 seam。
插件不向会话日志写入任何自定义事件(早期版本用 session.append("web/ollama-search-request", ...) 记录请求,会让 harness 的会话解析器拒绝整个日志、导致历史加载失败——已移除)。
安装
1. 添加插件
cd $DSH_HOME/profiles/<你的profile>
pnpm add dsh-web-search-ollama@github:sryimnoob123/dsh-web-search-ollama
# 或本地开发时使用 link:
# pnpm add link:/绝对路径/dsh-web-search-ollama
然后将插件加入 profile 的 package.json bundles 列表:
"dsh": {
"profile": {
"bundles": [
"...原有 bundle...",
"dsh-web-search-ollama"
]
}
}
2. 安装依赖并配置 web seam(一键)
cd $DSH_HOME/profiles/<你的profile>
pnpm install
# 一键写入 web seam 配置(自动追加 searchProvider: ollama + 禁用内置 DeepSeek 搜索)
node node_modules/dsh-web-search-ollama/scripts/install-patch.mjs
# 或指定 profile 目录:
# node node_modules/dsh-web-search-ollama/scripts/install-patch.mjs C:/Users/你/.dsh-v4lite/profiles/web-desktop
# 只检查不写入:
# node node_modules/dsh-web-search-ollama/scripts/install-patch.mjs --check
脚本幂等、自动备份、UTF-8 无 BOM 写入(避免手动编辑 YAML 时被工具转坏编码——那会让 searchProvider 配置失效、搜索回落到内置 DeepSeek provider)。
脚本还会设置用户级环境变量 DSH_WEB_SEARCH_PROVIDER=ollama(Windows 用 setx,其他平台提示手动设置)。这是双保险:dsh-web 在 patch 配置缺失时读这个环境变量选 provider,所以即使 cordis.patch.yml 被外部工具写坏,搜索也不会静默回落到内置 DeepSeek provider。
如果不想用脚本,手动在 profile 的 cordis.patch.yml 末尾追加(务必用 UTF-8 无 BOM 保存):
# web seam 选择 ollama provider(覆盖 base 的 deepseek-official)
- id: web
config:
searchProvider: ollama
# 禁用 DeepSeek 官方搜索,避免两个 provider 并存(WEB_PROVIDER_AMBIGUOUS)
- id: web-search-deepseek
disabled: true
3. 配置 API Key
确保 $DSH_HOME/.credentials.yaml 中有:
OLLAMA_API_KEY: <你的Ollama API Key>
4. 重启
重启 DSH 后即可使用。
验证
curl https://ollama.com/api/web_search \
-H "Authorization: Bearer $OLLAMA_API_KEY" \
-d '{"query":"what is ollama?"}'
在 DSH 中让模型执行一次联网搜索,应看到结构化来源列表而非报错。
配置项
可在 $DSH_HOME/settings.yaml 的 web-search-ollama: 段覆盖默认值:
web-search-ollama:
apiKeyEnv: OLLAMA_API_KEY # 凭据引用(默认 OLLAMA_API_KEY)
maxResults: 5 # 每查询最大结果数(默认 5,1-10,超界自动收敛)
# baseURL: https://ollama.com/api/web_search
| 配置项 | 默认值 | 说明 |
|---|---|---|
apiKeyEnv |
OLLAMA_API_KEY |
凭据引用名 |
maxResults |
5 |
每查询最大结果数,范围 1-10(自动 clamp) |
timeoutMs |
30000 |
单次搜索超时(毫秒),超时报 WEB_PROVIDER_ERROR |
baseURL |
https://ollama.com/api/web_search |
端点地址;也可用环境变量 OLLAMA_WEB_SEARCH_BASE_URL 覆盖 |
available()只在配置可解析且有凭据来源(字面 key / 环境变量 / credentials 服务)时为 true; 非法apiKeyEnv会让 provider 标记为不可用而不是抛错。
切换搜索源
本插件只是注册 ollama 搜索 provider,选不选由配置决定——不会强制任何用户。想换回 DeepSeek 官方搜索:
# 1. 改环境变量(用户级)
[Environment]::SetEnvironmentVariable("DSH_WEB_SEARCH_PROVIDER", "deepseek-official", "User")
# 或删掉环境变量,让 patch 配置决定:
# [Environment]::SetEnvironmentVariable("DSH_WEB_SEARCH_PROVIDER", $null, "User")
# 2. 去掉 patch 里对 web-search-deepseek 的禁用(把 disabled: true 删掉)
# 3. 重启 DSH
注意 patch 配置优先于环境变量:patch 里写了 searchProvider: ollama 时,环境变量改了也不生效,需要两处一起改。
常见问题
搜索报 no web_search_tool_result blocks
这是把内置 web-search-deepseek 的 baseURL 指向 Ollama 时的典型错误:Ollama 的 Anthropic 兼容端点不会返回 DSH 期望的 web_search_tool_result 块。请按上文安装步骤使用本插件,并清除 settings.yaml 中 web-search-deepseek.baseURL 的覆盖。
报 WEB_PROVIDER_UNAVAILABLE / 搜索不可用
确认 .credentials.yaml 中存在 OLLAMA_API_KEY,且 web 行的 searchProvider 已设为 ollama。
License
MIT
链接
同类插件
Tencent/BrowserSkill#dsh-plugin-browserskill★ 9166
BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
omdsh-dev/dsh-browser#packages/browser/bridge-browser★ 844
Chrome 侧边栏扩展,让 DSH 直接操控你的浏览器,无需视觉能力。
liustack/modsearch★ 750
纯文本 agent 的联网搜索桥:搜索网页与 X,返回结构化 JSON 证据(search/fetch/引用)。
DDDMUC/dsh-free-search★ 487
DSH 免费搜索插件:7 个引擎(DuckDuckGo/Bing/SearXNG 免费 + Exa/Perplexity/DeepSeek 付费)、自动回退、设置页 UI(API key 输入 + 官网链接)、web_fetch、引擎测试工具。
wqty123/dsh-browser★ 124
共享真实浏览器:用户可观看并随时接管的原生 Electron 窗口,agent 通过 CDP 驱动,内置 20 个 browser_* 工具(打开/快照/执行/填表/截图/下载/登录态);任务级会话隔离、登录态持久化、人机验证识别,纯 `dsh web` 无需桌面外壳即可自托管。
Tabbit-Browser/dsh-tabbit★ 110
让 DeepSeek Harness 能够控制 Tabbit 浏览器:安装即自动加载 tabbit-browser skill,检测国际版 Tabbit 与国内版 Tabbit Browser 正式版(>= 1.9.0),检查 tabbit-cli 常驻运行时,按平台诊断调用 CLI 所需的 DSH sandbox 模式,并在没有合格版本时通过后台任务下载与系统地区匹配的正式版安装包。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。