开发者生态
morning
我们使用 Git 的 –author 标志在 GitHub 存储库中阻止了 AI 机器人垃圾邮件
2026-05-18
1 阅读
ildari
作者:Ildar Iskhakov,首席技术官 我们所知道的开源的终结 几个月前,当 GitHub 分享了有关庆祝人工智能在其产品指标中做出的巨大贡献的统计数据时,我们完全没有注意到贡献质量下降的问题,我们已经感觉到事情正在向南发展。第一个令人担忧的时刻是我们发布的带有 900 美元赏金的问题。我们希望激励有人做出贡献,并为我们的平台带来闪亮的新“MCP 应用程序”支持。我们很快引起了提出计划、提出问题、提交尝试的合法贡献者的注意 - 但很快......人工智能机器人到来并炸毁了这个问题,使其评论总数达到 253 条,用毫无意义的“实施计划”甚至对维护者的纯粹攻击来毒害对话! AI 账户开始涌入的不仅仅是这个问题,还有整个仓库。每条草率的评论都会触发每个观看该存储库的团队成员的通知。我们的 GitHub 通知变成了噪音墙。来自 @ethanwater、@developerfred 和 @Geetk172 等贡献者(积极从事赏金工作的人)的真实对话被埋没了。后来,这个问题演变成了流行病。例如,仅针对向 Archestra 添加 x.ai 提供程序支持的问题,我们就收到了 27 个拉取请求,其中大多数贡献者甚至没有尝试测试。我们的一名团队成员必须每周花半天时间清理存储库中的 AI 垃圾,删除未经测试的 PR 并关闭幻觉问题。当我们忘记这样做时,我们的存储库很快就变成了对合法贡献者完全不友好的地方。反击 首先,我们尝试计算贡献者的“声誉”并构建了“London-Cat”,这是一个微型机器人,根据合并的 PR 和一些其他信号计算贡献者的声誉(示例)。它显然并没有阻止垃圾邮件,但它帮助我们弄清楚“谁是谁”。下一步,我们建立了一个“AI 警长”(示例),这显然关闭了一些合法的 PR ?。无用的人工智能评论和建议不断涌现,情况只会变得更糟,将合法的贡献者拒之门外,并让我们重新考虑:我们是否应该停止用赏金来激励贡献?我们应该停止给求职者提供有趣的测试任务吗?我们决定,我们需要反击并坚持让我们的仓库成为合法贡献者、负责任的人工智能用户、新手和经验丰富的工程师的舒适和安全的空间。今天,我们将阻止那些未完成入职培训的人创建问题、公开 PR 和留下评论的能力。贡献者入职,列入白名单的五个步骤 这是一个核选项,是的。对于一家由风险投资支持的初创公司来说,这一点尤其敏感,因为它是通过 GitHub 活动进行彻底衡量的,但我们必须扣动扳机:我们重视质量而不是数量。我们不重视人工智能溢出带来的指标。我们希望 Archestra 成为一款优秀的软件,每个人都可以为之做出贡献,而不会被人工智能机器人吞并。在 GitHub 中进行操作 没有直接的方法可以将那些可以在开源存储库上发表评论或创建 PR 的人列入白名单,因此我们不得不进行一些修改。有一个名为“限制之前的贡献者”的设置。简单的规则:如果你之前没有提交过 main ,你就不能评论问题或 PR。先前的贡献者设置该设置无法区分人工智能机器人和签署赏金计划的真正开发人员之间的区别。两人都“不是先前的贡献者”。两人都被锁在门外。 GitHub 将“先前贡献者”定义为 GitHub 帐户是 main 上提交的作者的人。 Git 提交有两个身份字段——作者和提交者——而且他们可以是不同的人。您可以使用 Git 的 --author 标志创建归因于其他人的提交。如果电子邮件与他们的 GitHub 帐户匹配,GitHub 会将提交链接到他们的个人资料并授予他们贡献者身份。每个 GitHub 帐户都有一个 noreply 电子邮件: +@users.noreply.github.com 。通过 API 查找 ID 并提交: gh api users /their-username --jq '.id' git commit \ --author= "their-username " \ -m "chore: add their-username to external军团成员" 推送到 main ,他们可以立即发表评论。提交归因于外部用户 外部用户显示为作者,我们的帐户显示为提交者。这就是 GitHub 将他们视为先前贡献者所需的全部内容。完整流程:使用道德 AI 规则和验证码登录我们的网站:https://archestra.ai/contributor-onboard 提交时触发的 GitHub 操作,查找用户的 GitHub ID,将其句柄添加到 EXTERNAL_CONTRIBUTORS.md 文件,并将提交推送到在其帐户下编写的主要内容。用户被列入白名单并可以访问该存储库。虽然 GitHub 报告了大规模的指标增长(其中很大一部分是由 AI 生成的),但作为开源项目团队,我们必须承担起清理存储库中的 AI 垃圾的重任,并提出深奥的建议。