用 n8n + GitHub API 搭建 AI 开源项目自动监控系统(Docker 部署 + 评分模型 + Lark推送)

背景

研究 GitHub 上 AI 自动化方向的开源项目(n8n、Dify、Flowise 这些),需要一个自动化的选题监控工具。手动刷 Trending 效率太低,而且 Trending 算法不一定能覆盖我关注的细分方向。

目标:每天定时搜索 GitHub 上 AI/Agent/工作流相关的高星项目,用自定义评分模型排序,推送 Top 5 到Lark群。

技术栈:n8n(Docker 自托管)+ GitHub REST API v3 + Lark Webhook。

最终效果

n8n 工作流 5 个节点:

scss 复制代码
Schedule Trigger → HTTP Request(GitHub API) → Code(评分) → Code(格式化) → HTTP Request(Lark)

每天 08:00 自动执行,Lark群收到格式化的 Top 5 项目列表。

GitHub API 踩坑

坑1:OR 操作符上限

GitHub Search API 限制单次查询最多 5 个逻辑操作符。超过直接返回 422:

json

json 复制代码
{"message":"Validation Failed","errors":[{"message":"More than five AND / OR / NOT operators were used."}]}

坑2:qualifier 不支持 OR

topic:ai-agent OR topic:automation 这种写法无效。topic: 是 qualifier,OR 只能连接 search term。

最终可用的 query:

复制代码
ai agent workflow automation stars:>1000 pushed:>2026-03-01

纯文本关键词(GitHub 做全文匹配)+ stars 和 pushed 两个 qualifier 过滤。

评分模型实现

在 n8n 的 Code 节点里用 JavaScript 实现。核心逻辑:

javascript

ini 复制代码
// 关键词库
const hotWords = [
  'agent','n8n','workflow','automation','llm','ai',
  'dify','langchain','flowise','mcp','claude',
  'deepseek','chatbot','rag','typebot','chatwoot',
  'self-hosted','no-code','low-code'
];

// 对每个 repo 评分
const all = `${desc} ${name} ${topics}`;
const hits = hotWords.filter(w => all.includes(w));

let score = 0;

// Star 总量 (0-25)
if (repo.stargazers_count > 50000) score += 25;
else if (repo.stargazers_count > 10000) score += 20;
else if (repo.stargazers_count > 3000) score += 15;
else score += 8;

// 关键词匹配 (0-30)
score += Math.min(hits.length * 6, 30);

// 更新活跃度 (0-20)
const days = Math.floor(
  (Date.now() - new Date(repo.pushed_at).getTime()) / 86400000
);
if (days <= 3) score += 20;
else if (days <= 14) score += 12;
else score += 5;

// 描述质量 (0-10)
if (repo.description && repo.description.length > 20) score += 10;

// 语言友好度 (0-15)
const easy = ['python','javascript','typescript','shell'];
if (easy.includes((repo.language || '').toLowerCase())) score += 15;
else score += 5;

满分 100,按分数降序取前 5。

Lark消息格式化

javascript

javascript 复制代码
const medals = ['🥇','🥈','🥉','4️⃣','5️⃣'];
items.forEach((item, i) => {
  const r = item.json;
  const s = r.stars >= 1000 
    ? (r.stars/1000).toFixed(1)+'k' : r.stars;
  msg += `${medals[i]} ${r.name}\n`;
  msg += `   ⭐${s} · ${r.lang} · 评分${r.score}\n`;
  msg += `   ${r.desc}\n`;
  msg += `   🔗 ${r.url}\n`;
  msg += `   🎯 ${r.keywords}\n\n`;
});

通过Lark自定义机器人 Webhook POST 发送,msg_type: "text"。

部署

bash

bash 复制代码
# 一行命令部署 n8n
docker run -d --name n8n -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  --restart always n8nio/n8n

导入工作流 JSON → 配置Lark Webhook URL → Publish 激活。

可优化方向

  1. 加 GitHub Token 认证:未认证的 API 限制 10 次/分钟,加 Token 后提升到 30 次/分钟
  2. 多次搜索合并:用不同关键词组合做 2-3 次搜索,合并去重后再评分
  3. 历史数据对比:把每天的结果存到数据库,对比 Star 日增量,识别"爆发式增长"的项目
  4. 接入 AI 摘要:对 Top 1 项目自动抓取 README,调用 LLM 生成中文摘要

工作流文件

完整的 n8n 工作流 JSON 文件可以直接导入使用。需要的话发"GitHub监控"领取。


下一篇准备拆解 Dify 的本地部署,同样会记录完整的踩坑过程。关注不迷路。

相关推荐
最强小杰2 小时前
Claude Opus 4.8 调用一直报 529 怎么办?同样请求换旧模型却正常——附 429/529 双桶退避代码
ai·github
来自于狂人4 小时前
GitHub 开源趋势日报 | 2026年10月7日用 AI Agent 逆向工程一切
人工智能·开源·github
逛逛GitHub6 小时前
盘点 20 个 9 月份 GitHub 上顶顶顶的开源项目。
github
miofly6 小时前
Google 发布 EmbeddingGemma 2:7.4 亿参数的多模态嵌入模型
开源·github
wflynn7 小时前
GitHub 今日推荐|lightcraft:纯 Rust 重写的 RAW 照片开发工具
rust·开源·github·lightroom·art·photography
wflynn8 小时前
GitHub 日榜趋势速报 | 2026-10-07
开源·github
孟陬8 小时前
#教程 dw, dm, dy, d18m 是何意?万物可 Badge | 定制漂亮精致小徽章,打造眼前一亮 README
npm·github
爱写代码的倒霉蛋8 小时前
新手如何借助agent改造github项目(保姆级教程)
github·新手友好·改造项目
u1301308 小时前
GitHub 热榜项目:日榜(2026-10-07)
驱动开发·github
高频因子挖掘机9 小时前
量化选股到底要不要每天拉全市场股票?从全市场扫描到候选池的行情数据设计
后端·github·api