← 返回实验室

30 个开源项目对 AI 辅助的贡献有哪些要求

coding-agentsopen-sourceai-policy

9月27日到10月2日之间,我向十二个开源项目提交了修复、bug 报告和评论。很多工作是编程智能体做的:Claude Code 复现了 bug,写了补丁和测试,大部分文字也是它起草的。每个 issue 都是我挑的,每段文字我都读过;在我批准之前,没有任何内容从我的账号发出。

在这个过程中,这些项目不断告诉我,它们希望这类工作怎么做。spec-kit 要求在每一条 AI 生成的评论里写明所用的智能体、模型及其设置,以及 AI 协助的程度。MLX 的 PR 模板开头是一行已经勾选的声明:“我已了解,严禁使用 AI 撰写 PR 描述”。所以在10月2日,我读了 30 个仓库的贡献规则:既有我做过贡献的那些,也有另外 21 个没做过的。

简单地说:30 个仓库中有 19 个定了关于 AI 的规则,这 19 条规则中有 14 条出现在2026年。大多数规则让提交的人为改动负责。十五个要求你说明用了 AI,十个要求由人而不是模型来写描述、评论或提交信息。编程智能体默认添加的提交尾注(trailer),有些项目要求加,另一些则禁止。

我读了什么

样本不是随机抽取的。30 个里有九个是我那一周做过贡献的项目:MLX、spec-kit、huggingface_hub、codebase-memory-mcp、Deskflow、agent-framework、awslabs/mcp、kaggle-cli 和 avoid-ai-writing。其余 21 个是 AI 工具、开发者工具和基础设施方面的项目,其中有 Docling、garak、TypeScript、Rust、Node.js 和 Kubernetes。我做过贡献的另外三个项目,copilot-cli、PartCrafter 和 ltx-2-mlx,不在这 30 个之中,我在它们当中也都没有找到 AI 规则。

在每个仓库里,我读的是2026年10月2日默认分支上的 CONTRIBUTING、PR 和 issue 模板、AGENTS.md 和 CLAUDE.md、行为准则,以及这些文件链接到的指南和 wiki 页面。下面的每条引文都链接到我所读的那个提交中的对应行,所以即使文件以后有改动,链接显示的仍是它当天的内容。这些引文都已译成中文,每个链接打开的都是英文原文中的那一行。为了确定一条规则出现的时间,我在它所在文件的历史里查找最早包含它的提交。

哪些项目有规则

30 个中有 19 个对贡献中使用 AI 有规定:MLX、spec-kit、TypeScript、huggingface_hub、transformers、trl、peft、LangChain、Strands Agents、MLflow、garak、codebase-memory-mcp、Deskflow、workers-sdk、pydantic-ai、Rust、CPython、Node.js 和 Kubernetes。

有九个项目我没找到这样的规则:accelerate、awslabs/mcp、kaggle-cli、Docling、BeeAI、ADK for Python、NeMo Agent Toolkit、VS Code 和 React。另有两个我没有计入。agent-framework 只是提醒说,AI 让贡献的数量增加了,所以审查要花更长时间;avoid-ai-writing 检查的是文字的风格,而不是文字是怎么写出来的。

一条规则通常会同时提出好几项要求:

这 19 条规则要求什么,按仓库数计:说明用了 AI,15 个;提交者对改动负责并且必须理解改动,12 个;描述、评论或提交信息由人来写,10 个;有关于提交尾注的规定,9 个;不接受批量或自动化的 PR,7 个;提 PR 之前要先有 issue 或维护者的同意,6 个

第二根柱子是我的解读:19 个中有 12 个以某种形式表示,提交者要对改动负责,并且必须理解它。huggingface_hub 用两句话说清了这一点:“用 AI 帮忙写代码没问题。提交你自己都解释不了的 AI 生成的垃圾内容就不行。”CPython 希望作者“能够用自己的话解释他们提出的改动”,Strands Agents 则告诉贡献者:“PR 的作者是你,而不是你的智能体。”

规则是什么时候出现的

最早的是 CPython:2024年10月,它在开发者指南里加了简短的一页。2025年又有四个跟进:spec-kit、LangChain、Kubernetes 和 MLflow。其余 14 个出现在2026年,其中七个是6月以后才有的。codebase-memory-mcp 的规则是在我读到它之前十一天才加上的。

