这是给 AI Agent(如 OpenClaw)的部署操作手册。请按顺序执行以下步骤,将 AI Tracer 部署到目标服务器上。
AI Tracer 是一个自动化工具:
- 每天 9:00 从 X(Twitter) 抓取 AI 领域推文,生成小红书风格图片日报,推送到企业微信
- 每 30 分钟扫描一次推文,发现热点实时推送
确认服务器上有以下工具,没有的需要安装:
# 检查 Node.js(需要 >= 18)
node --version
# 如果没有 Node.js,通过 nvm 安装
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
# 检查 git
git --versiongit clone <repo_url> ~/ai-tracer
cd ~/ai-tracer
npm install项目依赖两个全局 CLI 工具:
npm install -g @steipete/bird
# 验证
bird --version
# 期望输出类似: 0.8.0目标服务器上需要有可用的 claude 命令。根据服务器环境安装:
# 验证
claude --version重要:
ai-client.ts中调用的命令名是claude-internal。如果目标服务器上的命令名不同(比如是claude),需要修改src/ai-client.ts第 16 行的spawn('claude-internal', args)为实际的命令名。
cd ~/ai-tracer
cp .env.example .env编辑 .env,填入以下内容:
# [必填] Twitter 认证 — 从浏览器登录 X 后的 Cookie 中获取
# 浏览器 → 开发者工具(F12) → Application → Cookies → x.com
# 找到 auth_token 和 ct0 的值
TWITTER_AUTH_TOKEN=<填入 auth_token 值>
TWITTER_CT0=<填入 ct0 值>
# [可选] X Lists ID(扩展信息源,逗号分隔)
X_LISTS=
# [可选] 企业微信群机器人 Webhook URL
WECOM_WEBHOOK_URL=<填入 webhook URL>部署者需要提供这三个值。Twitter Cookie 有效期有限,过期后需要重新获取。
卡片渲染需要中文字体。项目使用 Hiragino Sans GB,字体文件应放在 fonts/ 目录:
ls ~/ai-tracer/fonts/
# 期望看到: Hiragino Sans GB.ttc如果 fonts/ 目录为空(字体文件未提交到 git),需要从其他机器拷贝 Hiragino Sans GB.ttc 到 fonts/ 目录。
备选方案:如果无法获取该字体,可以安装系统中文字体包:
# Ubuntu/Debian
sudo apt-get install -y fonts-noto-cjk
# CentOS/RHEL
sudo yum install -y google-noto-sans-cjk-fonts然后修改 src/card-renderer.ts 中的字体名称为系统可用的中文字体。
cd ~/ai-tracer
# 初始化目录结构
npm run dev -- init
# 测试抓取(应该能看到推文数量输出)
npm run dev -- fetch -n 10
# 测试热点雷达(需要先有推文数据)
npm run dev -- monitor
# 测试完整日报(耗时较长,约 2-3 分钟)
npm run dev -- run每一步都应该正常完成,无报错。如果企业微信配置正确,你应该能在群里收到推送。
crontab -e添加以下两行(注意替换 Node.js 路径):
# 每天 9:00 UTC:完整日报 pipeline
0 9 * * * cd ~/ai-tracer && PATH=$(dirname $(which node)):$PATH npm run dev -- run >> ~/ai-tracer/cron.log 2>&1
# 每 30 分钟:热点雷达(自动抓取 + AI 扫描 + 推送)
*/30 * * * * cd ~/ai-tracer && PATH=$(dirname $(which node)):$PATH npm run dev -- monitor >> ~/ai-tracer/cron_monitor.log 2>&1注意:cron 环境的 PATH 可能找不到 node/bird/claude,所以需要显式设置。最可靠的方式是用绝对路径:
# 查看实际路径 which node # 例如 /home/ubuntu/.nvm/versions/node/v22.15.1/bin/node然后把 cron 里的 PATH 设为该 bin 目录。
验证 cron 生效:
# 查看当前 crontab
crontab -l
# 等几分钟后检查日志
tail -f ~/ai-tracer/cron_monitor.logCookie 会定期过期,表现为 fetch 报错。需要重新从浏览器获取 auth_token 和 ct0,更新 .env。
# 日报日志
tail -100 ~/ai-tracer/cron.log
# 热点雷达日志
tail -100 ~/ai-tracer/cron_monitor.log# 重新生成今天的日报
cd ~/ai-tracer && npm run dev -- run
# 手动触发一次热点扫描
cd ~/ai-tracer && npm run dev -- monitor# 清理旧的原始推文(保留最近 7 天)
find ~/ai-tracer/data/raw -name "*.json" -mtime +7 -delete
# 清理旧的输出
find ~/ai-tracer/output -name "*_cards" -type d -mtime +7 -exec rm -rf {} +| 问题 | 原因 | 解决 |
|---|---|---|
bird 命令执行失败 |
Twitter Cookie 过期 | 重新获取 auth_token 和 ct0 |
claude-internal 启动失败 |
CLI 命令名不匹配 | 检查实际命令名,修改 src/ai-client.ts |
| 卡片上中文是方块 | 缺少中文字体 | 安装字体到 fonts/ 或安装系统字体包 |
| cron 不执行 | PATH 问题 | 在 cron 中显式设置 Node.js 的 bin 路径 |
| 企业微信推送失败 | Webhook URL 错误或机器人被禁 | 检查 .env 中的 URL,确认机器人在群内 |