news 2026/5/12 18:12:09

从零构建个人信息雷达:TrendRadar三层过滤模型与部署实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零构建个人信息雷达:TrendRadar三层过滤模型与部署实战

1. 项目概述与核心价值

作为一个在信息过载时代挣扎了多年的内容从业者,我深知“刷屏”的疲惫。每天打开手机,各大平台的热榜、推送、订阅源像潮水一样涌来,但真正与我相关的信息却寥寥无几。要么是重复的旧闻,要么是博眼球的噪音,要么就是平台算法强塞给我的“热门”。直到我动手搭建了 TrendRadar,这个困扰我多年的信息焦虑才真正得到解决。

TrendRadar 本质上是一个高度定制化的信息雷达。它不是一个简单的新闻聚合器,而是一个能理解你“兴趣图谱”的智能助理。它的核心价值在于“精准”“主动”。你不用再去海量信息里淘金,而是让金子自己跑到你面前。它通过抓取全网主流平台的热榜,结合你设定的关键词或 AI 兴趣描述,进行智能筛选和聚合,最后通过你习惯的通讯工具(微信、飞书、钉钉、邮件等)将结果精准推送给你。整个过程最快 30 秒就能部署完成,之后你就可以“躺平”接收真正有价值的信息了。

这个项目适合谁?我认为有三类人最需要它:

  1. 行业从业者与投资者:需要实时追踪特定领域(如 AI、新能源、半导体)的动态,捕捉市场信号和舆情变化。
  2. 内容创作者与自媒体人:需要紧跟热点,寻找选题灵感,但又不希望被无关的娱乐八卦干扰。
  3. 效率追求者与知识管理者:希望从被动的信息接收者转变为主动的信息管理者,减少无效浏览时间,提升信息摄入质量。

接下来,我将从设计思路、部署实操、核心配置到高级玩法,为你完整拆解如何从零开始构建并驾驭你的个人 TrendRadar。

2. 核心设计思路与架构拆解

在动手部署之前,理解 TrendRadar 的设计哲学至关重要。这能帮助你在后续配置时做出更合理的决策,而不是盲目照搬。

2.1 信息处理的“三层漏斗”模型

TrendRadar 的工作流程可以抽象为一个三层过滤漏斗:

  1. 数据采集层(Raw Data):这一层负责从各个数据源“拉取”原始信息。目前支持两大类:

    • 平台热榜:如微博、知乎、B站、抖音等11个默认平台。这些是经过平台初步算法筛选的“大众热点”。
    • RSS订阅源:你可以添加任何提供 RSS 输出的博客、媒体、资讯网站。这是你的“个性化信源”。

    这一层的目标是全量抓取,不做任何过滤,确保信息源的广度。

  2. 智能筛选层(Intelligent Filter):这是核心价值所在。原始数据进入此层后,会根据你的规则进行清洗和提纯。TrendRadar 提供了两种筛选范式:

    • 关键词匹配(Keyword):传统但精准。你定义一组关键词(如人工智能特斯拉教育改革),系统进行字符串匹配。它高效、可控,但需要你对自己的兴趣有明确的、结构化的认知。
    • AI兴趣描述(AI Interest):革命性的升级。你只需用自然语言描述你的兴趣,例如“我想看关于 AI 大模型技术突破和商业应用落地的新闻,还有新能源汽车的销量数据和政策动态”。AI 会理解这段描述,自动提取标签并为每条新闻打分,只推送高相关度的内容。这解决了关键词模式“想不到所有相关词”的痛点。
  3. 交付呈现层(Delivery & Presentation):经过筛选的信息,通过你配置的渠道,以你喜欢的格式和节奏送达。这里的关键是“人找信息”变为“信息找人”。无论是上班前在微信收到晨报,还是重要突发新闻通过 Telegram 即时提醒,信息流完全围绕你的场景和习惯构建。

这个三层模型确保了系统既全面又精准,既自动化又个性化。

2.2 存储与计算架构的演进

早期的 TrendRadar 数据存储在本地文件里,这在单机运行时没问题,但一旦想用 GitHub Actions 做自动化,或者多设备同步状态,就非常麻烦。v4.0.0 的存储重构是一次重要的架构升级。

