全能搜索skill — 全平台聚合搜索分析器 v3.0
概述
一键聚合搜索 + 智能分析。输入一个关键词,输出一份涵盖各大搜索引擎、 新闻平台、社交媒体的结构化报告,包含去重、相关性评分(含时间新鲜度)、 相似度矩阵、平台分布统计、性能报告、中间结果持久化。
v3.0 新增优化:
--max-items参数:控制输入上限(默认 2000),防止大输入内存飙升- 相对时间解析:从 snippet 正则提取"刚刚""X分钟前""X小时前""X天前""昨天""X月X日"等
- 中间结果持久化:自动保存
.md报告 +.json摘要 +.checkpoint.jsonl断点 - 搜索阶段建议 10s 超时:避免某引擎响应慢阻塞整体
- 提升时间戳提取成功率,减轻时间因子恒为 0.5 的问题
v2.0 已有优化:
- MinHash + LSH 近似去重 → 复杂度从 O(n²) 降至 O(n)
- 分词缓存 → 相同文本不重复分词
- 扩展停用词至 200+ 词(含时间词/语气词/常见动词)
- 时间新鲜度衰减因子 → 近期内容权重更高(半衰期 7 天)
- Top 50 截断 → 相似度矩阵限制计算规模
- tqdm 进度反馈 → 大输入不再黑盒
触发场景
当用户说出以下任一意图时必须加载此技能:
- "帮我搜一下 XXX 在全平台的情况"
- "查一下 XXX 的热度/舆情"
- "关于 XXX,各个平台都在说什么"
- "聚合搜索 XXX" / "全能搜索 XXX"
- "搜索 XXX,看看抖音、小红书、微信上都有什么"
- "分析 XXX 在各大平台的相似信息"
- 任何涉及多平台、跨平台搜索/舆情/信息聚合的需求
核心工作流
Step 0: 技能安装检查
首次使用需安装依赖:
cd <skill_dir>/scripts
pip install jieba scikit-learn numpy datasketch tqdm
依赖说明: | 依赖 | 用途 | 可选? | |------|------|--------| | jieba | 中文分词 | 必需 | | scikit-learn | TF-IDF + Cosine 相似度 | 可选(降级为 Jaccard) | | numpy | 数值计算 | 可选 | | datasketch | MinHash + LSH 近似去重 | 强烈推荐(无则降级 O(n²)) | | tqdm | 进度条显示 | 可选(无则打印简单日志) |
Step 1: 理解需求
向用户确认:
- 关键词 — 要搜什么
- 平台范围 — 全平台还是指定平台(默认全平台)
- 时间范围 — 近期(默认7天内)还是不限
- 输出格式 — Markdown报告(默认)还是Excel
如果用户需求已经很明确,跳过此步直接执行。
Step 2: 多引擎并行搜索(建议超时 10s)
使用 WebSearch 工具同时对以下引擎发起搜索(并行调用,节省时间):
| 目标 | 搜索策略 | 优先级 | 超时建议 |
|------|---------|--------|---------|
| 百度 | WebSearch(query="关键词") 不加站点限定 | 必选 | 10s |
| 微信公众平台 | WebSearch(query="关键词 site:mp.weixin.qq.com") | 必选 | 10s |
| 今日头条 | WebSearch(query="关键词 site:toutiao.com") | 必选 | 10s |
| 知乎 | WebSearch(query="关键词 site:zhihu.com") | 必选 | 10s |
| 新浪新闻 | WebSearch(query="关键词 site:sina.com.cn") | 推荐 | 10s |
| 腾讯新闻 | WebSearch(query="关键词 site:news.qq.com") | 推荐 | 10s |
| 网易新闻 | WebSearch(query="关键词 site:163.com") | 推荐 | 10s |
| B站 | WebSearch(query="关键词 site:bilibili.com") | 推荐 | 10s |
| 微博 | WebSearch(query="关键词 site:weibo.com") | 推荐 | 10s |
| 360搜索 | WebSearch(query="关键词") 不加站点限定 | 可选 | 10s |
| 搜狗 | WebSearch(query="关键词") 不加站点限定 | 可选 | 10s |
并行策略: 每个搜索请求之间无依赖关系,一次性发出所有 WebSearch 调用。 超时策略: ⏱ 如果某个引擎响应超过 10 秒,建议放弃该引擎的搜索结果, 继续处理其他引擎的返回,避免阻塞整体流程。
WebSearch 参数优化:
- 设置
topic: "news"获取最新资讯 - 可组合
query_keyword_groups覆盖多角度搜索 - 时间范围通过搜索词暗示(如"关键词 2025")
Step 3: 封闭平台处理(抖音、小红书)
⚠️ v2.0 优化策略: 抖音、小红书、微信搜一搜等封闭平台直接使用 WebSearch 间接搜索, 不再尝试 WebFetch 直连(反爬率高、成功率低)。
| 封闭平台 | 搜索策略 |
|---------|---------|
| 抖音 | WebSearch(query="关键词 抖音") |
| 小红书 | WebSearch(query="关键词 小红书") |
| 微信搜一搜 | WebSearch(query="关键词 site:mp.weixin.qq.com") |
兜底策略: WebFetch 仅用于第三方聚合站(如搜狗微信搜索公开页), 如果返回验证码/登录页则立即放弃,不做重试。
Step 4: 数据格式化
将所有搜索结果统一转为 JSONL 格式,每行一个 JSON 对象:
{"platform": "百度", "title": "...", "url": "...", "snippet": "...", "content": "", "source_engine": "WebSearch", "timestamp": "2026-06-06"}
{"platform": "微信", "title": "...", "url": "...", "snippet": "...", "content": "", "source_engine": "WebSearch", "timestamp": "2026-06-06"}
timestamp 字段用于时间新鲜度衰减计算。即使 snippet 中没有明确日期, v3.0 引擎也会尝试从 snippet 中提取相对时间("3小时前""昨天""6月1日"等)。
保存到临时文件供分析脚本使用,例如:
.workbuddy/tmp/agg_search_关键词.jsonl
Step 5: 运行分析脚本(v3.0)
调用 scripts/aggregate_search.py 进行:
# 基本用法
python scripts/aggregate_search.py "关键词" "输入jsonl路径" "输出文件前缀"
# 限制输入条数(默认2000)
python scripts/aggregate_search.py "关键词" "输入.jsonl" "report" --max-items 1000
# 从 checkpoint 恢复
python scripts/aggregate_search.py "关键词" "data.checkpoint.jsonl" "report"
脚本输出三个文件:
{前缀}.md— Markdown 报告{前缀}.json— JSON 分析摘要{前缀}.checkpoint.jsonl— 原始数据断点(可重新输入跑分析)
分析功能:
- 输入截断 —
--max-items控制输入上限,超限自动截断并提示 - 去重 — 默认 MinHash + LSH (O(n)),无 datasketch 降级为传统相似度矩阵 (O(n²))
- 相关性评分 — 基于关键词密度+覆盖度+子串匹配+时间新鲜度的综合评分 (0~1)
- 相对时间解析 — 从 snippet 提取"刚刚""X分钟前""X小时前""X天前""昨天""X月X日"等
- 相似度矩阵 — TF-IDF + Cosine 相似度(限制 Top 50)
- Top 10 排序 — 按相关性从高到低排列
- 平台分布统计 — 各平台结果数量 + 平均相关性/新鲜度
- 性能统计 — 耗时、去重率、分词缓存命中数
- 中间结果持久化 — 自动保存报告+摘要+断点,防止分析过程崩溃丢失数据
Step 6: 呈现报告
- 读取生成的 Markdown 报告
- 使用
open_result_view呈现给用户 - 如果用户需要导出,使用
deliver_attachments发送报告文件(.md + .json + .checkpoint.jsonl)
输出示例结构
报告包含以下章节:
- 总体概览 — 各平台结果数 + 平均相关性 + 平均新鲜度
- 高相关结果 Top 10 — 最相关的10条结果详情(含新鲜度标识 🆕/📅/📦)
- 内容相似性分析 — Top N 之间的相似度矩阵 + 最相似/差异最大对
- 平台来源分布 — 按平台统计
- 性能统计 — 耗时、去重率、分词缓存命中、算法类型
失败备选方案
| 问题 | 方案 |
|------|------|
| 某平台搜索无结果 | 跳过该平台,注明"无有效结果" |
| 封闭平台反爬 | 跳过 WebFetch,改用 WebSearch 间接搜索("关键词 + 平台名") |
| 分析脚本依赖未安装 | 自动 pip install,如安装失败则手动用文本分析 |
| 无 datasketch | 降级为传统相似度矩阵去重,提示用户安装 |
| jieba 分词效果差 | 改用直接转写(无需分词,直接用原文做 Jaccard) |
| 数据量过大(>500条) | MinHash 自动处理;矩阵分析截断至 Top 50;--max-items 控制输入 |
| Python 环境问题 | 在系统 Python 中尝试,或直接由 WorkBuddy 做文本分析 |
| 结果太少(不足5条) | 放宽搜索范围,去除站点限定 |
| 分析过程崩溃 | 使用 checkpoint 断点恢复(再次传入 .checkpoint.jsonl) |
相似性兜底计算(无Python环境时)
如果 Python 脚本无法运行,WorkBuddy 可手动计算 Jaccard 相似度:
- 提取两条内容的共同词汇数量 ∩
- 提取两条内容的总词汇数量 ∪
- 相似度 = |∩| / |∪|
- 相关性 = 关键词在内容中出现的比例 × 0.85 + 新鲜度 × 0.15
捆绑资源说明
- scripts/aggregate_search.py — 核心分析引擎 v3.0(去重+相关性+相似度+报告生成+断点续跑)
- scripts/install_deps.bat — 一键依赖安装(含 datasketch、tqdm)
- references/platform_targets.md — 各平台搜索策略和数据格式参考(含第三方聚合站)
Scan to join WeChat group