[控场AI]
· 17 分钟阅读· 8,653 字

AI垃圾PR正在淹没开源项目,维护者不堪重负

AI垃圾PR正在淹没开源项目,维护者不堪重负

当开源社区遭遇"AI流水线"

近日,一篇标题直白的帖子在 Hacker News 上引发讨论:《请停止用AI垃圾内容淹没我们的项目来装点你的简历》(Please stop flooding our projects with AI slop to furnish your CV)。虽然帖子本身讨论量不大,但它触及了当下开源生态中一个愈发尖锐的痛点——大量由AI批量生成的低质量贡献(PR、Issue、文档)正在挤占维护者的时间与精力。

"AI slop"(AI垃圾/AI泔水)已经成为技术社区的高频词,专指那些看似规范、实则缺乏实质价值、甚至引入错误的AI生成内容。这一术语最早在2024年左右开始在英文技术社区中广泛传播,其灵感来源于"slop"一词的本义——泔水、残羹剩饭。它与此前流行的"spam"(垃圾信息)有所区别:spam强调的是未经请求的批量发送行为,而slop则侧重于内容本身的低质量和空洞无物。AI slop的典型特征包括:表面格式规范但缺乏真正洞见、语言风格高度模板化(如频繁使用"It's important to note that"等ChatGPT标志性句式)、以及在细节处出现微妙但关键的错误。

值得注意的是,AI slop的流行与更广泛的AI生成内容泛滥趋势密切相关。在2024年,这一现象不仅出现在开源社区,也席卷了社交媒体、学术出版和搜索引擎结果。Google在2024年的搜索质量更新中专门针对AI生成的低质量内容进行了算法调整,其核心搜索排名系统引入了"有用内容"(helpful content)分类器,试图降低那些"为搜索引擎而非用户"生成内容的排名权重。学术界同样深受其害,多家期刊发现投稿论文中包含ChatGPT的残留痕迹(如"As an AI language model"等短语),Springer Nature和Elsevier等主要学术出版商不得不更新投稿政策,明确要求作者披露AI工具的使用情况。在社交媒体平台上,AI生成的"内容农场"账号大量涌现,通过批量生产看似有信息量的帖子来获取流量和广告收入。开源社区遭遇的AI slop问题,可以被视为这一全球性数字内容质量危机在软件开发领域的具体映射。当这种内容大规模涌入开源项目时,它带来的不是贡献,而是负担。

为刷简历而批量提交AI生成PR

帖子标题中一个关键词值得注意:"to furnish your CV"(为了装点简历)。这揭示了AI垃圾PR泛滥的核心动机之一。

开源贡献沦为求职筹码

长期以来,GitHub 上的贡献记录被视为开发者能力的重要背书。GitHub的贡献记录系统(contribution graph,即人们常说的"绿色格子图")自2013年推出以来,逐渐演变为开发者能力的非正式证明,记录了用户每天的commit、PR、issue和code review活动,并以热力图形式展示。这张热力图的每个格子代表一天,颜色深浅反映当日贡献活动的频率——从浅绿到深绿,构成了开发者们戏称的"种草坪"(growing grass)视觉效果。在招聘实践中,许多科技公司——尤其是硅谷的初创企业——确实会将候选人的GitHub profile作为技术面试的参考依据,一些求职平台甚至开发了专门的工具来分析GitHub活动的"含金量"。许多招聘方会查看候选人的开源足迹,一些开发者也据此在简历上写下"曾为知名开源项目贡献代码"。

这本是良性激励,但当 AI 工具让"生成一个看似合理的 PR"变得几乎零成本时,激励机制就被彻底扭曲了。事实上,GitHub贡献记录被滥用并非AI时代的新现象。早在AI工具普及之前,就存在所谓的"contribution padding"(贡献填充)行为,即开发者通过自动化脚本向私有仓库提交空commit来"刷绿"贡献图。GitHub在2016年调整了贡献计算规则,将私有仓库的贡献也纳入统计,本意是更全面地反映开发者活动,但客观上也降低了伪造贡献记录的难度。AI工具的出现将这一问题提升到了新的量级:过去刷贡献需要至少制造形式上的commit,而现在可以生成看似有实质内容的代码修改,使得甄别真假贡献变得更加困难。

