前言¶
在 DeepSeek Harness(DSH)官方桌面里,web_search 和 web_fetch 需要可靠的联网后端。若你使用 AnySearch HTTP API,单把 Key 在额度或计费触发 HTTP 402 时,整次搜索会直接失败;本机 DNS 若缓存到失效节点,还可能出现 fetch failed 而搜索不可用。社区插件 sousuo(仓库 yueyexiayu/dsh-sousuo)面向官方桌面,把 AnySearch 适配为 DSH 的 search/fetch Provider,并在 402 时在本机多把 Key 间轮换重试。下面介绍它是什么、能做什么,以及如何安装启用。
这是什么¶
sousuo 由维护者 yueyexiayu 发布,在 SkillHub 目录中归类为 联网工具。当前版本 0.1.6(见仓库 package.json)。一句话定位:DSH desktop search provider —— 后端仍是 AnySearch 的 web_search / web_fetch HTTP API;插件负责 Provider 适配、遇到 HTTP 402 时用本地多把 API Key 立刻换下一把并重试同一请求(一次请求最多转一圈 Key,然后失败),以及搜完后必须作答相关的系统提示。401 / 403 / 429 不换 Key。
项目说明中强调:当前深度适配个人使用,供思路与借鉴,尽量不要直接照搬;面向 官方桌面,不要把 Key 写进 patch、README、Git 或对话。
核心功能¶
AnySearch 与官方 tool-web 的分工¶
web_search/web_fetch仍由官方 tool-web 注册并控制开关;插件只提供 AnySearch provider,不会把已关闭的web_fetch重新开启。- 原生搜索的安全声明由官方 tool-web 渲染;provider 不把声明伪装成
content/ answer。 - 正常零结果显示
No results found.;来源被裁剪后为空时有明确提示;请求失败和取消仍抛出官方WEB_PROVIDER_ERROR/WEB_ABORTED,不返回空成功。
HTTP 402 与多 Key 轮换¶
- Key 存放在本机
$DSH_HOME/plugins/sousuo/keys(默认$DSH_HOME为~/.dsh),一行一把,#开头为注释;state.json记录当前序号,同样不进 Git。 - 每次请求捕获独立的 current-first 候选槽位快照,最多遍历一轮 Key,并发下不会因切换而跳过或重复 Key。
- 402 换下一把 Key 重试;401 / 403 / 429 不轮换,并保留
Retry-After。
连接与 DNS¶
- 连不上 API 的
TypeError: fetch failed会先按系统 DNS 再试一次;仍失败且目标无需环境代理时,才用公共 DNS/DoH 解析到的 IPv4 直连(SNI 仍是请求主机名),减轻本机缓存失效 GTM 节点导致整次搜索失败的情况。 - 配置了
HTTP_PROXY/HTTPS_PROXY/ALL_PROXY时保留系统代理路径,不绕代理发送凭据;NO_PROXY仅对能安全确认的常用规则启用直连。
高级工具(默认关闭)¶
默认 不 向模型暴露 anysearch_capabilities / anysearch_search / anysearch_batch_search,避免部分高推理模型先做能力发现后在思考里「再搜一次」并 stop,界面像联网自动停了。普通问题走 web_search 即可,后端已是 sousuo。若需要垂直 tag,在 desktop patch 里为本插件设置 advancedTools: true。
其他行为(README 已说明)¶
- 连接、正文读取和 DNS fallback 共用当前 HTTP 请求的 55 秒时限;502 / 503 / 504 会重试并释放旧响应。
- API 响应 JSON 解析前限制 5,000,000 字节;搜索最多保留 50 个来源,并对标题、摘要、URL 等有长度上限。
- 本地 55 秒截止映射为官方
WEB_FETCH_TIMEOUT;响应过大映射为WEB_FETCH_TOO_LARGE;取消为WEB_ABORTED。
安装与启用¶
安装步骤来自仓库 README,不是 dsh plugin add github:... 一类 CLI 安装;README 写明本方案直接管理已声明的 file: 依赖,不另外运行 CLI 插件安装,也不把 sousuo 再加入 dsh.profile.bundles(用户 patch 负责启用,避免重复注册)。
1、复制插件到 plugins 目录¶
将本仓库复制到 $DSH_HOME/plugins/sousuo。
2、在 desktop profile 声明 file 依赖¶
在 $DSH_HOME/profiles/desktop/package.json 的 dependencies 中增加:
"sousuo": "file:../../plugins/sousuo"
保留其他依赖及 dsh.profile.bundles。使用当前 DSH 随附的 pnpm 在该 profile 运行:
pnpm install --ignore-scripts
并保留生成的 pnpm-lock.yaml。profile 的 pnpm-workspace.yaml 保持 nodeLinker: hoisted、autoInstallPeers: false。
包声明 @deepseek-ai/dsh-web / @deepseek-ai/schemastery 等为 Host 提供的 peer,不另装一套官方 DSH runtime。
3、写入 cordis.patch.yml¶
在 $DSH_HOME/profiles/desktop/cordis.patch.yml 写入:
- insert:
- id: sousuo
name: ./node_modules/sousuo/lib/index.js
config:
baseURL: https://api.anysearch.com
# advancedTools: true # 可选:重新暴露 anysearch_* 垂直搜索工具
- id: web
config:
searchProvider: sousuo
fetchProvider: sousuo
注意:- id: web 会整段替换 web 的 config。完成后 完全退出 DeepSeek Harness(macOS:⌘Q)再打开。
4、配置本机 Key 文件¶
cp keys.example keys
chmod 600 keys
用编辑器把真实 Key 写入 keys,不要贴到聊天或 Git。C0/C1 控制字符在 trim 前会被拒绝,错误仅报告行号。
典型用法¶
启用后,在对话里像使用官方联网一样调用 web_search、web_fetch 即可;searchProvider 与 fetchProvider 均指向 sousuo 时,流量经本插件转发到 AnySearch(默认 baseURL: https://api.anysearch.com)。
若已在 patch 中打开 advancedTools: true,模型还可使用 anysearch_* 系列垂直搜索与批量搜索工具;默认关闭时无需改用法,普通检索仍走 web_search。
适用场景与注意¶
适合谁: 已在官方 DSH 桌面使用 AnySearch、希望用多把 Key 缓解 402、并需要 DNS/代理策略与官方错误语义一致的个人或自建环境开发者。
权限与安全: 插件以当前 DSH 进程权限运行;安装前应自行阅读源码与许可证(仓库打包白名单含 LICENSE),确认 Key 仅留在本机 keys 与运行态,不进 Git 与对话。
生态说明: DSH 理念是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
开发同步: 修改插件源码后,README 要求递增 package.json 与 lib/version.js,并在 desktop profile 用 bundled pnpm 移除再添加 file: 依赖、frozen-lockfile 安装,然后完全退出 Host 再打开实测;普通 install / update 可能保留旧硬链接,不能保证与源码完全同步。
结尾¶
sousuo 把 AnySearch 接到 DSH 官方桌面的 web_search / web_fetch 上,用本地 Key 轮换应对 402,并在连接层做了 DNS 与代理相关的补救;默认隐藏高级 anysearch 工具,减少模型误用导致的「假停」。需要细节与开发测试命令时,以仓库 README 为准。