19 个有 AI 贡献规则的仓库各自最早加入规则的时间,按半年分组:2024年7月至12月,CPython;2025年1月至6月,没有;2025年7月至12月,spec-kit、LangChain、Kubernetes 和 MLflow;2026年1月至6月,Deskflow、transformers、trl、TypeScript、pydantic-ai、garak、huggingface_hub、peft 和 Strands Agents;2026年7月至9月,workers-sdk、Rust、Node.js、MLX 和 codebase-memory-mcp

这些文件仍在变化。19 个项目中有 16 个,存放规则的某个文件在9月或10月的头两天被改过,不过并不是每一次修改都涉及 AI 相关的文字。

说出来

声明是最常见的规则,而各项目对要声明到什么程度看法不一。对 Kubernetes 来说,一句话就够了:它的指南说,在描述里写上“本 PR 的部分内容是在生成式 AI 的协助下写成的”,“就足够了”。没有这条声明,TypeScript 会直接关闭 PR:“如果你的 PR 看起来是 AI 写的,而你没有附上这条声明,你的 PR 将不经审查直接被关闭。”spec-kit 要求写明智能体、模型、设置和协助程度:在 PR 里写一次,在每条 AI 生成的评论里再写一次,智能体写的每个提交还要加上 Assisted-by: 尾注。

有两个项目用一行字点明了利害。codebase-memory-mcp:“声明绝不会让一份贡献吃亏。事后才被发现,才会。”Deskflow:“在贡献中对 AI 的使用不诚实,会导致被项目封禁。”

CPython 要求得比其他项目都少:“欢迎在 PR 描述中说明使用了 AI 工具,但这不是必需的。”

文字由人来写

有十个项目允许模型帮忙写代码,但要求文字由人来写。Rust 最严格:“禁止 LLM 生成的 PR 描述。禁止 LLM 生成的 GitHub 评论。”提交也一样:“提交信息必须由你本人撰写,而不是你的 LLM。”

Kubernetes 和 Node.js 把界线划在了审查这一步。Kubernetes:“回复审查意见时,你必须做到不依赖 AI 工具。”Node.js:对反馈的回复“不得由 AI 工具自动完成”。

另一些项目把这一点写进了模板。MLX 有上面引用的那一行,还有 issue 模板里对应的一行。Strands Agents 在 PR 模板里设了一个“Human Overview”(人工概述)部分,这部分“AI 智能体不得填写”。LangChain 的模板警告说:“如果你在这里粘贴一大段明显由 AI 生成的描述,你的 PR 可能会被忽略或关闭!”

三个 PR 模板里的原句。ml-explore/mlx,.github/pull_request_template.md,第 1 行和第 2 行:“☑️ 我已了解,严禁使用 AI 撰写 PR 描述”和“AI 使用声明:”。strands-agents/harness-sdk,.github/PULL_REQUEST_TEMPLATE.md,第 1 至 3 行:“## Human Overview”(人工概述),然后是一段注释:“如果这个 PR 是 AI 智能体起草的,必须由人在这里用自己的话写一段简短的概述。AI 智能体不得填写这一部分。参见 team/AI_USAGE_POLICY.md。(50 个词)”。langchain-ai/langchain,.github/PULL_REQUEST_TEMPLATE.md,第 11 行:“如果你在这里粘贴一大段明显由 AI 生成的描述,你的 PR 可能会被忽略或关闭!”

不要批量,先征得同意

有七个项目禁止批量或自动化的提交。TypeScript 描述了它拒绝的那种工作流程:“操作者把自主智能体对准 GitHub,让它针对许多互不相关的 issue 生成补丁,再把产出作为 PR 转发给我们,这样的工作流程”。LangChain 的指南给出了一个适用于任何贡献的检验标准:“如果创建一个 PR 所需的工夫少于维护者审查它所需的工夫,这份贡献就不应该提交。”

有六个项目要求在提 PR 之前先获得同意。在 peft,这指的是维护者发一条包含 @peft-triage approved 的评论。在 Rust,LLM 生成的改动必须事先约定,也就是“已有审查者提前表示愿意审查 LLM 生成的 PR”。

有三个项目把使用智能体的新人拒之门外。transformers 要求“首次贡献者不要使用代码智能体创建 issue 或 PR”,trl 则“不会审查首次贡献者提交的完全由 AI 生成的 PR”。Node.js 要求新贡献者“避免使用 AI 智能体与项目互动”,并且禁止用 AI 修复带有“good first issue”标签的 issue,因为这类 issue “是为了帮助新的人类贡献者,而不是 AI,熟悉代码库”。

