从 X (Twitter) 抓取 AI 领域最新动态,经 AI 筛选和内容生成,自动渲染为小红书风格的图片卡片日报。同时提供热点雷达功能,每 30 分钟扫描一次,发现高潜力内容实时推送到企业微信。
bird CLI 抓取推文(timeline + lists) → 过滤/去噪 → AI 筛选(跨天去重) → AI 生成结构化日报 → 渲染 PNG 卡片 → 企业微信推送
bird CLI 抓取推文(timeline + lists) → 增量过滤(只看新推文) → AI 打分(1-10) → score ≥ 8 推送企业微信
| 依赖 | 版本 | 说明 |
|---|---|---|
| Node.js | >= 18 | 运行环境 |
| bird | >= 0.8.0 | Twitter 数据抓取 CLI |
| claude CLI | - | AI 内容生成(通过 claude 命令行调用) |
# bird CLI(全局安装)
npm install -g @steipete/bird
# claude CLI(参考 https://docs.anthropic.com/en/docs/claude-code)git clone <repo_url> ai-tracer
cd ai-tracer
npm install# 初始化项目(创建 .env 和必要目录)
npm run dev -- init编辑 .env 文件:
# [必填] Twitter 认证信息(从浏览器 Cookie 中获取)
# 登录 X → 开发者工具 → Application → Cookies → 找 auth_token 和 ct0
TWITTER_AUTH_TOKEN=your_auth_token_here
TWITTER_CT0=your_ct0_here
# [可选] X Lists ID(逗号分隔,用于扩展信息源)
X_LISTS=1234567890,0987654321
# [可选] 企业微信群机器人 Webhook
WECOM_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key_here项目使用 Hiragino Sans GB 字体渲染中文卡片,字体文件需放在 fonts/ 目录:
fonts/
Hiragino Sans GB.ttc
Linux 服务器通常没有这个字体,需要从 macOS 拷贝或自行获取。
npm run dev -- run自动完成:抓取 timeline + lists → 筛选 → 生成 → 渲染 → 推送。
npm run dev -- monitor自动完成:抓取最新推文 → 增量过滤 → AI 评分 → 高分热点推送企业微信。
# 1. 抓取推文
npm run dev -- fetch
# 2. 生成图片卡片
npm run dev -- generate# 抓取指定数量
npm run dev -- run -n 200
# 只抓最近 12 小时的推文
npm run dev -- run -h 12
# 抓取指定用户
npm run dev -- fetch -m user -u elonmusk
# 搜索关键词
npm run dev -- fetch -m search -q "GPT-5"
# 抓取 X List
npm run dev -- fetch -l 1234567890
# 跳过已处理的推文
npm run dev -- generate --skip-processed
# 指定输入文件
npm run dev -- generate -i data/raw/2026-02-27.json# 编辑 crontab
crontab -e添加以下内容(注意替换路径和 Node.js 版本路径):
# 每天 9:00:完整日报 pipeline
0 9 * * * cd /path/to/ai-tracer && PATH=/path/to/node/bin:$PATH npm run dev -- run >> cron.log 2>&1
# 每 30 分钟:热点雷达
*/30 * * * * cd /path/to/ai-tracer && PATH=/path/to/node/bin:$PATH npm run dev -- monitor >> cron_monitor.log 2>&1每次运行后在 output/ 目录生成:
output/
2026-02-27_cards/ # PNG 卡片图片
card_01.png # 封面
card_02.png # 内容卡片
...
card_09.png # 结尾
2026-02-27_report.json # 结构化数据备份
2026-02-27_ai_daily.md # Markdown 文本日报
data/
raw/ # 每天的原始推文(按日期分文件)
2026-03-01.json
2026-03-02.json
processed.json # 已生成过卡片的推文 ID(日报去重用)
reported_events.json # 已报道过的事件摘要(跨天去重用)
monitor_state.json # 热点雷达扫描状态(增量扫描用)
src/
index.ts # CLI 入口(init/fetch/generate/run/monitor)
fetcher.ts # 推文抓取(调用 bird CLI)
generator.ts # 核心编排(AI 筛选 + AI 生成 + 渲染调度)
card-renderer.ts # Canvas 卡片渲染器(1242×1660 PNG)
monitor.ts # 热点雷达(抓取 + AI 评分 + 推送)
ai-client.ts # AI 调用封装(claude CLI)
notifier.ts # 企业微信推送(文本 + 图片)
config.ts # 配置加载(.env)
types.ts # 类型定义
utils.ts # 工具函数
prompts/
filter.md # AI 筛选 prompt(控制保留/排除标准)
xiaohongshu.md # AI 内容生成 prompt(小红书风格日报)
monitor.md # 热点雷达 prompt(爆款潜力评分)
fonts/
Hiragino Sans GB.ttc # 中文渲染字体
| 文件 | 作用 |
|---|---|
prompts/filter.md |
控制 AI 筛选标准(保留什么、排除什么) |
prompts/xiaohongshu.md |
控制日报内容生成风格(封面、正文、标签、字数约束) |
prompts/monitor.md |
控制热点评分标准(什么算爆款、评分维度) |
MIT