在信息爆炸时代,手动浏览多个新闻平台已无法跟上热点节奏。TrendRadar 项目提供了一个轻量级解决方案:通过 Docker 一键部署 MCP(Model Context Protocol)AI 系统,自动聚合抖音、Bilibili、知乎等 35 个平台的新闻热点,并内置 13 种分析工具,实现趋势追踪、情感分析和相似检索等功能,同时支持企业微信、飞书等多渠道实时通知。本文聚焦工程化部署要点,给出可复制的参数配置、关键词过滤清单和 MCP 工具调用参数,确保零编程基础用户也能快速上线。
Docker 部署核心参数与步骤
TrendRadar 的设计目标是“轻量、易部署”,支持 GitHub Actions 和 Docker 双模式,但 Docker 更适合本地/NAS 私有化运行,避免 GitHub 配额限制。核心镜像 wantcat/trendradar:latest 已预编译多架构(AMD64/ARM),体积小、启动快。
部署清单(docker-compose 推荐):
-
目录准备:
mkdir -p trendradar/{config,output,docker}
cd trendradar
-
下载模板(从官方仓库):
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/config/config.yaml -P config/
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/config/frequency_words.txt -P config/
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/docker/docker-compose.yml -O docker/docker-compose.yml
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/docker/.env -O docker/.env
-
环境变量配置(docker/.env,优先级最高):
# 核心开关
ENABLE_CRAWLER=true
ENABLE_NOTIFICATION=true
# 推送模式:daily(当日汇总)/current(当前榜单)/incremental(增量,只新内容)
REPORT_MODE=incremental # 推荐投资者/交易员,避免重复
# 推送时间窗口(可选,避免夜间扰民)
PUSH_WINDOW_ENABLED=true
PUSH_WINDOW_START=08:00
PUSH_WINDOW_END=22:00
# 多渠道通知(至少选一,多个并行)
WEWORK_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your-key # 企业微信
FEISHU_WEBHOOK_URL=https://www.feishu.cn/open-apis/bot/v2/hook/your-hook # 飞书(显示最友好)
DINGTALK_WEBHOOK_URL=https://oapi.dingtalk.com/robot/send?access_token=your-token # 钉钉
TELEGRAM_BOT_TOKEN=123456:AAH... # Telegram(需配 CHAT_ID)
TELEGRAM_CHAT_ID=your-chat-id
EMAIL_FROM=your@email.com # 邮件(自动识 SMTP)
EMAIL_PASSWORD=your-auth-code
EMAIL_TO=user1@email.com,user2@email.com
NTFY_TOPIC=trendradar-yourname-1234 # ntfy(免费跨平台)
BARK_URL=https://api.day.app/your-key # iOS Bark
# 爬取频率(CRON,勿太频防 API 限流)
CRON_SCHEDULE="*/30 * * * *" # 每 30min
-
启动:
cd docker
docker-compose up -d
docker logs -f trend-radar # 监控日志
容错参数:
MAX_NEWS_PER_KEYWORD=10:每个关键词限 10 条,防推送过长。
SORT_BY_POSITION_FIRST=true:按配置顺序优先(config.yaml/report),而非纯热度。
- 数据持久:
-v ./output:/app/output,重启不丢历史。
部署后 1-2 天积累数据,即可启用 MCP AI。项目自带 11 月测试数据(output/),即时体验。
关键词过滤与热点算法调优
聚合基于 newsnow API(35+ 平台:抖音/知乎/B站/微博/百度/财联社 等),默认 11 个,可在 config.yaml/platforms 扩展。
frequency_words.txt 语法清单(空行分词组,独立统计):
# 组1: AI 技术(热度优先)
人工智能
ChatGPT
+技术
!广告
@15 # 最多 15 条
# 组2: 股市(增量监控)
A股
上证
+涨跌
!预测
@5
# 组3: 汽车(跨平台对比)
特斯拉
比亚迪
+销量
热点权重(config.yaml/weight,总和=1.0):
- 实时追热点:
rank_weight: 0.7, frequency_weight: 0.2, hotness_weight: 0.1
- 深度趋势:
rank_weight: 0.3, frequency_weight: 0.5, hotness_weight: 0.2
推送示例(飞书效果最佳):
🔥 [1/3] AI ChatGPT: 5条
1. [知乎] 🆕 ChatGPT-5发布 [1] - 09:15 (1次)
MCP AI:13 工具工程调用参数
MCP 服务(uv run python -m mcp_server.server 或 HTTP:3333/mcp)兼容 Claude Desktop/Cursor/Cline 等。13 工具分类:
基础查询 (3):
get_latest_news: {platform: "zhihu", limit: 10} → 最新知乎 Top10。
get_news_by_date: {date: "2025-11-25", keyword: "AI"}。
get_trending_topics: {days: 7} → 7 天趋势词。
智能检索 (4):
search_news: {query: "比特币", platforms: ["douyin", "bilibili"]}。
search_related_news_history: {topic: "特斯拉", days: 30} → 历史关联。
find_similar_news: {news_id: "abc123", similarity_threshold: 0.8}。
analyze_sentiment: {news_list: [...], sentiment_type: "positive|negative|neutral"} → 情感倾向(阈值 0.7+ 高置信)。
高级分析 (4):
analyze_topic_trend: {topic: "AI", period: "week"} → 热度生命周期/预测。
analyze_data_insights: {topics: ["A股", "美股"], metrics: "frequency,rank"} → 跨平台对比。
generate_summary_report: {date_range: "2025-11-20~25", format: "markdown"}。
analyze_emotion_evolution: {topic: "政策", days: 14}。
系统 (2):
get_current_config / get_system_status → 监控数据量/错误率。
trigger_crawl: {platforms: ["all"]} → 手动触发。
调用最佳实践:
- Cursor/Claude:STDIO 模式,路径
/path/to/TrendRadar。
- 参数校验:日期 YYYY-MM-DD,平台 ID 如 "zhihu"/"douyin"。
- 监控阈值:数据 <7 天报错,回滚用测试数据。
- 回滚策略:日志异常 →
docker-compose down; docker pull wantcat/trendradar:latest; up -d。
风险控制与监控
- 限流:CRON >15min,star newsnow 项目。
- 隐私:Webhook 用 GitHub Secrets 或 .env,非明文 config.yaml。
- 监控点:
docker exec trend-radar python manage.py status(数据条数/上次爬取)。
- 扩展:NAS 如群晖,端口 80/443 映射,环境变量覆盖 yaml。
TrendRadar 将被动刷屏转为主动智能推送,MCP AI 解锁数据价值。生产阈值:关键词 5-10 组,平台 15+,日推送 <50 条。
资料来源:
(正文约 1250 字)