核心变化:从“文件存储”到“抽象存储层”

现在,TrendRadar 定义了一个统一的StorageManager接口。具体实现有两种:

  • SQLiteStorage(本地):在 Docker 或本地直接运行时使用,数据存在一个.db文件里。轻量、快速,适合个人单点使用。
  • S3Storage(远程):在 GitHub Actions 等无状态环境或需要数据持久化时使用。它兼容所有 S3 协议的云存储,如 AWS S3、Cloudflare R2、腾讯云 COS、阿里云 OSS。

为什么要这么设计?

  1. 环境适配性:GitHub Actions 每次运行都是一个全新的虚拟机,运行完数据就丢了。用远程存储,每次运行都能读取到上一次的历史数据,从而实现incremental(增量)模式的正确判断。
  2. 数据可靠性:云存储通常提供高可用性和备份,比本地文件更可靠。
  3. 状态共享:如果你同时在办公室电脑和家里 NAS 上部署,使用同一个远程存储后端,它们看到的数据状态就是一致的。

实操心得:存储选型建议

  • 个人轻量使用,仅需定时推送:直接用 GitHub Actions + 默认的 Cloudflare R2(免费额度足够)。这是最省心的方案,无需维护服务器。
  • 需要深度分析、频繁查询历史数据:在本地或 VPS 上用 Docker 部署,选择 SQLite。查询速度快,方便用其他工具(如 Datasette)直接分析数据库。
  • 团队使用或需要高可靠性:使用 Docker 部署,但将存储后端配置为团队的云存储(如公司内的 S3),确保数据不丢失。

2.3 推送策略的精细化设计

“什么时候推?推什么?推多少?” TrendRadar 通过几个核心配置给出了答案。

1. 运行模式(report_mode):决定数据的范围

  • daily(当日汇总):推送当天所有匹配到的新闻。优点是信息完整,适合做每日复盘;缺点是可能有重复。
  • current(当前榜单):推送最近一次抓取时正在榜上的新闻。适合追踪持续热点,但热点会反复出现。
  • incremental(增量监控):只推送上次运行后新出现的新闻。这是“零打扰”模式的核心,非常适合监控突发新闻或你极度关注领域的任何新动向。

2. 调度系统(timeline.yaml):决定运行的时机和方式这是 v6.0.0 引入的强大功能。它像一个每周节目表,让你能精细控制不同时间段的推送行为。

  • 按天编排:可以为周一至周日设置完全不同的时间计划。
  • 按时间段配置:在一天内划分多个时段(如 9:00-12:00, 14:00-18:00),每个时段可以独立设置:
    • mode: 使用哪个运行模式(daily/current/incremental)。
    • filter_method: 使用关键词过滤还是 AI 筛选。
    • filter_source: 使用哪个关键词文件或 AI 兴趣描述文件。
    • enable_ai_analysis: 是否在这个时段进行 AI 分析。
  • 内置预设:提供了morning_evening(早晚各一次)、office_hours(工作时间)、night_owl(夜猫子)等模板,开箱即用。

3. 展示控制(display):决定推送的样式和内容

  • region_order: 调整热榜、RSS、新增、独立展示区、AI 分析这几个板块的显示顺序。
  • regions: 可以关闭某个你不想看到的板块(比如关闭 RSS,只看热榜)。
  • max_news_per_keyword: 限制每个关键词分组下最多显示多少条新闻,防止某个爆火话题刷屏。

这套组合拳打下来,你就能实现诸如“工作日早 8 点用 AI 筛选模式推送增量科技新闻,晚 6 点用关键词模式推送当日金融汇总;周末则只在上午推送一次娱乐休闲类 RSS 内容”这样复杂的场景。

3. 从零开始的部署实战

理论讲完,我们进入实战。我将以最常用的GitHub Actions + 飞书推送Docker 本地部署两种方案为例,带你一步步走通。你可以根据自身情况选择。

3.1 方案一:GitHub Actions 云端自动化(推荐新手)

