下载地址
https://api.skillhub.cn/api/v1/download?slug=%40zcwl%2Fmulti-search-engine将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @zcwl/multi-search-engine。通过公开搜索URL在16个搜索引擎(7个国内直连+9个国际)中做跨引擎检索、结果去重与多源交叉验证,无需API Key,内置零依赖Python脚本。Use when 用户要求“搜一下/查资料/多找几个来源/核实消息/找公众号文章/排查报错/找论文或开源项目”时。输入自然语言查询词,输出带来源链接与可信度标注的结构化结果。
不适用于私有数据检索、批量抓取、需要登录后可见的内容。
阅读全文 (展开查看完整说明)
概述
多引擎搜索
通过公开搜索 URL 聚合 16 个搜索引擎,做跨源检索、去重与交叉验证。不需要任何 API Key。
本技能包包含:
SKILL.md(本文件):选引擎、构造查询、抓取降级、结果综合的完整流程scripts/multi_search.py:零第三方依赖脚本(Python 3.7+ 标准库),链接生成 + 抓取聚合references/engines.md:16 引擎完整目录、可达性标注、10 个垂直站点、意图选型矩阵references/operators.md:搜索操作符、时间过滤、DuckDuckGo Bangs 速查
核心能力
- 16 引擎统一检索:7 个国内直连(必应中国/必应国际入口/百度/360/搜狗/微信/神马)+ 9 个国际(Google/Google HK/DuckDuckGo/Ecosia/Yahoo/Startpage/Brave/Qwant/WolframAlpha),每个引擎标注网络要求、反爬强度与适用意图。
- 两种执行方式:Agent 直接用网页抓取工具请求搜索 URL;或运行内置脚本(默认“链接模式”任何环境可用,
--fetch抓取模式自动提取标题和链接)。 - 精准查询构造:
site:、filetype:、intitle:、精确匹配、排除词、时间范围、中英双语改写、DuckDuckGo Bangs。 - 多源去重与加权:URL 规范化去跟踪参数,还原必应/Google/DDG/360 的中转链接,被多个引擎同时命中的结果自动排前。
- 失败可降级:遇到 403/429/验证码/超时自动换端点、换引擎;全部失败仍输出可点击的搜索链接,保证任务不空手而归。
适用场景
| 用户怎么说 | 本技能做什么 |
|---|---|
| “帮我搜一下最近的国产大模型发布消息,多找几个来源” | 国内引擎组 + 时间过滤,聚合去重后按来源数排序 |
“这个报错是什么意思:asyncio TimeoutError” | 必应国际入口 + site:stackoverflow.com/github.com 检索排错资料 |
| “找几篇讲 RAG 评测的公众号文章” | 微信搜索(搜狗微信入口)+ 搜狗网页兜底 |
| “核实一下这条传言是不是真的” | 3 个以上独立引擎交叉验证,标注一致来源与冲突点 |
| “找 transformer 相关的开源项目 / 学术论文” | 追加 GitHub、Google/百度学术垂直站点 |
不适用于:
- 私有数据、企业内网、个人文件的检索(这些内容不在公开搜索索引中)
- 大规模批量抓取或监控(本技能内置频率约束,不做采集器)
- 需要登录后可见的内容(私域社群、付费数据库、邮箱等)
- 搜索引擎结果页内的信息仅作线索,关键事实必须打开原文核实后再采信
使用流程
Step 1:判断网络环境与查询语言
- 查询以中文为主 → 优先国内引擎组(大陆直连,成功率高)。
- 查询以英文为主、或找官方英文文档 → 优先必应国际入口(
ensearch=1,大陆可直出国际结果);在可访问国际互联网的环境下再用 Google/DDG。 - 中英混合的技术主题 → 双语各搜一轮,例如中文「向量数据库选型」与英文「vector database comparison 2026」。
Step 2:按意图选 2–4 个引擎
不要默认查全部 16 个引擎。日常检索选 2–4 个最相关的即可;需要事实核实时再扩到 3–5 个独立索引。
| 场景 | 国内环境默认组 | 国际网络环境默认组 |
|---|---|---|
| 综合/找官网 | bing-cn、baidu | google、duckduckgo |
| 英文技术排错 | bing-int、bing-cn | google、duckduckgo、stackoverflow |
| 中文资讯/热点 | baidu、so360、sogou | google(加时间过滤) |
| 公众号文章 | weixin、sogou | — |
完整意图矩阵(学术、隐私、计算、视频等)见 references/engines.md。
Step 3:构造查询词与搜索 URL
- URL 模板形如
https://cn.bing.com/search?q={关键词}&ensearch=0,关键词需百分号编码(手工拼接时空格用+或%20,中文直接用脚本编码)。 - 需要收敛结果时加操作符:
site:域名、filetype:pdf、"精确短语"、-排除词、intitle:词。 - 需要时效信息时加时间参数(Google
tbs=qdr:d/w/m、搜狗tsn、DDGdf),脚本统一用--time。 - 操作符兼容性与更多示例见
references/operators.md。
Step 4:执行检索(二选一)
- 方式 A:Agent 网页抓取(无需脚本,适合单次查询):直接抓取拼好的搜索 URL,见下文“执行方式”。
- 方式 B:内置脚本(适合多引擎、要 JSON/报告文件、可复现):运行
scripts/multi_search.py。
Step 5:失败降级(按顺序尝试,不要死磕一个引擎)
- 会话重试:首次请求遇 403/418/429/503 时,脚本会先 GET 一次该引擎首页、用内存中的会话 Cookie 等待 2 秒后重试 1 次(Cookie 不落盘、不模拟登录)。
- 端点降级:仍失败则换端点,如 DuckDuckGo 主端点失败换
lite.duckduckgo.com/lite/;Google 失败加&gbv=1基础版。 - 引擎降级:Google 不可达 → 必应国际入口 → Ecosia;百度/搜狗出现验证码 → 必应中国、360。
- 垂直绕行:知乎、Stack Overflow 等站点直连抓取常被拒,改用综合引擎加
site:,如在必应搜site:zhihu.com 大模型面试。 - 链接兜底:抓取全部失败时,把各引擎搜索链接直接提供给用户点击,并说明哪些引擎不可用。
- 出现验证码或人机校验页面时立即停止该引擎请求,不尝试规避、不做反复重试。
Step 6:去重、交叉验证与输出
- 以规范化 URL 去重(自动忽略 utm/spm 等跟踪参数);保留每条结果的来源引擎。
- 多引擎同时命中的结果排前面;只有单一来源、尤其来自内容农场的结果要降级看待。
- 回答时先给结论,再用编号列出可点击来源;来源之间有冲突时明确写出分歧,不编造统一说法。
- 输出中不复制搜索结果页上的大段原文;需要细节时打开原文链接阅读后再概括。
执行方式
方式 A:用 Agent 的网页抓取工具
直接请求搜索 URL(以下示例均为完整可执行形式):
web_fetch({"url": "https://cn.bing.com/search?q=asyncio+TimeoutError+site:stackoverflow.com&ensearch=1"})
web_fetch({"url": "https://www.baidu.com/s?wd=site:zhihu.com+%E5%A4%A7%E6%A8%A1%E5%9E%8B%E9%9D%A2%E8%AF%95"})
web_fetch({"url": "https://weixin.sogou.com/weixin?type=2&query=RAG%E8%AF%84%E6%B5%8B"})
web_fetch({"url": "https://html.duckduckgo.com/html/?q=vector+database+comparison+2026"})
web_fetch({"url": "https://www.google.com/search?q=ai+news&tbs=qdr:w&gbv=1"})
web_fetch({"url": "https://www.wolframalpha.com/input?i=100+USD+to+CNY"})多个引擎之间留出 1–2 秒间隔,单批 3–4 个引擎顺序执行;请求头按普通浏览器标识自己。
方式 B:内置脚本 scripts/multi_search.py
零第三方依赖,Windows / macOS / Linux 均可运行(Windows 用 python,macOS/Linux 用 python3)。下述命令与参数均已在 Windows + Python 3 环境实测运行(2026-10),脚本通过 py_compile 编译检查,实测耗时与产出见下文“效率量化分析与差异化对比”。
# 查看全部引擎 id 与适用说明
python scripts/multi_search.py --list-engines
# 默认:国内 3 引擎链接模式,不发起网络请求,任何环境都能跑
python scripts/multi_search.py "FastAPI 教程"
# 指定引擎抓取聚合,输出 Markdown 报告
python scripts/multi_search.py "asyncio TimeoutError" -e bing-int,bing-cn,baidu --fetch
# 最近一周的新闻,输出 JSON 供后续程序处理
python scripts/multi_search.py "AI 发布" -e sogou --time w --fetch --json
# 国内 7 引擎 + GitHub 垂直站,报告存文件
python scripts/multi_search.py "transformer" --cn --vertical github --fetch --output report.md| 参数 | 说明 |
|---|---|
-e, --engines | 引擎 id 逗号分隔;缺省为国内默认组 bing-cn,baidu,sogou |
--cn / --global / --all | 国内 7 个 / 国际 9 个 / 全部 16 个 |
--vertical | 追加垂直站点:github、stackoverflow、zhihu、bilibili、juejin、scholar、baiduxs 等 |
--time h/d/w/m/y | 时间范围(Google、搜狗、DuckDuckGo 生效) |
--fetch | 实际抓取并提取结果;缺省只生成可点击链接 |
--limit / --delay / --timeout | 每引擎条数(默认 8)/ 请求间隔秒(默认 1.5)/ 超时秒(默认 10) |
--json / --output 文件 | JSON 输出 / 报告保存到文件(默认仅打印,不写磁盘) |
可运行性验证:下列为 2026-10 真实运行 python scripts/multi_search.py "FastAPI 教程" -e bing-cn,baidu,so360 --fetch --delay 1 --json 的输出截取(退出码 0,全程约 7 秒):
{
"query": "FastAPI 教程",
"mode": "fetch",
"engines_ok": ["bing-cn", "baidu", "so360"],
"engines_failed": [],
"result_count": 22,
"results": [
{"rank": 1, "title": "FastAPI 教程 | 菜鸟教程",
"url": "https://www.runoob.com/fastapi/fastapi-tutorial.html",
"engines": ["bing-cn", "so360"], "snippet": ""}
]
}链接模式实测输出(python scripts/multi_search.py "FastAPI 教程",约 0.3 秒,零网络请求)为一张 Markdown 表格,逐行列出 3 个引擎各自的可点击搜索链接。
输出规范
抓取模式输出结构(脚本与 Agent 综合时保持一致):
{
"query": "asyncio TimeoutError",
"mode": "fetch",
"searched_at": "2026-10-11T17:00:00",
"engines_ok": ["bing-int", "bing-cn"],
"engines_failed": [{"engine": "google", "reason": "网络不可达/超时(该引擎可能需国际网络)"}],
"result_count": 14,
"results": [
{"rank": 1, "title": "…", "url": "https://…", "engines": ["bing-int", "bing-cn"], "snippet": "…"}
],
"search_links": {"bing-int": "https://cn.bing.com/search?q=…&ensearch=1"}
}给用户的最终回答应包含:检索结论、编号来源清单(标题 + 可点击链接)、失败引擎与原因、检索日期。
创新特色
效率提升量化分析
脚本耗时为 2026-10 在大陆网络、Windows + Python 3 下实测(查询词「FastAPI 教程」);手动耗时为完成同等任务的人工估算(按保守值计算倍数)。
| 操作步骤 | 手动耗时(估算) | 自动化耗时(实测) | 时间节约 | 效率提升(估算) |
|---|---|---|---|---|
| 打开 3 个引擎并各输入一遍查询 | 60–120 秒 | 0.3 秒(零网络请求) | 约 60–120 秒 | 约 200–400 倍 |
| 抓取 3 引擎结果页并提取标题链接 | 120–180 秒 | 7 秒(含 1 秒引擎间隔) | 约 113–173 秒 | 约 17–26 倍 |
| 对 24 条结果跨引擎比对去重 | 约 180 秒 | 随抓取即时完成 | 约 180 秒 | — |
| 生成 16 引擎的可点击链接清单 | 480–600 秒 | 0.3 秒(零网络请求) | 约 480–600 秒 | 1000 倍以上 |
| 输出 JSON 供其他程序消费 | 需手工整理,通常不可行 | 即时(--json) | — | — |
实测产出:3 引擎 24 条原始结果去重为 22 条,覆盖 14 个独立域名;首条结果为 bing-cn 与 so360 双源命中(FastAPI 教程 | 菜鸟教程)。数字随网络状况与引擎实时排序波动,重跑有差异属正常。
差异化对比
| 对比维度 | 本技能 | 手动操作 | 仅用单一引擎 | 付费搜索 API |
|---|---|---|---|---|
| 来源覆盖 | 2–16 引擎 + 10 个垂直站点可选 | 通常 1–3 个,取决于人工 | 1 个索引 | 单家结果 |
| 跨源去重 | URL 规范化自动去重,多源命中加权 | 人工肉眼比对 | 无 | 需自行开发 |
| 中转/跟踪链接 | 360 真实地址还原,utm 等参数清理 | 需手工处理 | 无 | API 直出但按量计费 |
| 限流保护 | 1.5 秒间隔、验证码即停、端点降级 | 无 | 无 | 受调用配额限制 |
| 失败兜底 | 端点→引擎→链接模式三级降级 | 无 | 无 | 报错即中断 |
| 结构化产出 | Markdown / JSON + 退出码 | 人工笔记 | 页面浏览 | JSON(计费) |
| 成本与门槛 | 无需 API Key,仅 Python 标准库 | 免费但费时 | 免费 | 注册、密钥、按量计费 |
核心痛点解决
| 痛点 | 描述 | 影响范围 | 解决方案 | 量化效果 |
|---|---|---|---|---|
| 多站查询费时 | 同一问题要在多个搜索引擎重复输入、逐个翻页 | 资料调研、事实核查 | 一条命令聚合多引擎,顺序请求避免封禁 | 3 引擎检索约 2–3 分钟 → 约 7 秒(实测) |
| 重复结果干扰 | 同一链接在多引擎重复出现,跟踪参数各异 | 结果阅读与来源引用 | URL 规范化 + 跨源去重,多源命中排前 | 实测 24 条 → 22 条,覆盖 14 个域名 |
| 跳转链接不透明 | 百度/搜狗/360 结果为中转地址 | 链接核验与分享 | 360 自动还原 data-mdurl;其余保留可跳转地址 | 自动完成,无需手工还原 |
| 环境受限中断 | 部分引擎在特定网络不可达或弹出验证码 | 大陆网络环境 | 端点降级、引擎替换、链接模式三级兜底 | 任何环境约 0.3 秒产出可点击链接 |
| 使用门槛高 | 同类工具常需注册、API Key、安装依赖 | 新手与离线环境 | 零第三方依赖、无 Key、默认不发网络请求 | pip 安装 0 次 |
示例
示例 1:中文热点多源调研
输入:“帮我搜一下最近一周国内大模型的发布消息,至少三个来源”
执行:python scripts/multi_search.py "大模型 发布" -e baidu,so360,sogou --time w --fetch
输出(节选):成功 3 个引擎,去重后 20+ 条结果,多源命中的排前;Agent 据此给出 3 条有 2 个以上独立来源佐证的发布消息,编号附百度/360/搜狗原始链接,单源传闻标注“仅见一处,待核实”。
示例 2:英文报错排查(大陆网络)
输入:“Python 报错 RuntimeError: Event loop is closed 怎么解决?”
执行:先抓 https://cn.bing.com/search?q=RuntimeError+%22Event+loop+is+closed%22+site:stackoverflow.com&ensearch=1,再补一轮不加 site: 的必应中国结果。
输出:按相关度列出 Stack Overflow 高票答案与官方 issue 链接,概括“Python 3.10+ 在 Windows 上 ProactorEventLoop 的已知行为、两种修复写法”,并给出原文链接。
示例 3:全部抓取被拦截时的降级
输入:“搜一下 privacy tools”,但当前网络下国际引擎均不可达,国内引擎返回验证码页。
输出:明确告知用户哪些引擎不可用/被限流,改为输出必应中国、360、DuckDuckGo 的可点击搜索链接表格(脚本的链接模式必然可用),建议用户在浏览器中打开,而不是反复请求触发更严限流。
示例 4:文件类型定向检索
输入:“找几份关于 RAG 评测的 PDF 报告”
执行:web_fetch({"url": "https://cn.bing.com/search?q=RAG+%E8%AF%84%E6%B5%8B+filetype%3Apdf&ensearch=0"}),再用百度学术垂直站 python scripts/multi_search.py "RAG evaluation" --vertical baiduxs --fetch 交叉补充。
输出:列出 PDF 直链或下载页标题、来源站点、发布时间线索,并提示用户自行判断报告发布方的权威性。
边界条件与异常输入
以下边界条件均已在脚本中处理,Agent 手工走流程时也应同样对待:
| 特殊情况 | 行为与处理 |
|---|---|
| 查询词为空或纯空格(空值输入) | 报错退出,提示提供有效关键词,不发起任何请求 |
| 引擎 id 拼写错误等非法输入 | 列出全部未知 id 后退出,不静默忽略 |
--limit 0/负数、--timeout 0/负数、负 --delay | 参数校验直接报错退出,不产生无意义请求 |
查询词含 &、#、%、引号、空格、中文 | 脚本自动百分号编码;手工拼 URL 必须同样编码 |
| 极端超长查询(编码后超过 1800 字符) | 给出拆分建议;搜索引擎自身也可能截断 URL |
| 冷门词零结果 | 正常返回 0 条结果但保留各引擎搜索链接,链接模式退出码为 0 |
| 抓取模式全部引擎失败且零结果 | 退出码为 1,仍打印可点击链接与失败原因 |
| 输出目录不存在或无写权限 | 明确提示路径/权限问题并退出,不抛堆栈 |
| 同一查询重跑结果不同 | 引擎实时排序与地区化结果所致,属正常现象,不是解析失败 |
错误处理
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| HTTP 403 / 418 / 503 | 引擎反爬拦截 | 脚本先访问首页建立内存会话、等 2 秒重试 1 次;仍失败再换端点(DDG lite、Google gbv=1)或换必应/Ecosia;最终转链接模式 |
| HTTP 429 | 请求过于频繁 | 停止该引擎 30 秒以上,本会话不再连发;把 --delay 调大到 3 |
| 连接超时 / 无法访问 | 网络环境不支持该引擎 | 国内环境改用 bing-cn/baidu/so360;不要反复重试同一引擎 |
| 验证码/人机校验页 | 触发风控 | 立即停止,不规避验证码;换引擎或请用户在浏览器打开链接 |
| HTTP 200 但无结果 | 空壳页、地区重定向、页面结构变化 | 脚本会如实报“未解析到结果”;换引擎重试,链接模式始终可用 |
| 结果是引擎中转链接 | 百度/搜狗等用 /link?url= 跳转 | 链接可正常点击,保留即可;360 脚本已自动还原 data-mdurl 真实地址 |
| 中文乱码 | 响应编码识别错误 | 脚本按响应头编码、UTF-8、GB18030 顺序解码;手工抓取时按 UTF-8 解析 |
URL 含空格/中文/& | 未做编码 | 用脚本自动编码;手工拼接时用 %20、百分号编码中文,& 写成 %26 |
| 部分结果标题与内容不符 | 内容农场/标题党 | 以多源命中数和域名可信度加权,打开原文核实,不采信单一来源 |
安全风险防范
合规底线:仅用于合法的公开信息检索,遵守各搜索引擎的服务条款与 robots 规则;不规避验证码、不模拟登录、不做账号操作。
| 风险项 | 等级 | 防护措施 |
|---|---|---|
| 高频请求触发引擎封禁 | 中 | 顺序请求、默认 1.5 秒间隔、单引擎最多重试 1 次、遇验证码立即停止 |
| 检索到错误或过时信息 | 中 | 多源交叉验证、多源命中加权排序、关键事实打开原文二次核实 |
| 个人数据外泄 | 低 | 无登录态、Cookie 仅单次检索内存暂存且不落盘、不收集个人数据、默认不写文件 |
| 依赖供应链风险 | 低 | 仅使用 Python 3.7+ 标准库,零 pip 安装,全部请求目标仅限公开搜索 URL |
依赖说明
| 依赖项 | 是否必需 | 说明 |
|---|---|---|
| 具备网页抓取能力的 Agent | 方式 A 必需 | 用于请求公开搜索 URL;无此能力时用方式 B |
| Python 3.7+ | 方式 B 必需 | 仅用标准库,无需 pip 安装任何第三方包 |
| 操作系统 | 不限 | Windows / macOS / Linux 均已兼容 |
| API Key | 不需要 | 全部使用公开搜索页,无鉴权、无密钥配置 |
| 网络 | 按引擎区分 | 国内引擎组大陆直连;国际引擎组需可访问国际互联网的环境 |
常见问题FAQ
Q1: 为什么不默认一次查全部 16 个引擎?
A: 引擎有反爬与频率限制,无差别并发请求既慢又容易被封 IP。绝大多数问题 2–4 个引擎足够,需要交叉核实时再扩展;脚本提供 --all 但内置顺序请求与延时。
Q2: Google / DuckDuckGo 打不开怎么办?
A: 大陆网络环境直接使用国内引擎组,英文资料用必应国际入口(ensearch=1,国内可直出国际结果)或 Ecosia;脚本会报告具体失败引擎并继续给出可点击链接。
Q3: 脚本抓取和直接问模型有什么区别?
A: 模型自带知识有截止日期且可能出错;本技能拿到的是带真实 URL 的实时检索结果,可点击核实、可多源交叉验证,回答必须附来源。
Q4: 微信文章为什么有时抓不到?
A: 微信搜索(搜狗入口)风控严格,频繁请求会出验证码。单次检索即可,失败后停止,改用搜狗网页或在链接模式下让用户手动打开。
Q5: 百度和搜狗的链接为什么不是目标网站地址?
A: 这两家的结果链接是引擎中转跳转(形如 baidu.com/link?url=…),点击后正常跳到目标页,属正常现象;360 的真实地址脚本会从 data-mdurl 自动还原。
Q6: 脚本能直接抓全文吗?
A: 不能,也不应该。脚本只提取搜索结果页上的标题与链接;需要正文时用 Agent 的抓取工具打开具体结果 URL,逐页阅读更可靠,也符合检索礼仪。
已知限制
- 搜索结果页 HTML 结构可能随引擎改版变化;脚本提取失败时会自动退回链接模式,不影响基本可用性。
- 无登录态:公众号历史文章、付费墙内容、私域社群等无法获取。
- 百度/360/搜狗的中转链接无法在不额外发请求的情况下还原真实 URL,报告中保留可点击的中转地址。
- Startpage、Brave、Qwant 反爬强度高,脚本抓取成功率低,主要适合在浏览器中通过链接模式使用。
- 时间过滤目前对 Google、搜狗、DuckDuckGo 有统一参数;必应、360 无稳定公开短参数,建议用“关键词 + 年份”收窄。
- 本技能只负责“找到线索”,搜索结果可能有误或过时,关键决策信息必须打开原文二次核实。
参考资料
references/engines.md— 16 引擎 URL 模板、实测可达性、10 个垂直站点、意图选型矩阵references/operators.md— 高级操作符、各引擎时间过滤参数、DuckDuckGo Bangs、查询词构造经验