前言¶
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 环境下补上网页搜索能力,并对常见中文「实体 + 意图词」查询做了变体优化。