一个开箱即用的 AI / 科技趋势雷达 — 自动聚合 14 个国内外平台热榜,LLM 智能过滤 + 话题自动关联,聚焦"对从业者真正有用"的内容。
你可能用过 trendradar 这类热榜聚合项目,但它的问题是:
- 信息噪音大 — 微博热搜、娱乐八卦、明星八卦混在一起
- 需要人工过滤 — 凑合看一下午也筛不出几篇值得读的
- 没有主题沉淀 — 看完就忘,没法"按话题回看"
AI Trend Radar 重新设计了三个关键环节:
- 多源采集 — 一次拿全 14 个平台当日热榜 (知乎/微博/B 站/小红书/即刻/GitHub/Hacker News/Product Hunt/Twitter/36 氪/AI Base/抖音/视频号)
- 三层智能过滤 — 黑名单(体育/娱乐) → 白名单(AI/编程) → LLM 灰区二判,只留真正相关的内容
- 话题自动关联 — 新帖入库时按关键词规则 + 分类 fallback 自动挂到对应话题,不再"看完即焚"
额外能力:
- 🎬 多平台字幕提取 (B 站 / YouTube / 抖音 / 视频号 / 西瓜 / 微博视频)
- 🔍 字幕全文搜索 — 搜的是"整句话出现过"
- 🤖 AI 视频摘要 — 字幕太长看不动? 一键 Claude Haiku 总结
- 🎙️ Whisper ASR — 没字幕的视频也能转 (faster-whisper,本地,无云端成本)
git clone https://github.com/yourname/ai-trend-radar.git
cd ai-trend-radar
cd backend
pip install -r requirements.txt字幕提取需要
opencli(推荐) 或yt-dlp+ffmpeg
ASR 额外需要faster-whisper(首次会下载 ~150MB 模型)
cd ..
bash run.sh输出:
════════════════════════════════════════════
AI Trend Radar — 启动
数据库: .../data/trendradar.db
后端: http://127.0.0.1:8000
前端: http://127.0.0.1:8080
════════════════════════════════════════════
浏览器打开 http://127.0.0.1:8080
后端启动时会自动跑一次全量采集,30 分钟后会再跑。也可以手动触发:
curl -X POST 'http://127.0.0.1:8000/admin/scheduler/trigger?job=collect_all'┌─────────────────┐
│ 14 个平台采集器 │ zhihu / weibo / bilibili / xiaohongshu /
│ (collectors/) │ github / hn / ph / twitter / jike / ...
└────────┬────────┘
│ RawPost
▼
┌─────────────────┐
│ 三层内容过滤 │ blacklist → whitelist → LLM 二判
│ (content_filter)│
└────────┬────────┘
│ 留 ~83% 内容
▼
┌─────────────────┐
│ SQLite (WAL) │ posts / topics / post_topics /
│ │ subtitles / post_metrics_history
└────────┬────────┘
│
▼
┌─────────────────┐
│ FastAPI 后端 │ /api/v1/{trending, topics, post, search, ...}
│ (main.py) │ /admin/scheduler/trigger
└────────┬────────┘
│
▼
┌─────────────────┐
│ 静态前端 │ index.html (单文件,无构建)
│ (index.html) │
└─────────────────┘
辅模块:
- topic_linker.py 新帖自动挂话题
- relevance_judge.py LLM 灰区二判 (OpenAI / Anthropic 兼容)
- subtitle_extractor.py 多平台字幕提取
- asr_engine.py Whisper ASR
- video_summarizer.py Claude Haiku 视频摘要
| 端点 | 说明 |
|---|---|
GET /api/v1/trending |
热榜 (?limit=20&range=7d&platform=zhihu&topic=llm) |
GET /api/v1/topics |
话题列表 (含本周新帖数) |
GET /api/v1/post/{id} |
单帖详情 |
GET /api/v1/search?q=... |
全文搜索 |
GET /api/v1/stats |
全局统计 |
POST /api/v1/subtitle/extract |
提取视频字幕 (B 站/YouTube/抖音/视频号/...) |
POST /api/v1/subtitle/asr |
上传视频/音频 → Whisper 转写 |
POST /api/v1/subtitle/summarize |
字幕 → Claude Haiku 摘要 |
GET /api/v1/subtitle/search |
字幕全文搜索 |
POST /admin/scheduler/trigger |
手动触发采集/关联任务 |
完整文档: 启动后 http://127.0.0.1:8000/docs
后端读取环境变量:
TR_DB_PATH=... # 数据库路径
OPENAI_API_KEY=sk-... # LLM 过滤 / 摘要 (OpenAI 兼容,含 DeepSeek)
ANTHROPIC_AUTH_TOKEN=sk-ant-.. # 备选:Anthropic 兼容代理
LLM_BASE_URL=https://... # 自定义 OpenAI 兼容 base
SUMMARY_MODEL=deepseek-chat # 摘要模型
WHISPER_MODEL=base # tiny/base/small/medium/large-v3
WHISPER_DEVICE=cpu
WHISPER_COMPUTE=int8
OPENAPI_RATE_PER_MIN=1000 # 单 IP 限速各平台 Cookie / Token 写在 collectors/* 的 enabled_from_env() 读取 (参考 registry.py)。
cd tests
python test_sanity.py压测记录见 CHANGELOG.md:
- 100 并发 trending: 100% 成功
- 30s 持续负载: 24 req/s, 0 错误
- 60s 持续负载: 内存 Δ=0KB, 无泄漏
- v1.0: 多源采集 + 三层过滤 + 话题关联 (本版本)
- v1.1: 视频封面 OCR / 关键帧截取
- v1.2: RSS 订阅导出
- v1.3: 多用户 + API key 鉴权
- v2.0: 向量检索 (按"主题相似度"找内容)
欢迎 PR / Issue。小而美 是我们的开发原则 — 在动键盘前先开 issue 讨论,避免重复造大而全的轮子。
MIT — 详见 LICENSE。
- opencli — 24.5K stars,多平台统一 CLI
- yt-dlp — 万能视频下载器
- faster-whisper — 4x speed, low memory
- FastAPI — 优秀 Python web 框架