Hotdry.

Article

构建 AI 驱动的舆情监控系统:TrendRadar 技术架构与实现

深入解析 TrendRadar 开源项目,探讨多平台热点聚合、RSS 订阅与 AI 智能筛选的技术实现方案。

2026-04-21ai-systems

在信息爆炸的时代,如何从海量资讯中快速获取与自身业务相关的热点信息,已成为企业和个人用户的刚性需求。TrendRadar 作为一款开源的 AI 驱动舆情监控工具,提供了从多平台数据聚合、智能筛选到多渠道推送的完整解决方案。本文将从工程实现角度,深入剖析其技术架构与核心模块的设计思路,为构建类似的监控系统提供可落地的技术参考。

系统整体架构

TrendRadar 的设计目标明确:轻量级、易部署、功能完整。从架构层面来看,系统主要包含四个核心模块:数据采集层、内容处理层、AI 分析层和推送分发层。数据采集层负责从多个热榜平台(知乎、抖音、微博、百度热搜等 11 个主流平台)抓取实时热点数据;内容处理层完成关键词匹配、过滤和排序;AI 分析层提供智能筛选、翻译和深度分析能力;推送分发层则将处理结果通过企业微信、飞书、钉钉、Telegram、邮件等渠道送达用户。

这种分层架构的优势在于各模块职责清晰,便于独立扩展和优化。数据采集模块使用统一的接口规范对接不同平台,降低了新增数据源的成本。内容处理层的过滤器设计支持多种语法,包括普通关键词、必须词(使用 + 前缀)、过滤词(使用 ! 前缀)、正则表达式(使用 /pattern/ 语法)以及数量限制(使用 @数字 语法),满足了从简单到复杂的各类筛选需求。

多平台数据聚合策略

多平台数据聚合是整个系统的基础。TrendRadar 依赖 newsnow 项目提供的 API 获取各平台热榜数据,这种设计避免了直接对接各平台可能面临的技术复杂性和封禁风险。在工程实现层面,聚合模块需要解决两个核心问题:数据标准化和去重。

数据标准化体现在统一不同平台的数据格式。各个热榜平台返回的数据结构各异,有的提供热度数值,有的只有排名信息,有的包含时间戳有的则没有。TrendRadar 通过抽象统一的新闻条目结构,将标题、链接、排名、平台来源、时间等字段规范化存储,为后续处理提供一致的数据基础。

去重策略则更具技术挑战性。同一新闻事件往往会在多个平台同时出现,简单的字符串完全匹配无法处理标题的微小差异。TrendRadar 采用了基于相似度的去重算法,通过计算标题之间的编辑距离或使用模糊匹配技术,识别出实际上是同一事件的新闻条目。这种设计显著提升了推送内容的阅读体验,避免了重复信息轰炸。

RSS 订阅与独立展示区

除了热榜数据,TrendRadar 还支持 RSS/Atom 订阅源的抓取,这一功能在 v4.5.0 版本中引入。RSS 模块的设计遵循与热榜相同的过滤逻辑,用户可以使用相同的关键词配置文件来筛选 RSS 内容,实现了两种数据源的无缝融合。

独立展示区是一个实用的增强功能。用户可以指定某些平台(如知乎热榜、Hacker News)的完整热榜不受关键词过滤限制,完整展示在推送消息中。这解决了「我想看某个平台的完整排名」与「我只关心特定关键词」两类不同需求之间的矛盾。配置时只需在 config.yamldisplay.standalone 部分声明需要完整展示的平台列表和最大条数限制即可。

AI 智能筛选:从关键词到自然语言

v6.5.0 引入的 AI 智能筛选是 TrendRadar 最重要的功能迭代。传统关键词匹配存在两个痛点:一是需要手动维护复杂的关键词列表,学习成本较高;二是难以捕捉语义相关但字面不同的内容。AI 筛选通过自然语言描述兴趣的方式彻底解决了这些问题。

ai_interests.txt 文件中,用户可以用日常语言写下关注方向,例如「我想看 AI 和新能源相关新闻」。AI 会自动完成两阶段处理:首先从兴趣描述中提取结构化标签,然后对每条新闻按标签进行分类打分。通过 ai_filter.min_score 参数可以精确控制推送质量阈值,只推送高相关度内容。

系统还提供了完善的容错机制。当 AI 筛选失败时(例如 API 调用超时或返回格式异常),会自动回退到传统的关键词匹配模式,确保推送服务不中断。此外,AI 智能标签更新采用增量策略 —— 当用户修改兴趣描述时,系统会评估变化幅度,小改动只更新受影响的标签,大改动才触发全量重新分类,有效控制了 API 调用成本。