值得注意的是,这种评估方式本身就存在争议:它天然偏向有时间做开源贡献的开发者,对在公司内部做闭源开发的工程师并不公平。这种偏见在技术行业中被称为"开源特权"(open source privilege)——并非所有开发者都有雇主允许、时间余裕或经济条件来进行无偿的开源贡献,而将GitHub活跃度作为能力指标,实际上系统性地低估了大量优秀但无暇参与开源的工程师。AI垃圾PR的泛滥进一步暴露了这一评估体系的脆弱性——当贡献记录可以被低成本伪造时,它作为能力信号的可信度就大打折扣。

贡献数量替代了贡献质量

部分贡献者不再关心自己是否真正理解了项目,也不在乎修改是否真的有价值,而是追求"贡献数量"这一表面指标。他们用 AI 批量扫描代码库,生成大量诸如"修正拼写""格式化代码""重构无关函数"的 PR,甚至编造出根本不存在的"Bug 修复"。这种行为在开源社区中被讽刺地称为"drive-by PR"(路过式PR),意指提交者对项目毫无了解,如同驾车路过时随手向窗外扔出一个PR一样草率。一些特别受欢迎的"目标"包括修改README文件中的标点符号、将制表符替换为空格、或者添加本不需要的类型注解——这些修改在形式上构成了合法的贡献,但对项目的实际价值为零甚至为负(因为它们制造了不必要的代码变更历史,干扰了git blame等代码溯源工具的正常使用)。对项目而言,这些贡献往往需要维护者花费大量时间核验,最终却发现毫无意义。

开源维护者承受的隐性成本

开源维护者大多是无偿或低回报的志愿者。他们的时间是整个生态最稀缺的资源之一。AI垃圾PR带来的伤害恰恰集中在这个环节。

事实上,开源维护者的困境是一个长期存在的结构性问题,远早于AI时代。根据Tidelift在2024年发布的开源维护者调查报告,超过60%的维护者是无偿志愿者,近半数表示曾因倦怠(burnout)考虑放弃维护工作。维护者倦怠并非抽象概念——它的具体表现包括对issue和PR的响应时间持续延长、releases发布频率降低、以及维护者在社区讨论中表现出明显的疲惫和不耐烦情绪。一些广泛使用的库曾因维护者burnout而陷入长期停滞,对依赖这些库的下游项目造成了连锁影响。2014年的OpenSSL "心脏出血"(Heartbleed)漏洞事件曾深刻揭示了这一问题:这个被全球数百万服务器依赖的加密库,当时仅由一名全职开发者维护。Heartbleed漏洞是一个存在于OpenSSL TLS心跳扩展实现中的缓冲区过读错误(buffer over-read),它允许攻击者读取服务器内存中的敏感数据,包括私钥、用户密码和会话令牌,影响了当时互联网上约17%的安全Web服务器。此后,Linux基金会成立了Core Infrastructure Initiative(后演变为Open Source Security Foundation,即OpenSSF),试图为关键开源项目提供资金支持。GitHub自身也在2019年推出了GitHub Sponsors功能,允许用户直接资助开源维护者。但整体而言,开源生态仍然面临严重的"公地悲剧"——所有人都在使用,但少有人愿意承担维护成本。AI垃圾PR的涌入,相当于在这个已经紧绷的系统上又施加了一层额外压力。

审核负担严重不对称

这是问题最本质的地方:生成一个AI PR只需几秒,但审核它可能需要几十分钟。维护者必须逐行阅读代码、验证逻辑、运行测试、判断是否真的解决问题。当低质量PR成批涌入,这种成本不对称会迅速拖垮维护者的耐心与热情。

从经济学视角来看,这种审核负担不对称可以用"外部性"(externality)概念来解释。外部性是经济学中描述市场失灵的核心概念之一,指的是个体行为对未参与该行为的第三方造成的未被补偿的影响。AI垃圾PR的提交者几乎不承担任何成本——AI生成代码是免费或极低成本的,提交PR的操作也只需几次点击。然而,审核这些PR的成本却完全由维护者承担,这构成了典型的负外部性。更严重的是,这种负外部性具有累积效应:当一个项目被标记为"容易接受PR"时(例如GitHub上标有"good first issue"标签的issue经常成为AI垃圾PR的首选目标),会吸引更多的低质量提交者,形成恶性循环。经济学家Elinor Ostrom关于公共资源治理的理论在此同样适用——Ostrom在其1990年的经典著作《治理公地》中提出,成功的公共资源治理需要清晰的边界规则、与本地条件匹配的使用规则、以及有效的监督机制。开源项目的维护者注意力是一种有限的公共资源,需要通过制度设计来防止其被过度消耗,而当前许多开源项目正在经历的,恰恰是这种制度设计的缺位。

