The project's README from github.com/DDDMUC/dsh-free-search. As one markdown file: README.md.
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给 DeepSeek Harness (dsh) 添加多引擎搜索 provider 的插件,注册进 ctx.web seam。内置 web_search 工具自动选用,支持网页设置页切换引擎、配置 API key、一键测试所有引擎、弹出式命令切换引擎。
dsh 默认的搜索 provider 依赖 DeepSeek 官方 API key(DEEPSEEK_API_KEY)。如果你:
web_search 工具),……那么内置搜索必然失败,agent 会告诉你"无法联网"。
这个插件提供多个免费引擎 + 自动回退,彻底摆脱 DeepSeek 官方 key 的依赖。
/free-search-engine,弹出引擎选择窗口,点选即切换(等效设置页 + 保存)free_search_test 工具让 agent 一键测试所有引擎;设置页也有"测试引擎"按钮(直测当前引擎,不走回退链,付费引擎无 key 会明确报错)Note: perplexity unavailable or failed, using exa.)advanced_search 工具支持 timeRange:固定档、自定义相对值、绝对日期三种形式(详见下方逻辑说明)FREE 徽章,付费引擎带橙色 API KEY 徽章dsh-web-fetch-http provider,纯 JS,零额外依赖)WebSearchProvider seam 接口,与官方插件共存如果这个插件帮到了你,欢迎给仓库点个 ⭐(GitHub)——星标是开发者继续维护的最大动力,感谢支持!
| id | 引擎 | 费用 | 说明 |
|---|---|---|---|
ddg |
DuckDuckGo HTML | 免费 | 偶发限流(反爬),解封自动恢复 |
ddg-lite |
DuckDuckGo Lite | 免费 | 轻量版,同上 |
bing |
Bing | 免费 | 默认引擎,最稳定,中文优化(zh-CN) |
anysearch |
AnySearch AI | 免费 | AI 搜索,无 key(匿名额度) |
searxng |
SearXNG 元搜索 | 免费 | 多实例自动切换,支持自定义实例 |
exa |
Exa | 免费 | 无 key 也可用(MCP 匿名),配 key 提升额度 |
tavily |
Tavily | 免费 | 无 key 也可用(keyless 匿名),配 key 提升额度 |
keenable |
Keenable | 免费 | 无 key 也可用(MCP 匿名),配 key 提升额度 |
perplexity |
Perplexity | 付费 | 需 PERPLEXITY_API_KEY |
deepseek-official |
DeepSeek 官方 | 付费 | 需 DEEPSEEK_API_KEY |
bing(免费且最稳定),安装后开箱即用。v1/search REST 接口提供匿名的公共搜索额度,无需注册或 API key。额度有限流(适合日常搜索),但作为免费引擎之一,与其他免费引擎互相回退,体验稳定。mcp.exa.ai/mcp)支持匿名调用,不配 key 也能用;配置 EXA_API_KEY 后可获得更高额度。x-tavily-access-mode: keyless 头走 keyless 匿名额度,不配 key 即可用;配置 TAVILY_API_KEY 后走账号档,额度更高、结果质量更稳定。api.keenable.ai/mcp)匿名调用;配置 KEENABLE_API_KEY 后走 REST API(api.keenable.ai/v1/search),额度更高、按组织限流。git clone https://github.com/DDDMUC/dsh-free-search.git
dsh plugin --profile web add /path/to/dsh-free-search
然后重启:
dsh web
同作者的姊妹插件:在设置页里可视化创建/编辑 Agent 预设——分段提示词、15 项能力开关、内置「鲸鱼娘 / 梁神模式」模板,不用手写 YAML。两者搭配:free-search 解决"AI 联网搜索"、preset-workbench 解决"AI 人设能力编排",都是纯免费、开箱即用。
dsh plugin --profile web add github:DDDMUC/dsh-preset-workbench如果你觉得 preset-workbench 也有用,同样欢迎给它的仓库点个 ⭐。🙏
插件对 @deepseek-ai/dsh-settings 和 @deepseek-ai/dsh-tools 使用 peerDependencies,这是刻意的:DSH 运行时必须使用安装树中的唯一实例。请通过 dsh plugin --profile <profile> add ... 安装插件,不要把 DSH 核心包复制进 profile 的本地 node_modules;重复副本会导致工具调度器失效。
安装后,打开 设置 → 插件 → 可配置 标签页 → Free Search 卡片(官方设置页):
~/.dsh/.credentials.yaml(如 DEEPSEEK_API_KEY: sk-...,与官方 LLM provider 一致,一处管理所有 key)。插件读取优先级:凭据中心 > 设置页 > 环境变量,设置页填的 key 仅作为遗留兼容。Discard 只撤销尚未保存的编辑platform_search 工具按此过滤)
▲ 免费引擎(显示绿色 FREE 徽章与官网链接) |
▲ 付费/API Key 引擎(显示橙色 API KEY 徽章与获取链接) |
不用进设置页也能切换引擎:在聊天框输入 /free-search-engine,弹出引擎选择窗口(和 /model 选模型一样的交互),点选即切换,当前引擎会标记出来。等效于设置页切换 + 保存,且界面语言跟随设置页(中文/英文)。
命令只改首选引擎配置,搜索仍走 web_search + 统一回退链:即使首选引擎挂了也会自动换其他引擎,永不直接失败。系统提示词同步刷新。
配置存在 ~/.dsh/settings.yaml:
free-search:
provider: bing # ddg / ddg-lite / bing / searxng / anysearch / exa / tavily / keenable / perplexity / deepseek-official
lang: zh # 设置页界面语言(zh / en)
bingMarket: zh-CN # Bing 市场
region: cn-zh # DuckDuckGo 区域(可选)
searxngInstances: # 自定义 SearXNG 实例(可选)
- https://your-instance.example
exaApiKey: ... # 或通过设置页填写
tavilyApiKey: ... # 或通过设置页填写
keenableApiKey: ... # 或通过设置页填写
perplexityApiKey: ...
deepseekApiKey: ...
对 agent 说"测试一下所有搜索引擎",它会调用 free_search_test 工具,逐个测试并报告:
Search engine test:
- ddg: FAIL - DuckDuckGo is rate-limited right now (anti-bot challenge, usually temporary) - Bing works
- bing: OK (2 results, e.g. "DeepSeek Harness developer preview...")
- exa: FAIL - EXA_API_KEY not configured
让 agent 搜"最近一周的新闻"、"这个月的发布"、"最近 3 天的消息"、"7 月以来的更新",它会调用 advanced_search 工具,带 timeRange 参数。该工具同样走统一回退链,且可显式指定 engine,返回结构同 web_search。
timeRange 支持三种形式:
| 形式 | 示例 | 含义 |
|---|---|---|
| 固定档 | day / week / month / year |
分别 = 1 / 7 / 30 / 365 天 |
| 自定义相对值 | 12h、3d、2mo、1y |
最近 12 小时 / 3 天 / 2 个月 / 1 年 |
| 绝对日期 | 2026-07-01 |
该日期(含)之后发布的结果 |
各引擎对 timeRange 的处理逻辑:
| 引擎 | 参数 | 是否精确 | 说明 |
|---|---|---|---|
| Exa | startPublishedDate |
✅ 精确 | 自定义天数转成 ISO 日期(N 天前),绝对日期原样传入 |
| Keenable | published_after |
✅ 精确 | 相对值原样传(12h/3d/2mo/1y),绝对日期原样传 |
| Tavily | time_range |
⚠️ 近似 | 只认固定档,自定义天数自动映射到最近似档位 |
| SearXNG | time_range |
⚠️ 近似 | 同上 |
| DuckDuckGo / Lite | df |
⚠️ 近似 | 同上 |
| Bing / AnySearch | — | ❌ 忽略 | 无对应参数 |
"最近似档位"映射规则:≤2 天 → day,≤14 天 → week,≤90 天 → month,否则 year。例如 3d 在 Tavily 上按 day 处理,2mo 按 month 处理。
引擎链优先级:当带 timeRange 搜索时,支持时间过滤的引擎(tavily / exa / keenable / searxng / ddg / ddg-lite)会排到引擎链前面,确保过滤真正生效——即使首选引擎是 bing(不支持过滤),也会先尝试支持过滤的引擎。
示例对话:"帮我搜最近 3 天关于 DSH 的新闻" → agent 调用 advanced_search,timeRange: "3d"。
搜索到 URL 后,可以让 agent 读取网页全文(如"打开第一个链接看看内容")。web_fetch 工具已启用(官方 dsh-web-fetch-http provider):
web_fetch 无 SSRF 防护,agent 理论上可访问内网地址——按需使用让 agent 搜特定平台,如"在 GitHub 上搜 deepseek harness"、"看看 B站有什么相关视频"、"V2EX 上关于 dsh 的讨论"。platform_search 工具支持:
| 平台 | 用途 |
|---|---|
github |
GitHub 仓库搜索(API,免费无 key) |
v2ex |
V2EX 热门/相关主题 |
bilibili |
B站视频/内容搜索(公开接口) |
reddit |
Reddit 帖子/讨论搜索(公开 JSON API;部分网络环境可能被 Reddit 反爬拦截) |
hn |
Hacker News 技术社区讨论(Algolia 官方 API) |
stackoverflow |
Stack Overflow 技术问答(Stack Exchange 官方公开 API) |
wikipedia |
维基百科词条(中文环境用 zh.wikipedia.org,lang: en 时切换 en.wikipedia.org) |
npm |
npm 包搜索(registry 官方 API) |
全部走公开 API,零外部依赖、无需任何 key,开箱即用。
tools/ 目录附带了一个本地切换小工具(零依赖):
启动搜索引擎切换器.cmd(Windows)——双击启动本地 Node 服务(http://127.0.0.1:4789)并自动打开浏览器选择页面switch-engine.html —— 选择页面:显示当前引擎,点选新引擎,一键写入配置server.mjs —— 本地服务,负责读写 ~/.dsh/profiles/web/cordis.patch.ymlswitch-engine.ps1 —— 无界面命令行版:powershell -File tools/switch-engine.ps1 -Engine bing切换后重启 dsh web 生效。
配置卡片挂在官方设置页的
settings.plugin.item插槽(dsh 自带),配置读写走插件自建 bridge,不依赖 dsh-web-ui,插件可独立使用。
DuckDuckGo 等引擎可能需要代理才能访问,而 Node.js 的 fetch 默认不走系统代理。需要给 dsh 进程设置(Node 24+):
export NODE_USE_ENV_PROXY=1
export HTTPS_PROXY=http://127.0.0.1:7897 # 你的代理地址
export HTTP_PROXY=http://127.0.0.1:7897
Windows 用户:桌面快捷方式已内置此配置(set NODE_USE_ENV_PROXY=1&& set HTTPS_PROXY=...)。
lib/index.js:host 端。实现 WebSearchProvider(id / available() / search()),统一引擎路由 + 自动回退(付费引擎优先,免费兜底);解析 timeRange(固定档/相对值/绝对日期)并透传给各引擎;注册 free-search settings namespace;提供 /api/dsh-free-search-settings 读写桥 + raw-search 调试接口;注册 free_search_test、platform_search、advanced_search 工具;动态注入引擎清单到系统提示词(设置变更时自动刷新)。lib/client.js:浏览器端。React 配置卡片(引擎选择 + key 输入 + 连通测试 + 中英切换),挂载到官方设置页的 settings.plugin.item 插槽;注册 /free-search-engine 弹出式切换命令(commandUi popupSelect,与 /model 同机制)。cordis.patch.yml:插件 loader 配置。dsh's default search provider relies on the official DeepSeek API key (DEEPSEEK_API_KEY). If you:
web_search tool),...then the built-in search will inevitably fail, and the agent will tell you "I cannot access the internet."
This plugin provides multiple free search engines with automatic fallback, completely freeing you from relying on DeepSeek's official key.
/free-search-engine in the chat: a picker opens with all engines; click one to switch (equivalent to the settings page + save)free_search_test for the agent to check all engines in one call; the settings UI also has a "Test engine" button that tests the selected engine directly (no fallback chain; paid engines without a key report an explicit error)Note: perplexity unavailable or failed, using exa.). Search never fails outright.advanced_search tool supports timeRange: fixed tiers, custom relative values, or an absolute date (details below)FREE badge, while paid engines show an orange API KEY badge in the settings UIweb_fetch) — Allows the agent to read full webpage contents (official dsh-web-fetch-http provider, pure JS, zero extra dependencies)platform_search) — Search GitHub / V2EX / Bilibili / Reddit / Hacker News / Stack Overflow / Wikipedia / npm (public APIs, zero extra dependencies)WebSearchProvider seam inter