dsh-plugin-nuaa-search:为 DeepSeek Harness 提供免 key 的 web_search 后端

前言

DeepSeek Harness(DSH)内置 web_search 工具时,默认会走官方包 @deepseek-ai/dsh-web-search-deepseek,请求 DeepSeek 的 Anthropic 兼容搜索端点,因此需要官方 API key。在校园网关只提供 OpenAI 兼容接口、或当前网络与套餐拿不到 key 的环境里,web_search 会直接失败。

社区插件 dsh-plugin-nuaa-search(维护者 Oxygen640)不替换对话端点,而是在 Harness 的 ctx.web 接缝上注册名为 local-search 的搜索提供方,自行抓取 Bing 中文站、360 搜索或自建 SearXNG 的页面/API,把真实 URL、摘要和可读到的发布日期交给内置 web_search,全程不需要 DeepSeek 官方 key,也不需要第三方搜索 API key 或额外设置卡片。

这是什么

  • 定位:Zero-key web_search backend for DeepSeek Harness;实现 Harness 的 WebSearchProvider 接口,替换默认的 DeepSeek 官方搜索提供方。
  • 分类:联网工具(社区目录 SkillHub 条目:Oxygen640/dsh-plugin-nuaa-search)。
  • 说明:第三方社区插件,与南京航空航天大学无隶属关系;名称中的 nuaa 便于学生在插件市场里检索,插件本身与特定校园网无绑定。
  • 许可证:MIT;当前资料中的版本为 0.1.2(见仓库 package.json);GitHub 星标数为 1。
  • 源码:https://github.com/Oxygen640/dsh-plugin-nuaa-search

核心功能

替换搜索提供方

安装后,bundle 补丁会把 web.searchProvider 指向 local-search,并禁用官方 web-search-deepseek 那一行;若需恢复官方提供方,可在 profile 的 cordis.patch.yml 里重新启用。

多后端与降级

默认 backend 为 auto,等价于依次尝试 bing → so360 → searxng:哪个后端先返回结果就用哪个,单个引擎被墙或超时时只消耗一次超时,不会拖死整次搜索。

后端 说明
bing 默认首选,资料称约 270ms;抓 Bing 中国 HTML,含直链、摘要、发布日期
so360 降级;360 搜索 HTML 直链
searxng 需自备实例;走 JSON API,实例须开启 format=json
baidu 常遇反爬,出现验证页时返回空数组 [],不会把挑战页当结果

也可在配置里指定单一后端或自定义链,例如 "bing,so360"。

中文长尾查询变体

Bing 对带意图词的中文长尾词排序较差:例如「南京航空航天大学图书馆」能命中官网,而「南京航空航天大学图书馆 预约座位」可能偏向「南京市」泛页。插件默认开启 stripIntent:在原始查询之外,再跑一版去掉尾部意图词(如「开放时间」「预约座位」「几点」「怎么…」「地址」等)的实体短语查询,用最长公共子串覆盖率比较两批结果的相关性;平局时保留原始查询,普通搜索行为不变。资料中在失败样例上测得:nuaa.edu.cn 命中从 1/8 提升到 7/8。关闭方式:stripIntent: false。

行为与限制(README 已写明)

  • 相关性来自搜索引擎本身,插件透传结果,不重写、不摘要。
  • publishedAt 仅在摘要开头能读到日期时设置,不编造。
  • 每次调用一条查询,无分页;查询截断至 200 字符。
  • HTML 端的 site: 不支持,会当普通文本传给引擎。
  • Bing 对「实体名 + 多限定词」仍可能退化(如带校区名的图书馆查询);变体策略主要覆盖「实体 + 意图词」形态。
  • Bing 页面结构变更时需要更新解析器;过渡期可改 backend 为 so360。

安装与启用

本包 未发布到 npm,不要用 dsh plugin add <包名> 这种不存在 registry 条目的方式安装。

1、插件市场(资料推荐的最省事方式)

打开 DSH → Settings → Plugins,搜索 nuaa 安装。列表页:https://awesome-dsh-plugin.com/p/Oxygen640/dsh-plugin-nuaa-search/

2、预构建 tarball

dsh plugin --profile desktop add "https://github.com/Oxygen640/dsh-plugin-nuaa-search/releases/latest/download/dsh-plugin-nuaa-search.tgz"

3、从 GitHub 源码引用

dsh plugin --profile desktop add github:Oxygen640/dsh-plugin-nuaa-search

安装后 重启 Harness。DSH 生态是「一切皆插件」;SkillHub、awesome-dsh-plugin 等社区目录独立于 DeepSeek / 幻方,不是官方应用商店。

配置

在 cordis.patch.yml 对应行的 config 里传入;也可用环境变量作为后备。

键 默认 含义
backend auto 单一后端或链,如 "bing,so360"
maxResults 8 上限;调用方 request.maxResults 也会生效
deadlineMs 20000 内部截止时间,超时则返回已有结果
backendTimeoutMs 8000 每个后端的超时
searxngUrl — SearXNG 实例根 URL
userAgent Chrome 126 UA 抓取用的 User-Agent
log true 每次搜索在宿主日志打一行摘要
stripIntent true 是否启用意图词剥离的变体查询

环境变量后备:SEARCH_BACKEND、SEARCH_MAX_RESULTS、SEARCH_DEADLINE_MS、SEARXNG_URL、SEARCH_USER_AGENT。

典型用法与自测

Harness 侧无需改工具名:Agent 照常调用内置 web_search,由补丁切到 local-search 执行搜索。

维护者在仓库用 Node 内置测试跑提供方契约与联网用例(17 项,含后端链、配置、变体相关性、deadline、取消信号等):

node --test test/provider.test.mjs

适用场景与注意

适合:拿不到 DeepSeek 官方 API key、仍希望 Agent 能联网查资料的场景;可接受 HTML 抓取稳定性、以及搜索引擎本身排序与反爬策略。

安装前:插件以当前 DSH 进程权限访问网络并解析第三方搜索结果页,安装前应自行审阅 GitHub 源码 与 MIT 许可证,确认符合你的安全与合规要求。

不适合:需要官方 DeepSeek 搜索 SLA、site: 精确站点过滤、或强依赖百度 HTML 结果的场景(百度后端在资料中标注为常 blocked)。

结尾

dsh-plugin-nuaa-search 把 DSH 内置 web_search 的后端换成可本地降级的 Bing / 360 / SearXNG 抓取链,在 zero-key 环境下补上网页搜索能力,并对常见中文「实体 + 意图词」查询做了变体优化。

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

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

Xiaoye