这是最“Serverless”的方案,利用 GitHub 的免费计算资源定时运行,无需自己准备服务器。

步骤 1:Fork 项目仓库

  1. 访问 sansan0/TrendRadar 项目主页。
  2. 点击右上角的Fork按钮,将项目复制到你自己的 GitHub 账号下。

步骤 2:配置飞书群机器人

  1. 打开飞书,创建一个新群组(或使用已有群组)。
  2. 点击群设置 -> 群机器人 -> 添加机器人 -> 自定义机器人。
  3. 设置机器人名称,如“热点雷达”。
  4. 最关键一步:在“安全设置”中,取消勾选“签名校验”。TrendRadar 目前使用简单的 Webhook,不需要签名。
  5. 点击“添加”,复制生成的Webhook URL。格式类似https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx

步骤 3:在 Fork 的仓库中配置 Secrets

  1. 进入你 Fork 后的仓库页面。
  2. 点击Settings->Secrets and variables->Actions
  3. 点击New repository secret
    • Name:FEISHU_WEBHOOK_URL
    • Value: 粘贴你刚才复制的飞书 Webhook URL。
  4. (可选)如果你想启用其他推送方式,如 Telegram、邮件等,同样以 Secret 方式配置对应的 Key,如TELEGRAM_BOT_TOKENTELEGRAM_CHAT_IDSMTP_*等。

步骤 4:修改配置文件(可选但建议)默认配置可能不适合你,我们需要调整两个核心文件。在你 Fork 的仓库里操作:

  1. 修改config/frequency_words.txt:这是你的兴趣清单。清空里面的示例,按行添加你关心的关键词,例如:
    # 科技 人工智能 大模型 GPT # 汽车 比亚迪 特斯拉 新能源汽车 # 财经 降息 股市
    每一行一个关键词,#开头的是注释。保存文件。
  2. 修改.github/workflows/crawler.yml:这是 GitHub Actions 的工作流定义文件,控制何时运行。
    • 找到schedule部分,默认是cron: '0 9,18 * * *',表示每天 UTC 时间的 9点和18点运行(对应北京时间的17点和次日2点)。你可以根据 cron 语法 调整。例如'0 8 * * *'是每天 UTC 8点(北京时间16点)运行一次。
    • (可选)你还可以修改report_mode等参数,但更推荐后续在config.yaml里改。

步骤 5:手动触发一次运行,测试配置

  1. 进入你仓库的Actions标签页。
  2. 在左侧选择Crawler工作流。
  3. 点击Run workflow,使用main分支,然后点击绿色的运行按钮。
  4. 等待大约1-2分钟,运行完成。如果一切顺利,你的飞书群就会收到第一条测试推送!

注意事项

  • GitHub Actions 的免费额度每月有 2000 分钟,对于每天运行一两次的任务完全够用。
  • 切勿将 Webhook URL 等敏感信息直接写在config.yaml里并提交到仓库!一定要用 Secrets。
  • 首次运行可能会失败,因为需要安装 Python 依赖。这是正常的,后续定时运行会缓存依赖,速度更快。

3.2 方案二:Docker 本地/服务器部署(追求控制权)

如果你有 NAS、云服务器或常开机的电脑,Docker 部署能给你最大的控制权和灵活性,也便于集成到其他自动化流程中。

步骤 1:准备环境确保你的机器上已经安装了 Docker 和 Docker Compose 。

步骤 2:获取项目并配置

# 1. 克隆项目到本地 git clone https://github.com/sansan0/TrendRadar.git cd TrendRadar # 2. 复制配置文件模板 cp config/config.yaml.example config/config.yaml cp config/frequency_words.txt.example config/frequency_words.txt

步骤 3:编辑配置文件用文本编辑器打开config/config.yaml,这是核心控制文件。你需要关注并修改以下几处:

app: report_mode: "incremental" # 运行模式:daily, current, incremental enable_crawler: true # 是否抓取数据 enable_notification: true # 是否发送通知 notification: feishu: enabled: true webhook_url: "" # 这里留空,我们通过环境变量传入 # ... 其他推送渠道根据需要配置 storage: backend: "sqlite" # Docker 部署推荐用 sqlite,数据存在本地 volume local: data_dir: "./data" # 数据目录,会被映射到容器内

