Slopper GitHub Action:抵御开源项目中的AI垃圾贡献
Slopper是一个GitHub Action,利用AI分析拉取请求,检测并标记由AI生成的低质量、无价值的贡献,帮助维护者识别伪装成合法代码的垃圾提交。支持多种AI提供商,可自定义配置,自动执行关闭或批准等操作。
开源项目正面临AI生成的"垃圾贡献"(slop)的冲击。这些大量产生的拉取请求看似合理,却引入细微的Bug、不必要的复杂度和零价值变更,甚至能通过CI测试并拥有精美的描述。为了应对这一挑战,开发者推出了Slopper——一款GitHub Action,旨在利用AI技术保护代码库的完整性。
Slopper的工作机制是对每一个拉取请求进行全方位分析,涵盖作者声誉、提交模式、代码质量和行为信号,从而揭示人类审阅者容易忽略的问题。它不会阻塞合并,而是通过标签和评论提供信息,最终决定权仍在维护者手中。
该工具支持五种AI提供商:OpenAI(默认使用gpt-4o)、Anthropic(claude-sonnet-4-6)、Vertex AI、Groq和Gemini,用户可根据已有API密钥灵活选择。此外,还可通过模型参数覆盖默认模型。
Slopper的检测模式源自真实事件,包括curl、Linux内核、Godot、Jazzband和Node.js等项目的维护者报告。质量信号涵盖假修复(修复不存在的Bug)、格式噪音(语法正确但逻辑错误)、样板膨胀(通用提交信息与差异不匹配)、不必要的重构(增加复杂度而无收益)、外观伪装(空白符和格式修改)以及重复功能等。作者信号则包括地毯式轰炸(在数天内向大量无关仓库提交PR)、信誉积累、新账户爆发、假日时间选择、无参与度和描述不匹配等。安全方面,Slopper监控混淆代码、动态执行、硬编码密钥、可疑URL、CI篡改和依赖劫持。
配置方面,用户可在仓库根目录创建.slopper文件(支持YAML或纯文本),设置白名单(vouched)、自动关闭/批准阈值、风险等级边界、忽略路径以及PR卫生规则(如要求描述或关联Issue)。当PR被打开时,Slopper先加载配置,检查作者是否在白名单中(若是则跳过分析),否则收集数据、调用AI提供商、计算标签、发布评论,并执行自动操作。
标签由分析结果确定性计算得出,包括风险等级(low/medium/high/critical)、批准、白名单、首次贡献者、CI修改、依赖修改、安全审查等。当AI分析失败时会应用slopper/analysis-failed标签。
维护者可通过在PR上评论/slopper vouch将信任的贡献者永久加入白名单,Slopper会验证评论者权限并更新.slopper文件。对于高信任度的作者,Slopper还会主动建议添加白名单。
PR评论包含风险分数、置信度、发现概要(可折叠区域)以及审查建议列表。评论在重新运行时更新,不会重复。
Slopper提供四个输出:risk-score(0-10)、risk-level、confidence和labels,可用于后续工作流步骤。该项目采用MIT许可证,使用TypeScript开发,可在GitHub Marketplace上获取。