Rust 还给这类工作的占比设了上限:“如果在 6 周的时间窗口内合并的 PR 中有一半以上是 LLM 生成的,我们就不再合并新的 LLM 生成的 PR,直到比例回落到 50% 以下,冷却期至少 10 天。”

意见相左的尾注

编程智能体常常给自己的工作署名。比如 Claude Code,除非被告知不要这样做,它会给每个提交加上一条 Co-Authored-By: Claude … 尾注,并在 PR 里加一行“Generated with Claude Code”。有九个项目对这类尾注有规定,而这些规定的方向正好相反:

30 个仓库中有 9 个对 AI 共同作者尾注作了规定。要求:MLflow,Claude Code 的改动要加 Co-Authored-By: Claude;garak,用 Co-authored-by 写明所用的 AI 工具;spec-kit,用 Assisted-by 写明智能体和模型,并保留工具自动添加的尾注;Node.js,用 Assisted-by 写明智能体名称。禁止:Kubernetes,AI 共同作者、assisted-by 及类似尾注;Rust,Co-Authored-By 尾注;pydantic-ai,把 Claude 列为共同作者;Deskflow,为 LLM 加共同作者标签;Node.js,智能体以自己名义加的 Co-authored-by 或 Signed-off-by。允许:codebase-memory-mcp

来源:MLflow、garak、spec-kit、Node.js、Kubernetes、Rust、pydantic-ai、Deskflow 和 codebase-memory-mcp。

Kubernetes:“不允许把 AI 工具列为共同作者、用 AI 工具共同签署提交,或者使用 assisted-by、co-developed 或类似的提交尾注。”pydantic-ai 把这一条写进了 Claude Code 在会话开始时加载的文件:“永远不要把你自己(Claude)添加为提交的共同作者。”Rust 的指南把这两行默认文字都列入了声明的反面示例:🤖 Generated with Claude Code 和 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>。

所以,同一条默认尾注,在 MLflow 是要求,在 Kubernetes、Rust 和 pydantic-ai 却是违规。没有哪种设置在所有地方都对。智能体在一个仓库里第一次提交之前,必须先读这个仓库的规则,运行它的人也一样。

写给智能体的规则

其中一些规则是直接对智能体说的,写在 AGENTS.md 或 CLAUDE.md 里,也就是编程智能体在一个仓库里开始工作时会读的文件。它们告诉智能体:

只有智能体读了这个文件并照着做,这些规则才起作用。

我的那些贡献后来怎样了

十二个项目中有五个有 AI 规则:MLX、spec-kit、huggingface_hub、codebase-memory-mcp 和 Deskflow。我在 huggingface_hub 只提了一个 issue,而它的规则针对的是 PR。在 MLX,我按它的规则亲手写了 PR 描述和提交信息,描述里写明了智能体做了什么。我在 spec-kit 的评论带有 spec-kit 要求的完整声明;在 codebase-memory-mcp,issue、PR 和每条评论都带有它要求的那一行声明。我在 codebase-memory-mcp 的两条回复是9月28日发出的,没有带那一行,那时这个项目加入规则已经一周了;10月1日我补上了。Deskflow 要求在 PR 里声明。我在那里的评论是智能体起草的,发出时没有声明;10月3日我补上了那一行。

两条关闭评论都没有提到 AI。agent-framework 关闭我的 PR,是因为一个更早的、仍未关闭的 PR 已经有同样的修复;如果我在写之前先搜一下,本来能发现它。MLX 的维护者评判的是修复思路本身。

我改了哪些做法

局限

这只是一个账号在六天里的经历。这 30 个仓库是我挑的,偏向 AI 工具类项目,而这类项目更可能有这种规则。规则的类别是我自己贴的标签,一条规则常常同时属于好几类。所有文件都是在2026年10月2日读的,而 19 个中有 16 个的规则文件在此前一个月里改过,所以这里的部分内容很快就会过时。固定到提交的链接显示的是每个文件当天的内容。

全部 106 条引文、各项计数,以及一个逐条核对引文与原文件的脚本,都在 nefayran/oss-ai-rules 里。

这篇笔记是借助 Claude Code(Claude Opus 5.5)起草的,它还收集了这些规则文件,并对照这些文件核对了每一条引文。