打开config/frequency_words.txt,同样填入你的关键词。

步骤 4:使用 Docker Compose 运行(推荐)项目提供了docker-compose.yml,这是最简单的方式。

  1. 创建.env文件来管理敏感信息(避免写入配置文件):
    # .env 文件内容示例 FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx # 如果需要AI功能,添加 # AI_API_KEY=sk-xxxxxx
  2. 修改docker-compose.yml,确保 volumes 映射正确,将本地的configdata目录挂载到容器内:
    version: '3.8' services: trendradar: image: wantcat/trendradar:latest container_name: trendradar restart: unless-stopped volumes: - ./config:/app/config # 挂载配置文件目录 - ./data:/app/data # 挂载数据目录,持久化存储 environment: - TZ=Asia/Shanghai # 设置时区 - FEISHU_WEBHOOK_URL=${FEISHU_WEBHOOK_URL} # 从 .env 文件读取 # 如果要用远程存储(如R2),注释掉上面的 ./data 挂载,并配置 storage.backend: s3
  3. 启动容器:
    docker-compose up -d
  4. 查看日志,确认运行成功:
    docker logs -f trendradar
    你应该能看到抓取各平台、匹配关键词、发送推送的日志。

步骤 5:配置定时任务(Cron)Docker 容器本身不会定时运行。你需要用系统的 Crontab 来定时执行容器内的命令。

# 编辑当前用户的 crontab crontab -e

添加一行,例如每天上午9点和下午6点各运行一次(北京时间):

# 分 时 * * * 命令 0 1,10 * * * docker exec trendradar python main.py >> /path/to/trendradar.log 2>&1

这里1,10是 UTC 时间,对应北京时间的 9点和18点。>> /path/to/trendradar.log 2>&1将日志输出到文件,方便排查问题。

实操心得:Docker 部署的坑与技巧

  • 权限问题:如果容器启动失败,提示权限错误,可能是./data目录的权限不对。尝试sudo chmod -R 777 ./data(生产环境慎用)或确保当前用户对目录有读写权。
  • 时区问题:务必在docker-compose.yml中设置TZ=Asia/Shanghai,否则报告里的时间可能是 UTC。
  • 升级:更新镜像很简单:docker-compose pull && docker-compose up -d。你的configdata因为做了卷挂载,所以配置和数据都会保留。
  • 资源监控:TrendRadar 很轻量,但如果你同时开启了 AI 分析,大模型推理可能消耗较多内存。建议监控容器资源使用情况。

4. 核心配置详解与个性化调优

部署成功只是第一步,让 TrendRadar 真正成为你的“雷达”,需要对核心配置进行精细调优。配置文件config.yamlfrequency_words.txt(或ai_interests.txt)是你的主要调优界面。

4.1 关键词配置的艺术:从精准匹配到语义理解

基础语法:构建你的兴趣网络frequency_words.txt的每一行都是一个过滤单元。基础用法就是一行一个关键词。但它的强大之处在于高级语法:

  1. 分组与注释:使用#开头添加注释,使用[组名]来对关键词进行逻辑分组。分组不影响功能,但能让配置文件更清晰,并且在推送消息中,同组关键词匹配到的新闻会归类在一起显示。

    # ========== 科技前沿 ========== [AI] 人工智能 大语言模型 AIGC /\\bai\\b/i => AI核心 # 正则匹配,精确匹配单词“ai” [芯片] 半导体 芯片 光刻机
  2. “与”逻辑(+):有时你需要同时满足多个条件。例如,你想看关于“苹果公司”的“芯片”新闻,而不是水果“苹果”。可以用+实现“与”逻辑。

    +苹果 +芯片

    这样只有标题同时包含“苹果”和“芯片”的新闻才会被推送。

  3. 排除逻辑(!):过滤掉你不想看的内容,优先级最高。

    苹果 !苹果手机 # 排除“苹果手机”相关的新闻

    即使标题里有“苹果”,但只要也有“苹果手机”,这条新闻就会被过滤掉。

  4. 正则表达式(/pattern/):解决子字符串误匹配和复杂匹配问题。这是高级玩家的利器。

    • /\bai\b/i:精确匹配单词 “ai”,忽略大小写。避免匹配到 “training”、“pain” 等词。
    • /(苹果|小米)(发布|推出).*(手机|新品)/:匹配“苹果发布新品手机”或“小米推出手机”这类句式。
    • 给正则表达式起个易懂的名字:/\bopenai\b/i => OpenAI动态,这样推送消息里显示的是“OpenAI动态”,而不是晦涩的正则表达式。