调度系统与推送策略

灵活的推送调度是提升用户体验的关键。TrendRadar 提供了统一调度系统,通过 timeline.yaml 配置文件控制采集、推送和 AI 分析的时间安排。系统预置了五种常用模板:全天候模式(always_on)、早晚汇总模式(morning_evening)、办公时间模式(office_hours)、夜猫子模式(night_owl)以及完全自定义模式(custom)。

以 morning_evening 模板为例,系统会在全天持续监控并在新事件出现时即时推送,同时在晚间 19:00-21:00 时段生成当日汇总报告。这种设计兼顾了即时性与完整性 —— 用户既能第一时间收到重要通知,又能在一天结束时回顾全天热点。

每个时间段还可以独立配置不同的筛选方式和关注方向。例如,早上使用「科技关键词」快速过滤获取当日要闻,晚上切换到「金融 AI 兴趣描述」做深度筛选。这种分时段个性化配置通过 timeline.yaml 的时间段定义实现,充分满足了用户在不同时段关注点可能不同的实际需求。

部署方式与存储架构

TrendRadar 支持三种部署方式:GitHub Actions、Docker 和本地运行。GitHub Actions 适合无服务器用户,利用免费配额实现定时自动抓取;Docker 部署是推荐方案,数据本地存储更安全稳定;本地运行则适合需要深度定制的高级用户。

存储模块在 v4.0.0 版本进行了重大重构,引入了多存储后端支持。GitHub Actions 环境默认使用远程云存储(支持 S3 兼容协议如 Cloudflare R2、阿里云 OSS 等),Docker 和本地环境则使用本地 SQLite 数据库。存储格式支持 SQLite、HTML 和 TXT 三种,其中 SQLite 格式保存了完整的原始数据,支持后续的 AI 对话分析功能。

对于 GitHub Actions 部署的用户,系统还引入了活跃度检测机制 —— 需要每 7 天手动签到续期一次,否则服务会自动挂起。这种设计既控制了资源消耗,又给了用户适度的自由度。

关键配置参数清单

构建一套高效的舆情监控系统,以下配置参数值得重点关注:

热榜权重调整参数(config.yamladvanced.weight 部分)允许用户自定义排名权重(rank)、频次权重(frequency)和热度权重(hotness)的占比。追求时效性的用户可以将排名权重调高至 0.8,追求深度分析的用户则应提高频次权重。

每个关键词的最大显示数量通过 max_news_per_keyword 控制,默认值 0 表示不限制。合理设置此参数可以避免单个热门话题占满整条推送,建议值为 5-15 条。

推送模式选择(report.mode)有三个选项:daily(当日汇总)展示当天所有匹配新闻,current(当前榜单)展示当前排名情况,incremental(增量监控)仅推送新出现的新闻。投资者和交易员适合增量模式,自媒体创作者适合当前榜单模式,企业管理者适合当日汇总模式。

AI 相关配置包括模型选择(通过 AI_MODEL 环境变量,格式为 provider/model,如 deepseek/deepseek-chat)、API 密钥(AI_API_KEY)、温度参数(AI_TEMPERATURE,默认 1.0)、最大 token 数(AI_MAX_TOKENS,默认 5000)以及请求超时时间(AI_TIMEOUT,默认 120 秒)。

工程实践建议

基于 TrendRadar 的设计经验,构建类似的舆情监控系统有几个关键考量。首先是数据源的选择 —— 并非所有平台都适合接入,需要评估平台的稳定性、数据的质量和更新频率。建议初期选择 10-15 个核心平台,后续根据实际需求逐步增加。

其次是成本控制。AI 功能虽然效果显著,但会带来额外的 API 开销。建议先使用关键词过滤验证需求真实存在,再考虑升级到 AI 筛选。DeepSeek 等性价比高的模型是较好的入门选择。

最后是部署环境的选择。对于个人用户,Docker 部署是最佳方案 —— 不仅数据完全可控,而且定时任务执行更稳定,不受 GitHub Actions 政策的直接影响。如果需要使用 MCP AI 对话分析功能,建议同时部署 wantcat/trendradarwantcat/trendradar-mcp 两个容器。

TrendRadar 展示了构建一个功能完整的 AI 舆情监控系统所需的技术要素:从底层的数据聚合、中间的处理过滤、到上层的 AI 分析和分发推送,每个环节都有成熟的设计可供参考。对于希望快速搭建类似系统的开发者而言,这个项目提供了极佳的参考实现。

资料来源:https://github.com/sansan0/TrendRadar

ai-systems