TrendRadar 本地部署指南
1. 背景与需求:为什么我们需要 TrendRadar?
在这个大数据算法横行的时代,我们每天被头条、抖音等平台投喂大量信息,不仅容易陷入信息茧房,还浪费了大量时间筛选有效资讯。
核心需求:
- 拒绝算法绑架:需要一个个人定制化的新闻推送服务。
- 趋势追踪:能够按周期追踪特定领域的趋势和热点。
- AI 深度分析:不仅要看新闻,还要 AI 帮我总结、分析情感倾向,甚至通过对话深度探索。
TrendRadar 的核心价值:
- 零成本 AI 分析:支持接入免费的 NVIDIA 模型接口,体验信息提炼。
- 定制推送:定期推送到飞书、钉钉等即时通讯软件。
- MCP 协议支持:通过 Model Context Protocol (MCP) 协议,让 AI 工具(如 Cherry Studio)直接读取新闻数据库,进行深度对话分析。
2. 环境准备
在开始之前,请确保你拥有以下基础环境:
- 操作系统:Ubuntu 22.04(实体机或 VMware 虚拟机均可)。
- 网络环境:需要能够通畅访问 GitHub 和 Docker Hub。
- 基础工具:Git, Docker, Docker Compose。
- AI 资源:大模型 API Key(推荐申请 NVIDIA 的免费 API,或者使用 DeepSeek、OpenAI)。
- 客户端工具:Cherry Studio(用于通过 MCP 与 AI 对话)。
3. 部署实战:关键步骤详解
3.1 下载代码仓
首先,将项目代码克隆到本地:
# 需要确保网络环境通畅
git clone https://github.com/sansan0/TrendRadar.git
3.2 启动 Docker 容器
⚠️ 避坑提示:官方文档中容易忽略的一点是,必须进入
docker子目录才能执行 compose 命令。
# 1. 进入项目 docker 目录
cd TrendRadar/docker
# 2. 拉取最新镜像(注意网络连接)
docker compose pull
# 3. 启动所有服务(trendradar 推送服务 + trendradar-mcp AI 分析服务)
docker compose up -d
4. 关键配置调整
默认配置通常只适合本机测试,为了在局域网访问以及更符合个人习惯,我们需要修改 docker/docker-compose.yml 和 config/config.yaml。
4.1 让 Web Server 支持局域网访问
默认情况下,Web Server 仅监听 127.0.0.1,导致局域网其他设备无法查看生成的 AI 新闻报告。
修改文件:docker/docker-compose.yml
修改内容:去掉 IP 限制,直接暴露端口。
# 修改前
ports:
- "127.0.0.1:${WEBSERVER_PORT:-8080}:${WEBSERVER_PORT:-8080}"
- "127.0.0.1:3333:3333"
# 修改后(允许局域网访问 Web 报告和 MCP 服务)
ports:
- "${WEBSERVER_PORT:-8080}:${WEBSERVER_PORT:-8080}"
- "3333:3333"
同时,在 docker/.env 中确保开启了 Web 服务:
ENABLE_WEBSERVER=true
4.2 配置新闻源与 AI 模型
修改文件:config/config.yaml
配置 AI 模型(以 NVIDIA 免费 API 为例):
💡 小技巧:NVIDIA 提供了许多免费的 API 端点(build.nvidia.com),兼容 OpenAI 格式。model 参数注意添加『openai/』头部。
ai:
# 格式:provider/model_name
# NVIDIA 提供的模型示例
model: "openai/minimaxai/minimax-m2.5"
# 你的 API Key
api_key: "nvapi-your_custom_api_key..."
# 关键:自定义 API 端点(NVIDIA 需要这个地址)
api_base: "https://integrate.api.nvidia.com/v1"
timeout: 120
temperature: 1.0
max_tokens: 131072
定制新闻源:根据自己的兴趣保留或删除平台(如只看 GitHub、掘金、华尔街见闻)。
platforms:
enabled: true
sources:
# 综合类
- id: "toutiao"
name: "今日头条"
- id: "baidu"
name: "百度热搜"
- id: "ifeng"
name: "凤凰网"
- id: "thepaper"
name: "澎湃新闻"
- id: "tencent-hot"
name: "腾讯新闻 综合早报"
# 财经投资
- id: "wallstreetcn-hot"
name: "华尔街见闻"
- id: "cls-hot"
name: "财联社热门"
- id: "gelonghui"
name: "格隆汇"
- id: "xueqiu"
name: "雪球"
- id: "jin10"
name: "金十数据"
- id: "fastbull"
name: "快讯通"
# 短视频、社区
- id: "zhihu"
name: "知乎"
- id: "bilibili-hot-search"
name: "bilibili 热搜"
- id: "douyin"
name: "抖音"
- id: "tieba"
name: "贴吧"
- id: "weibo"
name: "微博"
# 科技
- id: "github"
name: "GitHub"
- id: "hackernews"
name: "Hacker News"
- id: "juejin"
name: "掘金"
- id: "nowcoder"
name: "牛客网"
4.3 优化关键词匹配
修改文件:config/frequency_words.txt
建议使用正则表达式进行精准匹配,避免误报。例如:
[WORD_GROUPS]
# ═══════════════════════════════════════════════════════════════
# 科技领域
# ═══════════════════════════════════════════════════════════════
# ▼ 优化:改用 /\bai\b/i,等价于原正则但更简洁规范,/i 负责忽略大小写,\b 负责边界
[AI 相关]
/\bai\b/i => 人工智能 大模型 神经网络 机器学习
/深度求索 | 幻方量化 | 梁文锋 | \bDeepSeek\b/ => DeepSeek
/\bOpenAI\b|\bChatGPT\b|\bSora\b|\bDALL-E\b|\bSam Altman\b|\bGreg Brockman\b/i => OpenAI
/\bAnthropic\b|\bClaude\b|\bDario Amodei\b/i => Claude
[字节跳动]
/字节 | 张一鸣 | 梁汝波 | 抖音 | \bByteDance\b|\bTikTok\b|\bDouyin\b|\bLark\b|\bCapCut\b/ @10
# ▼ 优化:补全主流国产大模型;加 /i 忽略大小写,统一去除大小写重复变体,补全 \b 边界
/通义千问 | \bqwen\b|\bminimax\b|智谱 | \bglm\b|月之暗面 | \bKimi\b|零一万物 | 阶跃星辰 | 混元 | 文心 | \bERNIE\b|豆包 | \bDoubao\b/i => 国产大模型
/自动驾驶 | 无人驾驶 | 智驾/ => 自动驾驶
[具身智能]
机器人 机器狗 机械臂
[芯片]
芯片 光刻机 半导体 内存 存储 显存 显卡
# ═══════════════════════════════════════════════════════════════
# 企业与品牌
# ═══════════════════════════════════════════════════════════════
/英伟达 | 黄仁勋 | \bNVIDIA\b|\bGeForce\b|\bRTX\b|\bCUDA\b|\bJensen Huang\b/i => 英伟达
/苏姿丰 | 锐龙 | 霄龙 | \bAMD\b|\bRyzen\b|\bEPYC\b|\bRadeon\b|\bLisa Su\b/i => AMD
/机械狗 | 四足/ => 机器狗
/宇树 | 王兴兴 | \bUnitree\b/ => 宇树机器人
/智元 | 灵犀 | 稚晖君 | 彭志辉 | \bAgiBot\b/ => 智元机器人
/众擎 | \bEngineAI\b|赵同阳/ => 众擎机器人
/微软 | \bMicrosoft\b|\bWindows\b|\bAzure\b|\bSatya Nadella\b|\bCopilot\b/i => 微软
/谷歌 | 皮查伊 | 安卓 | 油管 | \bGoogle\b|\bAlphabet\b|\bAndroid\b|\bChrome\b|\bYouTube\b|\bGemini\b|\bDeepMind\b|\bWaymo\b/i => 谷歌
/库克 | \biPhone\b|\biPad\b|\bMacBook\b|\biOS\b|\bVision Pro\b|\bAirPods\b|\bApple\b|\bTim Cook\b/i => 苹果
4.4 推送配置
config/config.yaml 配置信息
notification:
enabled: true
# 是否启用通知功能(总开关)
# ⚠️ 开启调度系统后,此项仍为总开关:
# false → 永远不推送(无论调度怎么设置)
# true → 由调度的 push 字段控制何时推送
channels:
feishu:
webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx***xxx"
飞书端操作步骤