开源协作信任机制遭到破坏

开源协作建立在信任之上——维护者默认贡献者是出于善意、经过思考才提交内容。而AI垃圾贡献消耗的正是这份信任。当维护者不得不对每一个PR保持高度警惕、假设其可能是AI糊弄出来的,整个协作流程的效率与善意都会受损。这种信任侵蚀在实践中表现为:一些维护者开始对新贡献者的首次PR实施更严格的审查标准,无形中提高了真正有诚意的新人参与开源的门槛;部分项目开始关闭来自非已知贡献者的PR提交权限;还有维护者在社交媒体上公开表达对review PR的厌倦情绪,形成了对整个开源文化氛围的负面影响。

近年来已有知名项目的维护者公开抱怨AI生成的虚假内容浪费了团队大量时间。其中最典型的案例来自curl项目——这是全球使用最广泛的数据传输工具之一,几乎安装在所有现代操作系统上,累计安装量超过数十亿。curl支持包括HTTP、HTTPS、FTP在内的数十种协议,是从命令行工具到嵌入式设备的基础网络组件。其底层库libcurl更是被集成到了从PHP到Python的众多编程语言和框架中,甚至被NASA用于火星直升机"机智号"的通信系统。其创始人兼首席维护者Daniel Stenberg在2024年多次公开撰文批评AI生成的虚假安全漏洞报告。curl项目通过HackerOne平台运营漏洞赏金(bug bounty)计划,允许安全研究人员提交漏洞报告并获得奖金。HackerOne是全球最大的漏洞协调和赏金平台之一,连接安全研究人员与企业/开源项目,其运作模式是:研究人员发现漏洞后提交报告,项目维护团队验证漏洞的真实性和严重程度后,根据预设的赏金标准向研究人员支付奖金。然而,Stenberg发现越来越多的报告明显是由AI生成的:它们措辞专业、格式完美,却描述了根本不存在的漏洞,或者把正常的代码行为误读为安全缺陷。更棘手的是,这些报告乍看之下足够"可信",维护团队不得不花费大量时间逐一核实后才能确认其无效。Stenberg将此称为"AI安全洗白"(AI security washing),并警告这种行为实际上削弱了真正的安全研究工作,因为它消耗了本应用于处理真实漏洞的有限资源。这一案例还揭示了AI滥用在安全领域的独特风险:虚假漏洞报告不仅浪费维护者时间,还可能导致真正的安全问题被淹没在噪音中而延迟修复——这被称为"alert fatigue"(警报疲劳),是信息安全领域长期存在的问题,而AI垃圾报告正在加剧这一困境。

这不是反对AI辅助编程,而是反对AI滥用

需要澄清的是,社区的不满并非针对AI工具本身。AI辅助编程、自动化文档生成、代码审查提示等,在负责任地使用时确实能提升效率。真正的矛盾在于使用方式与动机。

要理解这一区分,有必要了解当前AI编程助手的技术架构与局限性。主流的AI编程助手(如GitHub Copilot、Cursor、Codeium等)基于大语言模型(LLM)技术,其核心架构是Transformer神经网络——这是Google研究团队在2017年发表的论文《Attention Is All You Need》中提出的架构,通过自注意力机制(self-attention)处理序列数据,彻底改变了自然语言处理和代码理解领域。这些工具通过在海量代码语料(包括GitHub上的公开代码仓库)上进行预训练来学习编程模式。它们在代码补全、模式匹配和模板生成方面表现出色,但存在根本性局限:它们不具备对代码语义的真正理解,无法验证生成代码的正确性,也无法理解特定项目的架构决策和设计哲学。在计算机科学中,这一局限性有时被称为"随机鹦鹉"(stochastic parrot)问题——这一术语由Emily Bender等研究者在2021年的论文中提出,用于描述语言模型虽然能够生成流畅的文本,但并不真正"理解"其含义的本质特征。这就是为什么AI生成的PR经常出现"表面正确但实质有害"的情况——模型能够生成语法正确、风格一致的代码,却可能引入逻辑错误、违反项目约定或破坏向后兼容性。例如,一个AI生成的"性能优化"PR可能将一段看似低效的代码替换为更"简洁"的版本,却不知道原始写法是为了处理特定的边界情况或保持与旧版本API的兼容性。这种"流利但不可靠"的特性,恰恰是AI垃圾PR难以甄别的技术根源,也是为什么人类审查不可或缺的根本原因。

