用 TrendRadar 搭建我的信息流中心

技术专业 · 昨天

假期除了两天加班,另外就是折腾一个叫 TrendRadar 的开源项目,折腾完觉得值得记录一下。


为什么需要它

我订阅了不少英文财经和科技 RSS,雅虎财经、Bloomberg、Seeking Alpha、Hacker News 都在列。问题是这些源每天产出量很大,标题又是英文,扫一遍本身就需要时间,更别说判断哪条值得细读。

我想要的其实很简单:有新内容就告诉我,顺便翻译一下,晚上给我做个总结。不需要自己盯着 RSS 阅读器,也不需要每次打开都看到一堆昨天的旧内容。

TrendRadar 基本上就是做这件事的。


什么是 TrendRadar

TrendRadar 是一个开源的舆情监控工具,核心功能是聚合多平台热榜和 RSS 订阅,通过 AI 筛选、翻译和分析后推送到手机。

它支持的推送渠道很全,飞书、钉钉、Telegram、邮件、ntfy、Bark 都有。我用的是 Telegram,配置最简单。

AI 这块基于 LiteLLM 统一接口,理论上支持所有主流模型提供商。我通过自建的 LiteLLM 网关接入 Gemini Flash,转发给 TrendRadar 使用。


部署方式:还是 Docker 放 NAS 上

我的基础设施一贯的思路:能跑在 NAS 上的就不单独开 VPS。TrendRadar 官方提供了 Docker 镜像,直接在 DS218plus 上跑。

docker-compose.yml 核心配置大致如下:

services:
  trendradar:
    image: wantcat/trendradar:latest
    container_name: trendradar
    volumes:
      - ./config:/app/config
      - ./output:/app/output
    env_file:
      - ./docker/.env
    restart: unless-stopped

敏感信息(API Key、Telegram Token)放在 .env 文件里,不写进 config.yaml

默认每 30 分钟触发一次爬取,对 DS218plus 这种低功耗机器来说完全没压力。


RSS 配置:以英文财经和葡语新闻为主

config.yaml 里的 RSS 配置按需添加即可,我主要订阅了这几个方向:

英文财经

  • 雅虎财经:https://finance.yahoo.com/news/rssindex
  • Bloomberg Technology:https://feeds.bloomberg.com/technology/news.rss
  • Seeking Alpha:https://seekingalpha.com/feed.xml

技术

  • Hacker News:https://hnrss.org/frontpage

每个 RSS 源可以单独设置 max_age_days,超过这个时间的旧文章不推送,避免积压。


AI 翻译:双语标题

TrendRadar 支持 AI 翻译,把 RSS 标题翻译成目标语言后一并推送。我配置的是"中外双语"模式,英文标题显示为"英文原文 | 中文翻译"。

这里有个坑值得记录:TrendRadar 的批量翻译是把多条标题打包成带编号的格式发给模型:

[1] Is NVIDIA A Good Stock To Buy Now?
[2] Fed Holds Rates Steady...

然后期望模型按同样的编号格式返回。但如果你在翻译 prompt 里写了"禁止输出编号",模型就会老老实实地把编号去掉,导致代码解析失败,部分条目翻译结果变成空白。

修复方式是在 prompt 里明确要求保留编号格式,让模型输出:

[1] Is NVIDIA A Good Stock To Buy Now? | 英伟达现在值得买入吗?
[2] Fed Holds Rates Steady... | 美联储维持利率不变...

推送策略:白天增量,晚间 AI 总结

这是整个配置里花时间最多的部分。

TrendRadar 有一套时间线调度系统(timeline.yaml),可以按时间段控制采集、AI 分析、推送的开关和模式。最终我设定的策略是:

时间行为
00:00–07:00深夜静默:只采集,不推送
07:00–12:00增量推送:有新内容才推,无 AI
12:00–14:00午间静默:只采集,不推送
14:00–19:00增量推送:有新内容才推,无 AI
19:00–21:00晚间汇总:全天 AI 分析,只推一次
21:00–23:00增量推送:有新内容才推,无 AI
23:00–00:00深夜静默:只采集,不推送

增量模式的好处是,如果两次运行之间没有新内容,程序不会发送任何推送,手机不会被刷屏。

晚间 AI 汇总基于全天积累的数据做分析,而不只是 19 点那一刻抓到的内容。30 分钟一次的采集在后台持续积累了一整天的排名变化和新增条目,这些都会作为上下文交给模型,分析质量比只看当前榜单要好不少。

AI 分析用的是 Gemini Flash,通过 LiteLLM 网关转发,每天一次的 token 消耗在可接受范围内。


目前的状态

跑了一段时间,基本达到预期:白天手机会收到零散的新增推送,不刷屏;晚上 19 点多收到一条 AI 总结,扫一眼就能知道当天有什么值得关注的。

后续可能会研究一下 MCP Server 模式,支持用自然语言直接查询历史数据,不过那是另一篇文章的事了。

Theme Jasmine by Kent Liao