用 TrendRadar 在飞牛OS上搭一个AI情报站
信息过载的时代,主动权得自己抢回来。
每天打开手机,各个平台的算法争着把它们认为你「该看」的东西塞进来。你以为在刷信息,其实是在被信息刷。
TrendRadar 是一个开源的热点聚合工具,能同时监控知乎、微博、抖音、今日头条等十几个平台的热榜,用你自己设定的关键词过滤,然后推送到 Telegram。从此你看到的,是你想看的。
这篇文章记录我在飞牛OS上部署它的完整过程。
准备工作
你需要:
- 一台装有飞牛OS的NAS(或其他能跑Docker的机器)
- 一个 Telegram 账号
- 代理(用于容器访问 Telegram API,局域网内有代理即可)
一、在飞牛OS上部署容器
1.1 获取源码
前往 TrendRadar 的 GitHub 页面,下载完整源码压缩包,解压到飞牛OS上你想存放的路径。
项目地址:https://github.com/sansan0/TrendRadar

解压后目录结构如下:
TrendRadar/
├── config/ ← 配置文件目录
│ ├── config.yaml
│ └── frequency_words.txt
├── output/ ← 输出目录,自动生成报告
├── docker-compose.yml
└── ...config 和 output 两个目录已经包含在源码里,不需要手动创建,后续挂载时直接指向这两个目录即可。
1.2 在飞牛OS Docker 中创建容器
打开飞牛OS管理后台 → Docker → 新建容器,镜像填:
wantcat/trendradar:latest
1.3 挂载目录
在容器的卷挂载设置中,添加两条挂载:
| 宿主机路径 | 容器路径 | 模式 |
|---|---|---|
/your/path/TrendRadar/config | /app/config | 只读 |
/your/path/TrendRadar/output | /app/output | 读写 |
路径替换成你实际解压的位置。

1.4 配置环境变量
TrendRadar 的所有运行参数都通过环境变量注入,在容器环境变量设置里逐条添加。
基础运行:
TZ=Asia/Shanghai
RUN_MODE=cron
CRON_SCHEDULE=0 9,18 * * *
IMMEDIATE_RUN=trueTelegram 推送:
TELEGRAM_BOT_TOKEN=你的Bot Token
TELEGRAM_CHAT_ID=你的Chat ID如何获取这两个值,见第二章。
代理(访问 Telegram 必须):
HTTP_PROXY=http://局域网代理IP:端口
HTTPS_PROXY=http://局域网代理IP:端口将 IP 和端口替换成你局域网内代理机器的实际地址,比如 http://192.168.1.50:7890。确认代理软件已开启「允许局域网连接」选项。
启动容器。因为 IMMEDIATE_RUN=true,容器启动后会立刻执行一次推送,可以用来验证配置是否正确。
1.5 开启 Web 界面(可选)
TrendRadar 内置了一个轻量的 Web 服务,可以在浏览器里直接浏览聚合后的热点新闻,不依赖 Telegram 推送也能查看。
默认关闭,开启需要两步:
第一步: 在环境变量里追加:
ENABLE_WEBSERVER=true
WEBSERVER_PORT=8080第二步: 在飞牛OS容器的端口映射里添加:
| 宿主机端口 | 容器端口 |
|---|---|
8080 | 8080 |
重启容器后,在飞牛OS Docker 管理界面点击容器的终端按钮,执行:

之后在浏览器访问:
http://飞牛OS的IP:8080即可看到热点新闻的 Web 汇总页面。

二、配置 Telegram 推送(可选)
2.1 创建专属 Bot
在 Telegram 搜索 @BotFather,发送 /newbot,按提示完成创建,依次填入 Bot 的名称和用户名。完成后会获得一串 Token:
123456789:ABCdefGHIjklMNOpqrSTUvwxYZ把这串 Token 填入环境变量 TELEGRAM_BOT_TOKEN。

2.2 获取你的 Chat ID
在 Telegram 搜索 @userinfobot,发任意消息,它会回复你的账号 ID(纯数字)。

把这个数字填入环境变量 TELEGRAM_CHAT_ID。
2.3 激活 Bot
这一步容易漏掉。 在 Telegram 找到你刚创建的 Bot,主动发一条 /start。没有这一步,Bot 没有权限向你推送消息,日志会报 403 错误。
三、自定义推送内容
3.1 调整推送频率
修改环境变量 CRON_SCHEDULE,使用标准 Cron 表达式:
| 场景 | 表达式 |
|---|---|
| 每天早9晚6 | 0 9,18 * * * |
| 工作日早9点 | 0 9 * * 1-5 |
| 每2小时 | 0 */2 * * * |
| 每30分钟 | */30 * * * * |
修改后在飞牛OS重启容器生效。
3.2 添加 RSS 订阅源
config.yaml 的 rss.feeds 部分可以添加任意 RSS 源。以 AI 领域为例:
yaml
feeds:
- id: "openai-news"
name: "OpenAI 官方博客"
url: "https://openai.com/blog/rss"
max_age_days: 3
- id: "huggingface-blog"
name: "HuggingFace 博客"
url: "https://huggingface.co/blog/feed.xml"
max_age_days: 3
- id: "36kr-ai"
name: "36氪"
url: "https://36kr.com/feed"
max_age_days: 1
- id: "geekpark"
name: "极客公园"
url: "https://www.geekpark.net/rss"
max_age_days: 1max_age_days 控制只推送几天内的文章,更新频繁的源设 1,博客类可以设 3。
3.3 配置关键词过滤
这是 TrendRadar 最核心的功能,通过 frequency_words.txt 控制推送内容。
文件分两个区域:
[GLOBAL_FILTER] 全局过滤,包含这些词的新闻一律不推送:
震惊
/AI绘画教程|AI换脸/[WORD_GROUPS] 关键词组,命中任意一个词就推送。以追踪 AI 领域为例:
[AI Agent]
/AI Agent|AI智能体|智能体/
/\bDify\b|\bCoze\b|\bLangChain\b/
多智能体
工作流自动化
[开源模型]
/\bLlama\b|\bQwen\b|\bGemma\b/
/开源模型|开源大模型/
本地部署
量化
[代码生成]
/\bCursor\b|\bWindsurf\b|\bCline\b/
/代码生成|AI编程|AI写代码/
/\bClaude Code\b/语法速查:
| 写法 | 含义 |
|---|---|
关键词 | 标题包含即匹配 |
/词A|词B/ | 正则,匹配其中任意一个 |
+关键词 | 必须包含此词 |
!关键词 | 组内排除此词 |
关键词 => 别名 | 自定义显示名称 |
@5 | 该组最多显示5条 |
[组名] | 给词组命名 |
修改完配置文件后,重启容器即可生效,不需要重新建容器。
最终效果:

附:常见问题
收不到推送,日志报 403 去找你的 Bot 发一条 /start 激活它,然后重启容器。
收不到推送,日志报连接超时 检查代理配置,确认 HTTP_PROXY 填写的 IP 和端口正确,代理软件已开启「允许局域网连接」。
访问 8080 端口被拒绝 检查环境变量 ENABLE_WEBSERVER 是否设为 true,以及端口映射是否已添加。
关键词配置后没有命中 检查 frequency_words.txt 格式,词组之间必须用空行分隔,正则表达式语法是否正确。
想立刻触发一次推送测试 在飞牛OS重启容器,IMMEDIATE_RUN=true 会在启动时立即执行一次。