前言
- 如果你需要研究"AI 编程助手"在中国互联网上的最新讨论。打开微博搜一轮,打开 B 站搜一轮,再打开知乎、小红书、抖音、头条……30 分钟过去了,你才刚刚把 8 个平台的原始结果扒完,还没开始分析。
- 现在想象另一个场景:一条命令,理想网络条件下约 30 秒完成,一份带有来源引用、评分排序和跨平台聚合热点的研究报告就摆在你面前。
- 这就是 last30days-skill-cn 要解决的问题——一个专为中国互联网生态打造的 AI Agent 深度研究引擎,覆盖微博、小红书、B 站、知乎、抖音、微信公众号、百度、头条 8 大平台,自动搜索近 30 天内容并生成结构化报告。
AI Agent 实战:last30days-skill-cn 一键搜索中国 8 大平台,30 秒生成深度研究报告
是否也在做"跨平台信息搬运工"?
中国互联网有一个独特的现实:信息高度碎片化,且被围墙花园分割在不同的平台生态里。
同一个话题——比如"AI 编程助手"——在微博上是 KOL 的体验分享,在 B 站是 UP 主的测评视频,在知乎是技术讨论帖,在小红书是使用心得图文,在抖音是短视频演示,在微信公众号是深度长文,在百度是聚合搜索结果,在头条是资讯流推送。每个平台都有独立的搜索体系、独立的内容格式、独立的互动指标体系。
如果你是一个开发者、产品经理或者研究者,需要了解某个话题在中国互联网上的全貌,你面对的是一个枯燥但无法回避的工作流:
- 打开微博,搜索关键词,翻几页结果,记录链接和数据
- 打开 B 站,搜索关键词,翻几页结果,记录链接和数据
- 打开知乎,搜索关键词……
- 重复以上步骤 8 次
粗略估算:每个平台花 3-5 分钟,8 个平台就是 24-40 分钟——而这还只是收集原始数据,没有做任何分析、排序和去重。
现有的自动化工具呢?英文领域的研究工具(如 Perplexity、Tavily)不覆盖中国平台。国内的一些舆情监控系统需要企业级订阅,价格不菲。自己写爬虫?每个平台的反爬机制、接口签名、登录态管理各不相同,维护成本巨大。
这就是 last30days-skill-cn 要解决的核心痛点。
last30days-skill-cn 是什么?
一句话定位:30 天的研究,30 秒出结果。(理想网络条件下,典型查询约 30 秒完成,实际耗时因网络和平台状态而异)
last30days-skill-cn 是一个 AI Agent 技能(Skill),它能自动搜索中国互联网 8 大主流平台最近 30 天的内容,综合分析后生成有据可查的研究报告。
基本信息
| 项目 | 详情 |
|---|---|
| 项目地址 | github.com/Jesseovo/la… |
| 原始项目 | mvanhorn/last30days-skill |
与原版的关系:不是简单翻译,是深度本土化重建
原版 last30days-skill 由 Matt Van Horn 开发,面向英文互联网(Reddit、HN、Twitter 等)。last30days-skill-cn 从 v1.0.0 开始,逐步替换了全部数据源、评分逻辑、输出渲染和交互指标体系,到 v3.0.0 已经是一套完全围绕中国互联网平台构建的独立系统。
Agent 原生分发: 项目通过 Agent Skills 协议分发,支持主流 AI Agent 平台一键安装。你也可以直接克隆仓库、本地运行——两条路径都完整支持。
核心亮点——为什么它值得关注
亮点 1:8 大平台全覆盖,分层可用
last30days-skill-cn 覆盖了中国互联网讨论热度最高的 8 个平台。按配置复杂度分为三层:
第一层:开箱即用(无需任何配置)
| 平台 | 技术路径 | 备注 |
|---|---|---|
| 微博 | Playwright 爬虫 | 中国最大的社交媒体 |
| B 站 | 公开 API | 视频 + 弹幕文化社区 |
| 知乎 | Playwright 爬虫 | 知识问答 + 深度讨论 |
第二层:可选配置(有 API Key 体验更佳,无则自动降级)
| 平台 | 技术路径 | 降级策略 |
|---|---|---|
| 小红书 | MCP/HTTP API + 公开搜索兜底 | 无配置时降级到公开搜索,命中率较低 |
| 百度 | API + 公开搜索兜底 | 无 API Key 时降级到公开搜索,数据完整度降低 |
| 抖音 | 公开搜索兜底 | 签名风控限制,互动数据无法获取 |
| 头条 | 公开搜索兜底 | 签名风控限制,互动数据无法获取 |
第三层:必需配置
| 平台 | 技术路径 | 说明 |
|---|---|---|
| 微信公众号 | API 调用 | 无爬虫替代方案,必须配置 WECHAT_API_KEY |
亮点 2:三级自动降级策略
不同平台的反爬策略差异巨大,同一个平台在不同时段的风控力度也不同。last30days-skill-cn 设计了一套三级自动降级策略来应对这种不确定性:
第一级:API 模式
如果你配置了对应平台的 API Key(如 WEIBO_ACCESS_TOKEN、TIKHUB_API_KEY),优先走官方或第三方 API 接口。这是最稳定、数据最完整的路径。
第二级:Playwright 浏览器自动化
灵感来自 MediaCrawler 项目。通过 Playwright 控制 Chromium 浏览器,模拟真实用户访问,利用 XHR 拦截获取接口数据。无需逆向加密算法,无需付费 API。
# Playwright 爬虫核心逻辑(简化示意)
async def intercept_xhr(page, platform):
"""拦截 XHR 请求,获取平台接口数据"""
results = []
page.on("response", lambda resp: results.append(resp))
await page.goto(search_url)
await page.wait_for_load_state("networkidle")
return parse_response(results)
第三级:公开搜索兜底
当 API 和爬虫都不可用时(如抖音、头条的签名风控),自动退化到公开搜索引擎(包括 Bing 的 site: 搜索)。虽然数据完整度降低,但不会静默返回 0 条——每条结果都标注了数据来源路径,让你知道数据是怎么拿到的。
这套降级策略的核心设计哲学是:永远给你结果,但诚实地告诉你结果的完整度。
亮点 3:0-100 评分系统
跨平台搜索的一个核心挑战是:不同平台的互动指标体系完全不同。微博看转发和评论,B 站看弹幕和投币,知乎看赞同和收藏,小红书看点赞和收藏。直接比较毫无意义。
last30days-skill-cn 设计了一套三维权重评分系统:
- 相关性 45%:基于 token 重叠的查询相关性计算,支持中英文混合查询,内置同义词扩展
- 时效性 25%:越新的内容得分越高,以天为单位衰减
- 互动指标 30%:将各平台异构的互动数据统一归一化
# 评分核心逻辑
def compute_score(relevance, freshness, engagement):
"""
三维权重评分
- relevance: 相关性得分 (0-1), 权重 45%
- freshness: 时效性得分 (0-1), 权重 25%
- engagement: 互动指标得分 (0-1), 权重 30%
"""
raw = relevance * 0.45 + freshness * 0.25 + engagement * 0.30
return normalize_to_100(raw)
def log1p_safe(value):
"""对数归一化,防止极端值碾压"""
import math
return math.log1p(value) / math.log1p(1_000_000)
关键细节:互动指标使用 log1p_safe 对数归一化处理。这意味着一个 100 万赞的大 V 帖子和一个 1000 赞的优质长尾内容之间的差距会被压缩到合理范围,避免大 V 数据碾压真正有价值的小众讨论。
最终所有分数通过 normalize_to_100 函数映射到 0-100 的统一标尺,你可以直接跨平台排序。
亮点 4:跨平台聚类
当你搜索一个热门话题时,很可能会在多个平台上看到同一个事件的不同角度讨论。last30days-skill-cn 的聚类模块会自动检测这种情况:
- 使用字符 n-gram + Jaccard 相似度进行跨源文本匹配
- 采用并查集(Union-Find)算法求连通分量
- 仅保留覆盖 >=2 个不同平台的簇
# 跨平台聚类核心逻辑
def cluster_cross_platform(items, threshold=0.6):
"""
使用并查集进行跨平台聚类
- items: 所有平台的搜索结果
- threshold: Jaccard 相似度阈值
"""
uf = UnionFind(len(items))
for i, a in enumerate(items):
for j, b in enumerate(items[i+1:], i+1):
if jaccard_3gram(a.title, b.title) >= threshold:
uf.union(i, j)
# 仅保留覆盖 >=2 个平台的簇
return [c for c in uf.components() if covers_multiple_platforms(c)]
最终输出中,跨平台热点会标注"同时见于: 微博, 知乎"这样的交叉引用标签,让你一眼看出哪些事件引发了全网讨论。
亮点 5:查询类型自动检测
你输入的查询词不只是一个字符串——它的"类型"会影响整个搜索和评分策略。last30days-skill-cn 内置了 7 种查询类型检测:
| 查询类型 | 示例 | 影响 |
|---|---|---|
product | "ChatGPT 价格" | 偏重产品类数据源 |
concept | "什么是具身智能" | 偏重知识类平台 |
opinion | "AI 编程助手好不好" | 偏重讨论类平台 |
how_to | "怎么部署大模型" | 偏重教程类内容 |
comparison | "Claude vs GPT 对比" | 偏重评测类内容 |
breaking_news | "最新 AI 政策" | 时效性权重提升 |
prediction | "AI 趋势预测" | 偏重分析类内容 |
类型检测完全基于正则模式匹配,不依赖 LLM 调用,零延迟零成本。
架构与技术实现
整体流程
查询输入 -> 查询类型检测 -> 并发搜索 8 个平台
|
v
数据标准化 (schema 统一)
|
v
三维权重评分 (相关性 + 时效性 + 互动)
|
v
跨平台去重 (n-gram + Jaccard)
|
v
跨平台聚类 (Union-Find)
|
v
渲染输出 (7 种模式)
技术栈
| 组件 | 技术选型 | 用途 |
|---|---|---|
| 语言 | Python 3 | 核心运行时 |
| 浏览器自动化 | Playwright (Chromium) | 平台爬虫 |
| 中文分词 | jieba | 查询预处理、相关性计算 |
| 并发模型 | concurrent.futures.ThreadPoolExecutor | 8 平台并行搜索 |
| 测试框架 | pytest | 191 个测试用例 |
核心模块
项目的核心逻辑分布在 scripts/lib/ 目录下,每个模块职责单一:
| 模块 | 职责 |
|---|---|
schema.py | 统一数据结构,定义 Engagement、Report 等 dataclass |
score.py | 评分引擎,实现 log1p_safe 对数归一化和 normalize_to_100 映射 |
normalize.py | 各平台互动指标归一化 |
relevance.py | 相关性计算,基于 token 重叠的查询-内容匹配 |
dedupe.py | 跨平台去重,使用 3-gram 字符级别的 Jaccard 相似度 |
cluster.py | 跨平台聚类,用并查集(Union-Find)聚合跨平台热点 |
query_type.py | 查询类型检测,基于正则模式的 7 种类型分类器 |
render.py | 输出渲染器,支持 7 种输出模式,HTML 报告内置 XSS 加固 |
crawler_bridge.py | Playwright 爬虫桥接 |
并发模型
8 个平台的搜索任务通过 ThreadPoolExecutor 并发执行。项目定义了三套超时配置:
| 模式 | 全局超时 | 单平台超时 | 适用场景 |
|---|---|---|---|
--quick | 90 秒 | 30 秒 | 快速扫描 |
| 默认 | 180 秒 | 60 秒 | 常规研究 |
--deep | 300 秒 | 90 秒 | 深度分析 |
快速上手——5 分钟跑通
环境要求
- Python 3.8+
- pip
方式一:源码安装(推荐新手)
# 1. 克隆仓库
git clone https://github.com/Jesseovo/last30days-skill-cn.git
cd last30days-skill-cn
# 2. 安装 Python 依赖
pip install -r requirements.txt
# 3. 安装 Playwright 浏览器(约 100MB,首次需要)
playwright install chromium
requirements.txt 只有两个依赖:jieba>=0.42.1 和 playwright>=1.40.0。
方式二:Agent Skills 安装
npx skills add Jesseovo/last30days-skill-cn -g
健康检查
python scripts/last30days.py --diagnose
基础使用
python scripts/last30days.py "AI编程助手" --emit compact
生成 HTML 报告
python scripts/last30days.py "具身智能" --deep --emit html-path
CLI 参数速查
| 参数 | 说明 | 示例 |
|---|---|---|
--emit MODE | 输出模式 | --emit json |
--quick | 快速搜索 | --quick |
--deep | 深度搜索 | --deep |
--days N | 回溯天数 | --days 7 |
--as-of DATE | 指定日期回溯 | --as-of 2026-06-15 |
--search SOURCES | 指定平台 | --search weibo,zhihu |
--diagnose | 健康检查 | --diagnose |
实战案例
案例 1:快速扫描——"AI 编程助手"
python scripts/last30days.py "AI编程助手" --emit compact
compact 模式返回精简文本摘要,包含每个平台的 top 结果、评分和来源链接。
以下为示例格式,具体结果取决于搜索时间点:
## AI编程助手 — 8 平台搜索结果
### 知乎
1. [95分] "2026 年 AI 编程助手深度评测" — 知乎专栏
👍 2.3k 赞同 | 💬 186 评论
### B站
2. [88分] "我用 AI 编程助手写了一个完整项目" — UP主 xxx
▶️ 12.5w 播放 | 💬 3400 弹幕
案例 2:深度研究——"AI制作游戏"
python scripts/last30days.py "AI制作游戏" --deep --emit html-path
案例 3:定向平台搜索——"新能源汽车"
python scripts/last30days.py "新能源汽车" --search weibo,bilibili,zhihu
输出模式对比
| 模式 | 适用场景 |
|---|---|
compact | Agent 上下文注入,快速浏览 |
json | 程序解析,数据管道集成 |
md | 文档嵌入,笔记工具 |
html-path | 离线浏览,分享归档 |
不足与注意事项
抖音/头条的签名风控
抖音和头条的原生接口需要 a_bogus、_signature 等动态签名。当前版本在这两个平台上退化到公开搜索引擎兜底,无法获取真实的互动数据。
微信公众号需要 API Key
必须配置 WECHAT_API_KEY 才能搜索公众号内容。
平台接口变更风险
建议每次使用前先跑一次 --diagnose 诊断。
{
"weibo": true,
"xiaohongshu": false,
"bilibili": true,
"zhihu": true,
"douyin": true,
"wechat": false,
"baidu_api": false,
"toutiao": true,
"crawler_engine": {
"playwright_available": true,
"cached_logins": [],
"note": "安装 Playwright 后,微博/小红书/抖音/B站/知乎可无需 API Key 使用爬虫模式"
},
"note_douyin_toutiao": "抖音/头条原生接口需签名参数,常被风控;接口失败时改用公开搜索引擎兜底,仅能拿到公开链接,无真实互动数据与精确日期。"
}
总结与展望
三个关键数字概括这个项目:
- 8 大平台:中国互联网讨论的核心阵地,一次搜索全覆盖
- 191 个测试用例:全量测试通过,覆盖评分引擎、去重逻辑、聚类算法等核心路径
- 理想网络条件下约 30 秒出结果:8 平台并发搜索,典型查询约 30 秒完成,实际耗时因网络和平台状态而异
last30days-skill-cn 从原版 last30days-skill 发展而来,但它不是 fork 后改改配置文件那么简单——数据源、评分逻辑、输出渲染、交互指标体系都是从零重建的。
最后,如果你每天都在做跨平台信息搬运的工作,不妨花 5 分钟试一下这个工具。一条命令,看看结果——也许你会发现,30 分钟的手工搜索,真的可以压缩到 30 秒。
🎬 博客主页:xiaoy.blog.csdn.net
🎥 本文由 呆呆敲代码的小Y 原创 🙉
🎄 学习专栏推荐:Unity系统学习专栏
🌲 游戏制作专栏推荐:游戏制作
🌲Unity实战100例专栏推荐:Unity 实战100例 教程
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------