AI 智能筛选:让机器理解你的兴趣如果你觉得维护关键词列表太麻烦,或者兴趣点比较抽象(如“有争议的科技伦理话题”),那么 AI 筛选 (filter.method: ai) 是你的绝佳选择。

  1. 配置ai_interests.txt:在这个文件里,用自然语言描述你的兴趣。可以写得很具体,也可以比较宽泛。
    我主要关注人工智能领域的技术突破和商业应用,特别是大模型、AIGC、自动驾驶方面的进展。同时也关心新能源汽车行业,尤其是比亚迪、特斯拉、蔚来这些头部公司的销量、技术和政策动态。对宏观经济政策,比如央行降息、股市重大调整也感兴趣。请帮我忽略娱乐八卦和体育新闻。
  2. 配置config.yaml
    filter: method: ai # 切换为 AI 筛选模式 ai_filter: min_score: 6 # 只推送 AI 打分在 6 分(满分10分)及以上的新闻 ai: api_key: "sk-..." # 你的 AI API Key,支持 DeepSeek、OpenAI 等 model: "deepseek/deepseek-chat" # 使用的模型
  3. 工作原理:TrendRadar 会将你的兴趣描述和新闻标题(有时包括摘要)一起发送给 AI 模型。模型会做两件事:
    • 提取兴趣标签:从你的描述中提炼出如[AI技术, 新能源汽车, 财经政策]等标签。
    • 相关性打分:针对每条新闻,判断它与每个标签的相关性,并给出一个综合分数(1-10分)。 只有分数超过min_score的新闻才会被推送。

实操心得:关键词 vs AI 筛选如何选?

  • 追求极致精准、可控,且兴趣点明确:用关键词。例如监控特定公司名、产品名、法规编号。
  • 兴趣范围较广、描述抽象,或不想费心维护关键词:用AI 筛选。它更能理解语义关联,比如你关注“可持续发展”,AI 能关联到“碳中和”、“ESG”、“新能源”等。
  • 混合使用:利用 Timeline 调度,在白天工作时间用关键词快速过滤行业动态,晚上用 AI 筛选模式浏览更广泛的兴趣内容。

4.2 推送渠道配置:让信息无缝抵达

TrendRadar 支持近十种推送方式,这里挑几个最常用的详解。

飞书/钉钉/企业微信(群机器人)配置逻辑类似,都是获取 Webhook URL。

  • 飞书/钉钉:在群机器人设置里获取 Webhook URL,填入config.yaml或环境变量即可。注意飞书需关闭签名校验
  • 企业微信:稍微复杂一点,需要在企业微信后台创建应用,获取AgentIdSecretCorpId,并配置应用的可见范围。获取到的Webhook Key用于构造 URL:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX

Telegram Bot

  1. 在 Telegram 中搜索@BotFather,创建新机器人,获得TOKEN
  2. 将机器人拉入你的群组(或与它私聊)。
  3. 在浏览器中访问https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates,在群组里发条消息,然后刷新这个页面,从返回的 JSON 中找到chat.id
  4. TOKENchat.id配置到 TrendRadar。

邮件推送邮件适合归档和深度阅读。配置 SMTP 信息:

notification: email: enabled: true smtp_server: "smtp.gmail.com" # 或 smtp.qq.com, smtp.163.com smtp_port: 587 # 或 465 for SSL username: "your-email@gmail.com" password: "your-app-password" # 注意!不是邮箱密码,是应用专用密码 sender: "your-email@gmail.com" receivers: "receiver1@xx.com,receiver2@xx.com" use_tls: true # Gmail/QQ邮箱用 STARTTLS (port 587) # use_ssl: true # 如果用 SSL (port 465),则启用这个

重要提示:Gmail、QQ 邮箱等都需要开启 SMTP 服务并生成“应用专用密码”,直接使用邮箱密码会失败。

多账号推送所有渠道都支持多账号,用分号;分隔多个 Webhook URL 或接收人即可。例如:

FEISHU_WEBHOOK_URL: "https://hook1;https://hook2" EMAIL_RECEIVERS: "me@company.com;team@company.com"

这样,一条消息会同时推送到多个地方。

4.3 AI 分析与翻译:从信息到洞察

这是 TrendRadar 的“大脑”,能将 raw news 转化为 insights。

AI 分析 (ai_analysis)开启后,AI 会对筛选出的新闻进行深度解读,生成包含以下内容的分析报告:

  • 核心热点态势:总结当前最受关注的话题。
  • 舆论风向与争议点:分析新闻的情感倾向(正面/负面/中性)和可能存在的争议。
  • 异动与弱信号:发现新兴的、热度快速上升的话题。
  • 研判与策略建议:基于分析,给出可能的趋势预测或关注建议。

配置要点

ai_analysis: enabled: true mode: "follow_report" # 跟随推送报告一起分析 provider: "deepseek" # 或 openai, gemini 等 api_key: "sk-..." # 可以自定义提示词,让 AI 以特定角色(如行业分析师、投资顾问)进行分析 prompt_file: "config/ai_analysis_prompt.txt"

成本提示:AI 分析会消耗 Token,产生费用。DeepSeek 等国产模型成本极低,一次分析几分钱;GPT-4 等则较贵。建议根据推送频率和新闻条数估算成本。

AI 翻译 (ai_translation)如果你订阅了英文 RSS 源,或者想把中文热点翻译成英文分享,这个功能非常有用。

ai_translation: enabled: true language: "English" # 目标语言 # 同样可以自定义提示词,比如“翻译成简洁的商务英语” prompt_file: "config/ai_translation_prompt.txt"

翻译和分析共享同一个 AI 模型配置,只需配一次api_key

实操心得:平衡功能与成本

  • 轻度用户:可以只开 AI 筛选,不开分析和翻译。筛选本身消耗 Token 很少。
  • 深度用户:可以设置 Timeline,仅在重要的时间点(如每日早报)开启 AI 分析,其他时间只推送纯新闻。
  • 翻译需求:如果只是偶尔需要,可以手动将推送的 HTML 报告链接丢给 ChatGPT 翻译,而不是开启自动翻译,以节省成本。

5. 高级玩法与故障排查

当基础功能跑通后,你可以探索一些高级玩法,让 TrendRadar 更贴合你的工作流。

5.1 与 MCP 集成:赋予 AI 助手“记忆”和“分析”能力

MCP (Model Context Protocol) 是 TrendRadar 一个独立但强大的模块。它把 TrendRadar 变成了一个“新闻知识库”,允许 Claude、Cursor 等 AI 助手通过标准协议查询和分析其中的历史数据。

它能做什么?假设你问 AI 助手:“过去一周关于‘固态电池’的新闻,有哪些主要公司被提及,舆论趋势如何?” 通常 AI 只能基于过时的训练数据瞎猜。但如果接入了 TrendRadar MCP Server,AI 助手就能:

  1. 调用search_news工具,查询“固态电池”相关的所有新闻。
  2. 调用aggregate_news工具,去重并聚合不同平台的报道。
  3. 调用analyze_sentiment工具,分析舆论情感倾向。
  4. 调用compare_periods工具,对比上周和上上周的热度变化。AI 助手基于实时、结构化的数据给你一份可靠的分析报告。