4.5 Docker 全局配置
# 启动时开启 webserver 服务
ENABLE_WEBSERVER=true
# 开启 AI 分析
AI_ANALYSIS_ENABLED=true
# 每天 08:30 和 20:30 进行消息推送
CRON_SCHEDULE=30 8,20 * * *
# 运行模式:cron/once
RUN_MODE=cron
# 启动时立即执行一次
IMMEDIATE_RUN=true
5. 🔥 避坑指南:解决飞书推送 Markdown 不渲染问题
这是本次部署中最大的坑。默认代码在推送飞书消息时,使用的是 text 类型,导致飞书无法渲染 Markdown 语法(如 加粗、[链接]),体验极差。
问题现象:飞书收到的消息全是 **加粗** 这样的源码,没有格式。

原因分析:飞书 API 要求 Markdown 内容必须通过 interactive(卡片)类型的 lark_md 标签发送。
🛠️ 修复方案(代码修正):
我们需要修改 Python 源码。如果你使用 Docker 映射了代码目录,可以直接修改;否则需要进入容器修改。
修正 1:trendradar/notification/senders.py
找到 send_to_feishu 函数,将原来的 text 类型 payload 替换为 interactive 卡片类型。
# 修改前:
# payload = {
# "msg_type": "text",
# "content": {
# "text": batch_content,
# },
# }
# 修改后:
if is_flow_webhook:
# 兼容飞书捷径/自动化流程的 Webhook
payload = {"msg_type": "text", "content": {"text": batch_content}}
else:
# 标准飞书机器人 Webhook,使用卡片渲染 Markdown
payload = {
"msg_type": "interactive",
"card": {
"header": {
"title": {"tag": "plain_text", "content": "AI 热点推送"},
"template": "blue"
},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
# 关键标签
"content": batch_content
}
}
]
}
}
注意:同样的逻辑也需要应用到
trendradar/notification/dispatcher.py和mcp_server/tools/notification.py中,确保所有推送入口(包括 RSS 更新通知和 MCP 工具调用)都能正确渲染 Markdown。
修正 2:docker/docker-compose.yml
volumes 中添加 - ../trendradar:/app/trendradar
services:
restart: unless-stopped
ports:
- "${WEBSERVER_PORT:-8080}:${WEBSERVER_PORT:-8080}"
volumes:
- ../config:/app/config:ro
- ../output:/app/output
- ../trendradar:/app/trendradar
environment:
- TZ=Asia/Shanghai
6. 成果展示
6.1 飞书推送