有价值的AI辅助开发方式

  • 开发者理解问题后,用AI加速实现并亲自验证
  • 用AI辅助排查Bug,但提交前完成充分测试
  • 生成初稿文档后,人工校对确保准确

被社区抵制的AI滥用行为

  • 完全不理解项目,让AI"批量找活干"
  • 不验证AI输出,直接提交可能有害的修改
  • 以刷贡献量为目的,制造无意义的PR噪音

区别在于:前者"人在环中",AI是工具;后者"人退出环外",人成了AI输出的搬运工。"人在环中"(Human-in-the-Loop, HITL)是人工智能领域的一个重要设计范式,最初广泛应用于机器学习模型的训练和验证流程中,特别是在主动学习(active learning)和强化学习从人类反馈(RLHF)等技术中扮演核心角色。其核心思想是:AI系统不应完全自主运行,而是在关键决策节点保留人类的监督、判断和干预能力。在软件开发领域,HITL理念意味着开发者应当理解AI生成代码的逻辑、审查其正确性、并对最终输出承担责任。GitHub Copilot、Cursor等AI编程助手的设计初衷都遵循HITL范式——它们被定位为"副驾驶"(copilot)而非"自动驾驶"。与之相对的是"Human-out-of-the-Loop"(人不在环中)模式,在这种模式下AI系统完全自主运行,人类仅在事后审查结果——这正是AI垃圾PR的典型生产模式:让AI自动扫描项目、自动生成修改建议、自动提交PR,人类最多只是点击提交按钮。当前围绕AI垃圾PR的争论,在很大程度上就是关于开发者是否在实践中坚守了HITL原则的讨论。

开源社区的应对策略

面对AI垃圾PR泛滥的趋势,开源社区正在探索多种应对策略。

一是明确贡献规范。 越来越多项目在 CONTRIBUTING 文档中要求贡献者声明是否使用了AI,并强调必须自行验证、对提交内容负责。CONTRIBUTING文件是开源项目中约定俗成的贡献指南文档,通常放置在项目根目录下,用于向潜在贡献者说明代码风格、提交流程、测试要求等规范。GitHub平台会自动识别该文件,并在新建issue或PR时向贡献者展示相关提示。随着AI工具的普及,这类文档正在经历一轮显著的更新浪潮。部分项目直接拒绝未经充分测试的AI生成PR,甚至有项目在贡献指南中声明"不接受AI生成的PR",尽管这一政策的可执行性存疑——目前并没有完全可靠的技术手段来检测一段代码是否由AI生成。

关于AI内容检测的技术挑战值得展开讨论。目前市面上存在多种AI内容检测工具(如GPTZero、Originality.ai等),它们主要基于统计分析方法,检测文本中的"困惑度"(perplexity)和"突发性"(burstiness)等指标——AI生成的文本通常困惑度较低且分布更均匀,而人类写作往往呈现更大的风格波动。但这些工具在代码领域的应用面临特殊困难。与自然语言不同,代码的表达空间更为受限——解决同一问题的"正确"写法可能就那么几种,尤其是在遵循特定编码规范的项目中,不同开发者编写的代码可能高度相似。这使得AI生成的代码与人工编写的代码在统计特征上更加难以区分。此外,随着AI编程助手的普及,越来越多的"人工编写"代码实际上也包含了AI辅助的成分——开发者可能在IDE中接受了Copilot的补全建议,或者参考了ChatGPT的实现方案后重新编写,使得二者之间的边界变得模糊。一些研究者正在探索基于代码提交模式(如提交时间分布、修改文件的关联性、commit message的语言特征等)的元数据分析方法,但这些方法仍处于早期研究阶段,远未达到生产可用的精度。另一个值得关注的方向是"AI水印"(AI watermarking)技术——部分AI模型厂商正在研究如何在生成内容中嵌入不可见的统计水印,以便后续检测,但这一技术目前仅处于实验阶段,且面临水印可被轻易去除的挑战。