如何部署 MCP Server?

  1. 作为独立服务:使用 Docker 运行 MCP 镜像。
    docker run -d \ -v /path/to/your/trendradar-data:/app/data \ -p 3333:3333 \ --name trendradar-mcp \ wantcat/trendradar-mcp:latest
    这会在本机 3333 端口启动一个 MCP 服务器。
  2. 配置 AI 客户端:以 Claude Desktop 为例,编辑其配置文件~/Library/Application Support/Claude/claude_desktop_config.json(Mac)或对应路径(Windows/Linux),添加:
    { "mcpServers": { "trendradar": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-trendradar", "--data-dir", "/path/to/your/trendradar-data" // 指向你的数据目录 ] } } }
  3. 重启 Claude Desktop,你就可以在对话中让 Claude 分析你的新闻数据了。

5.2 可视化配置编辑器:告别 YAML 语法

如果你对编辑 YAML 文件感到头疼,TrendRadar 提供了基于 Web 的图形化配置编辑器。

  1. 打开在线编辑器: https://sansan0.github.io/TrendRadar/
  2. 将你本地的config.yaml内容粘贴到左侧编辑器。
  3. 右侧会实时生成表单界面,你可以通过点击、下拉、输入框等方式修改所有配置。
  4. 修改完成后,点击“导出”按钮,将生成的 YAML 复制回你的配置文件即可。

这个工具对于调整复杂的timeline.yaml调度规则尤其有用,它提供了直观的周视图时间线。

5.3 常见问题与排查实录

即使按照教程操作,也可能会遇到问题。这里记录一些我踩过的坑和解决方案。

问题 1:GitHub Actions 运行成功,但没收到推送。

  • 检查 Secrets:确认FEISHU_WEBHOOK_URL等 Secret 配置正确,没有多余空格。
  • 查看 Actions 日志:在 Actions 运行记录的详情里,查看Run main.py步骤的完整日志。常见的错误有:
    • KeyError: 'FEISHU_WEBHOOK_URL':说明 Secret 没被正确读取,检查 Secret 名称是否与代码中引用的完全一致(区分大小写)。
    • 403 Client Error:飞书/钉钉等 Webhook 报错。检查机器人是否被移除、Webhook 是否过期、飞书是否关闭了签名校验。
    • No news matchedfrequency_words.txt里的关键词太冷门,或者ai_filter.min_score设置太高,没有匹配到任何新闻。可以暂时清空frequency_words.txt测试是否会推送所有新闻。

问题 2:Docker 运行失败,提示导入错误或权限错误。

  • 镜像拉取失败:尝试docker pull wantcat/trendradar:latest
  • 权限错误:特别是挂载了本地目录时。确保宿主机上的configdata目录对 Docker 进程可读可写。可以尝试sudo chown -R 1000:1000 ./data(假设容器内用户 ID 是 1000)。
  • 时区不对:报告时间显示 UTC。在docker-compose.yml中确保设置了TZ=Asia/Shanghai

问题 3:AI 分析/翻译功能报错或没生效。

  • 检查 API Key:确认ai.api_key配置正确,且有余额。
  • 检查模型名称ai.model的格式必须是provider/model-name,如deepseek/deepseek-chatopenai/gpt-4o-mini。Provider 列表参考 LiteLLM 文档 。
  • 网络问题:如果使用 OpenAI 等国外服务,确保网络通畅。可以尝试在容器内curl测试 API 端点。
  • 查看详细日志:在config.yaml中设置log_level: DEBUG,然后查看运行日志,会有更详细的 AI 调用和错误信息。

问题 4:推送内容太多或太少。

  • 太多:调整frequency_words.txt,使用更精确的关键词或增加排除词 (!)。或者启用 AI 筛选并提高min_score。也可以设置display.max_news_per_keyword限制单组数量。
  • 太少:检查关键词是否拼写错误,或者过于具体。尝试放宽关键词,或使用 AI 筛选模式。也可以检查report_modeincremental模式只推送新增,如果运行间隔短,可能新增新闻本身就少。

问题 5:如何备份和迁移数据?

  • GitHub Actions + R2:数据在云端,无需备份。
  • Docker + SQLite:备份挂载的./data目录即可。整个目录复制走,在新环境同样挂载即可恢复。
  • 迁移:如果从 Actions 迁移到 Docker,需要将 R2 中的.db文件下载下来,放到 Docker 的./data目录下。反之亦然。

6. 总结与持续迭代

TrendRadar 是我为自己打造的“信息减负”工具,经过近一年的迭代,它已经从一个简单的爬虫脚本成长为一个功能丰富的个人信息管理系统。它的核心优势不在于某个炫酷的技术,而在于“高度可定制”“以我为主”的设计理念。你不再是被动接受平台算法的投喂,而是主动设计自己的信息流。

回顾整个搭建和调优过程,我的体会是:

  1. 始于需求,终于场景:不要一开始就追求大而全。先从最痛的一个点开始(比如“每天只看 AI 和电动车新闻”),用最简单的关键词部署起来。收到第一次推送的成就感,会驱动你去完善它。
  2. 善用调度timeline.yaml是区分普通用户和高级玩家的关键。花点时间规划一下你一天中不同时段的信息需求,能让推送的价值倍增。
  3. 成本意识:尤其是使用 AI 功能时,要清楚每次调用花了多少钱。利用好incremental模式、合理设置运行频率、选择性价比高的模型,可以让工具长期可持续地运行。
  4. 社区力量:TrendRadar 是开源项目,它的很多功能都来自用户的反馈和贡献。遇到问题可以查 Issues,有想法可以提 PR。用的人越多,它就越强大。

最后,信息过载的时代,真正的稀缺不是信息,而是注意力。希望 TrendRadar 能帮你当好注意力的守门人,把宝贵的时间留给真正重要的事情。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 18:08:28

XPM_FIFO_SYNC实战解析:从参数配置到读写时序

1. XPM_FIFO_SYNC基础入门&#xff1a;FPGA工程师的必备工具 第一次接触Xilinx的XPM_FIFO_SYNC时&#xff0c;我完全被它那些参数搞懵了。这就像给你一盒乐高积木&#xff0c;却没有说明书——你知道它能拼出好东西&#xff0c;但就是不知道从哪下手。经过几个项目的实战&#…

作者头像 李华
网站建设 2026/5/12 18:06:39

AI驱动落地页生成:VibeTunnel项目实战与优化指南

1. 项目概述与核心价值最近在AI应用开发圈子里&#xff0c;一个名为“VibeTunnel Landing”的开源项目引起了我的注意。这个项目托管在GitHub上&#xff0c;由amantus-ai团队维护&#xff0c;乍一看名字&#xff0c;你可能会联想到“氛围隧道”或者“情绪通道”这类抽象概念。但…

作者头像 李华
网站建设 2026/5/12 18:03:07

AzurLaneAutoScript:碧蓝航线自动化脚本终极解决方案

AzurLaneAutoScript&#xff1a;碧蓝航线自动化脚本终极解决方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否厌倦…

作者头像 李华
网站建设 2026/5/12 18:02:05

利用 Taotoken 统一 API 为多个智能体项目提供稳定的大模型服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用 Taotoken 统一 API 为多个智能体项目提供稳定的大模型服务 在开发和维护多个基于智能体&#xff08;Agent&#xff09;的 AI …

作者头像 李华
网站建设 2026/5/12 17:59:09

SPI总线

SPI总线 SPI总线有四种工作方式&#xff0c;2种时钟极性和2种数据相位。 SPI总线协议不定义数据字节内部位序&#xff0c;位序由应用层根据需要定义。 SPI总线数据帧长度由应用层定义。 2.1 时钟极性配置CPOL 时钟极性配置CPOL决定空闲状态时钟线SCK的电平状态。 空闲状态时钟线…

作者头像 李华
网站建设 2026/5/12 17:59:06

奇点展开原理:一个统一的数学方法论

摘要&#xff1a;本文提出“奇点展开原理”——在数学系统中&#xff0c;当一个计算在奇点处无法确定唯一结果时&#xff0c;其结果应取所有可能值的集合。从这一原理出发&#xff0c;我们推导出展开公理 a/0R&#xff0c;并系统讨论其代数性质、初等函数应用、数学分析扩展、集…

作者头像 李华