
假期除了两天加班,另外就是折腾一个叫 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 模式,支持用自然语言直接查询历史数据,不过那是另一篇文章的事了。