6.2 Webserver

7. 进阶玩法:接入 Cherry Studio 进行 AI 对话
部署了 MCP 服务后,TrendRadar 就不再只是一个单向的推送工具,而是可以对话的知识库。
7.1 Server 端配置
确保在步骤 4.1 中已经开放了 3333 端口,且 docker-compose.yml 中包含了 trendradar-mcp 服务。
局域网地址示例:http://192.168.1.100:3333
7.2 Cherry Studio 客户端配置
- 添加模型服务:在设置中添加 NVIDIA 或其他兼容 OpenAI 的服务商,填入 API Key。
- 添加 MCP 服务器:
- 名称:TrendRadar MCP
- 类型:可流式传输的 HTTP (streamableHttp)
- URL:
http://192.168.xxx.xxx:3333/mcp(请替换为你部署机器的实际 IP)
7.3 效果展示
连接成功后,你可以在 Cherry Studio 中直接在这个 MCP 频道下提问:
Prompt: "我想了解 'AI' 这个话题,请依次完成以下步骤:搜索今天的相关新闻分析最近一周的热度趋势对比各平台的关注度分析最近一周的情感倾向 请展示每个步骤的完整结果。"
AI 将会自动调用 TrendRadar 的数据库,生成包含图表数据(如热度指数、情感占比、平台覆盖率)的专业分析报告。
# AI 话题分析与总结
## 🧑💻 User
我想了解'ai'这个话题,请依次完成以下步骤,并【展示每个步骤的完整结果】:
1. 搜索今天的相关新闻
2. 分析最近一周的热度趋势
3. 对比各平台的关注度
4. 分析最近一周的情感倾向
【重要】:请将 4 个步骤的结果全部展示出来,不要只展示最后一步。
---
## 🤖 Assistant
我来帮你完成关于"AI"话题的全面分析。让我依次执行 4 个步骤,并展示每个步骤的完整结果。
## 步骤 1:搜索今天的 AI 相关新闻
## 步骤 2:分析最近一周的热度趋势
## 步骤 3:对比各平台的关注度
## 步骤 4:分析最近一周的情感倾向
# AI 话题综合分析报告
根据 4 个步骤的完整分析结果,以下是关于"AI"话题的全面洞察:
...
8. 总结
通过本次本地部署,我们成功实现了:
- 数据自主:所有新闻数据存储在本地 SQLite/Docker 卷中。
- 体验升级:修复了飞书推送的渲染 bug,阅读体验大幅提升。
- 智能加持:利用免费的 NVIDIA 大模型实现了零成本的热点摘要。
- 深度交互:通过 MCP + Cherry Studio,把'看新闻'变成了'研判情报'。