与此同时,Linux内核社区在其开发者证书(Developer Certificate of Origin,简称DCO)框架下也在讨论AI生成代码的归属和责任问题。DCO是Linux内核开发流程中的一个法律机制,要求每个贡献者在commit中添加"Signed-off-by"行,声明其有权提交该代码并同意将其纳入开源许可证。当代码由AI生成时,一个棘手的法律问题随之出现:AI生成的代码能否受版权保护?谁对AI生成代码中可能存在的版权侵权(如从训练数据中复制了受版权保护的代码片段)承担法律责任?美国版权局在2023年已明确表示纯AI生成的内容不受版权保护,但人类与AI协作产生的内容可能部分受保护——这一模糊地带为开源项目的许可证合规增添了新的复杂性。这场规范演进的背后,反映的是开源治理框架在AI时代面临的深层适应性挑战。

二是提高贡献门槛。 例如要求PR附带清晰的问题描述、复现步骤和测试用例,让"糊弄"的成本上升,从而过滤掉低质量提交。一些项目还引入了PR模板(pull request template),要求提交者回答一系列结构化问题,如"这个PR解决了什么问题""你如何测试了这些更改""是否有破坏性变更"等。在GitHub中,PR模板通过在仓库的.github目录下创建PULL_REQUEST_TEMPLATE.md文件实现,创建PR时该模板会自动填充到描述栏中。一些项目更进一步,引入了多级审查流程:新贡献者的PR需要至少两名核心维护者批准才能合并,而且必须通过完整的CI/CD(持续集成/持续部署)流水线测试。这些机制虽然不能完全阻止AI垃圾PR,但显著提高了随意提交的摩擦成本。然而,这些防御措施也带来了一个两难困境:过高的贡献门槛可能会阻碍真正有诚意的新人贡献者——特别是来自非英语母语国家或初学编程的开发者,他们可能本就面临语言障碍和经验不足的挑战。如何在防范AI垃圾与保持社区包容性之间取得平衡,是许多项目维护者正在艰难权衡的问题。

三是重新审视激励机制。 招聘方与社区或许需要意识到,单纯的贡献数量已不再是可靠的能力信号。真正有价值的是贡献的深度、维护者的认可以及对项目的持续投入。一些前沿的招聘实践已经开始转向评估候选人PR中的代码审查对话、issue讨论中的技术分析深度,以及是否有来自项目核心维护者的正面评价,而非简单地计算贡献次数。更具体地说,一些有经验的招聘者开始关注以下质量信号:候选人是否有被合并的PR(而非仅仅是提交了PR)、PR的代码审查中是否展现了对反馈的理解和响应能力、候选人是否参与了issue的分类和讨论(triaging)、以及候选人的贡献是否跨越了较长的时间周期(表明持续参与而非一次性冲刺)。一些公司开始采用"付费开源贡献"模式面试——给候选人一个真实的开源项目bug,要求他们在限定时间内提交修复PR,并在代码审查中与面试官讨论设计决策,以此更真实地评估其工程能力。

结语:AI工具无罪,使用者需担责

这场关于"AI slop"的讨论,本质上是一场关于责任归属的讨论。AI降低了生产内容的门槛,但没有降低对内容负责的要求。当一个人把未经思考的AI输出丢给他人审核,他实际上是把成本转嫁给了整个社区。

开源的可持续发展,依赖于贡献者与维护者之间的相互尊重。在AI时代,这份尊重体现在一个朴素的原则上:如果你不愿意花时间理解和验证自己提交的内容,就不要指望别人替你承担这份工作。 让AI成为增强人类判断的工具,而非替人类逃避责任的借口,或许是整个技术社区都需要共同守护的底线。

#AI垃圾PR#开源项目维护#AI slop#开源贡献#GitHub刷简历#AI生成代码#开源维护者#低质量PR
分享:

相关推荐