AI 政策¶
[!WARNING] 我们正在试行一项略微放宽的 AI 政策,以允许高质量贡献者负责任地使用 AI。 本政策随时可能更改,请经常回来查看。
一旦我们最终确定修订后的政策,该横幅将被移除。
TL;DR¶
欢迎 AI 辅助的贡献,前提是您对它们负责。
- 您必须在拉取请求描述和提交信息中披露任何 AI 或 LLM 的使用情况。
- 您必须能够解释、辩护和修改您提交的每一行代码。
- 提交信息、PR 描述、议题和评论必须由您本人撰写。逐字照搬的 AI 输出是不可接受的。
- 未披露的 AI 使用将导致您的贡献被拒绝。
- 低质量的贡献,无论是否披露,都将被返工或拒绝。
- 滥发自动化 PR、评论或议题被视为对我们审阅者的拒绝服务(DoS)攻击;请参阅人力拒绝服务。
定义¶
基于 AI 或 LLM 的工具是指任何通过机器学习模型生成代码、文本或其他内容的软件。这包括但不限于:聊天助手、智能体编码工具/框架、您已接受并纳入代码的内联代码补全建议,以及 AI 驱动的解释/重构功能。
就本政策而言,基本的确定性/静态开发工具(如 clang-tidy、git、编译器等)不被视为 AI 工具。
诸如“实质性”、“大规模”、“多数”和“低质量”等术语被有意保留为模糊表述,将由维护者自行裁量解释。如有疑问,请先询问。
适用范围¶
本政策适用于所有代码贡献,以及围绕此代码库的议题和拉取请求。这包括:
- 提交信息
- PR 描述
- 代码审查评论
- 议题/PR 评论
- 通过电子邮件提交的补丁
与代码无直接关系的领域——例如我们的周边社区——不受本政策条款的约束。此外,通过 AI 或基于 LLM 的工具进行的拼写/语法检查也不在本文件的覆盖范围内。
引言¶
在合适的人手中,AI 和基于 LLM 的工具对于尽快交付功能和错误修复非常有用。与此同时,审阅者的带宽是一种稀缺资源。因此,我们对 AI 辅助的贡献持开放态度,前提是这些贡献被恰当地制作和披露。
本文件的目标并非设置任意限制,而是保持我们开发的健康与稳定,同时仍然允许贡献者使用他们认为有帮助的工具。一份贡献对项目的价值必须超过审阅它所花费的时间。
在整份文件中,必须和不得是不可变通的约束性要求。拒绝遵守将被视为违反本文件所概述的条款。
要求¶
这些要求适用于所有贡献,无论是否由 AI 辅助。AI 辅助的贡献还承担披露中概述的额外披露要求。
- 披露。任何贡献中对 AI 或基于 LLM 的工具的任何及所有使用,必须被明确标记并酌情披露。
- 责任。任何贡献的人类提交者对其提交内容的准确性、完整性和意图负有全部责任。您必须能够在审查期间解释、辩护和修改您的代码。
- 审查。所有代码必须在开启 PR 或将其标记为可供审查之前由作者彻底审查。
- 测试。所有代码更改必须由人类作者直接测试。
- 质量。所有提交的代码都要达到严格的卓越标准。低质量的 AI 生成内容不符合这一标准。
- 许可。所有代码必须兼容 GPLv3 或更高版本。您必须保证您有权依照那些条款提交它,并且它并非从不兼容许可证下发布的作品中复制而来。
签署、署名与版权¶
AI 代理不得添加 Signed-off-by: 标签。人类提交者必须签署所有更改。
同样,AI 代理不能拥有代码的署名权或版权,不得添加 Co-authored-by: 或 Co-developed-by: 标签。人类提交者必须编写所有更改。
允许的用途¶
以下是在适当披露的前提下,允许使用 AI 和基于 LLM 的工具的非详尽清单。
- 起草议题和拉取请求,前提是最终文本和提交的代码实质上属于您自己。
- 调试问题、错误、故障和崩溃,无论是预先存在的还是由您自己的更改引入的。
- 在提交 PR 之前审查您自己的更改。
- 研究、头脑风暴以及代码库搜索/理解。
- 应用繁琐但不特别大的更改,例如将特定类大规模迁移到 polyfill 或抽象。
建议事先讨论¶
某些使用场景既不一定被禁止,也不一定被允许。这些应在提交之前通过议题或电子邮件与维护者讨论。维护者和审阅者也可能在审查/提交阶段对此发表评论。
- 为新代码生成样板/脚手架。
- 编写单元测试。
- 主要由 AI 代理驱动的大规模重构。
- 任何由 AI 代理或模型负责大部分实现的贡献。
禁止使用¶
以下是非详尽的清单,列出了严格禁止的 AI 和基于 LLM 的工具使用方式。
- Vibecoding,或完全由 AI 代理编写、缺乏人工介入或理解的更改。
- 如果你不愿意付出必要努力去理解你提交的每一行代码,我们也不会。
- 完全由 AI 生成的提交信息、PR 描述、issue 或评论。参见附录:AI 提交信息。
- 未按照披露要求声明 AI 辅助的工作。
- 未能达到我们代码卓越标准的低质量提交。
- 将机密、凭据、私人用户数据或未公开的安全报告提交给第三方 AI 服务。
- 这包括主机密钥、加密材料和私有的漏洞披露。
- 逐字逐句的 AI 代码审查(例如 Codex/Copilot 审查)。
人工努力拒绝服务¶
使用自动化工具和 AI 提交需要我们小心审查和处理的 PR、issue 和评论,被视为对我们人工努力的拒绝服务攻击。
你只需付出很少的努力(一条 LLM 提示词)就能让我们付出大量努力(细致而彻底的代码审查)。请尊重我们的时间,不要这样做。
披露¶
如何披露 AI 使用情况由你决定。但是,它必须明确、易于识别,并且同时放在提交信息和相关的 PR 描述中。对于通过电子邮件提交的补丁,封面信函视为 PR 描述。我们建议使用 Assisted-by: 页脚:
例如:
没有提交信息的贡献(例如 issue/评论)应在正文中使用一句平实的话,例如 I used <model> to help with <X>。PR 和提交信息也可以选择使用这种格式。
多提交系列/压缩提交必须保留此尾部标记。维护者会在合并到 master 时处理这一点,但你有责任确保披露信息在你的分支内的压缩提交中保留到最终的提交/PR 正文中。
无论如何,重要的是审查者能够一目了然地看出 AI 在你的贡献中参与的位置和方式。
代码库摄取¶
目前暂时允许 LLM 出于任何目的(例如训练或提示上下文)摄取此代码库。随着围绕 AI 和代码版权的诉讼和法院裁决的推进,这一政策随时可能改变。
AI 模型可能摄取了 AGPLv3 或其他与 copyleft 不兼容的代码,并可能重新生成这些代码。你仍需负责确保你提交的所有代码兼容 GPLv3 或更高版本。
执行¶
- 如果我们怀疑贡献中存在未经披露的 AI 使用,我们会要求披露。
- 拒绝披露将导致贡献被拒绝,你的 PR 或 issue 将被关闭。如果更改值得保留,维护者可能会选择自行重做。
- 用重复的自动化 PR 或评论向我们发送垃圾信息的账号将被阻止或永久暂停使用我们的 Git 实例。
- 维护者保留在你不遵循本文档所述准则和程序,并且拒绝或未能按要求做出更改时,关闭你的 issue 和 pull request 的权利。
- 屡次不遵守规定可能导致失去贡献权限。
附录:AI 提交信息¶
拉取请求 #3422 的补丁集被输入到一个专用代码 AI 模型中,生成了以下内容:
profile_manager: Refactor user deletion to use index instead of UUID
This commit improves the user profile deletion flow in the following ways:
1. **UI layer (ConfigureProfileManager)**:
- Replaces UUID-based deletion with index-based deletion
- Passes the selected row index from the tree view to the confirmation dialog
- Emits deleteUser(int index) signal from ConfigureProfileManagerDeleteDialog
- Removes lambda capture and std::function callback in favor of direct signal/slot connection
2. **Delete dialog**:
- Changes SetInfo() signature to accept index instead of accept callback
- Stores index internally and emits it via deleteUser signal on acceptance
3. **Core ProfileManager**:
- Refactors RemoveUser(UUID) → RemoveProfileAtIndex(index)
- Removes duplicated stable_partition + save logic from RemoveUser()
- Centralizes profile removal and save-file writing in RemoveProfileAtIndex()
4. **Minor follow-up**:
- Adds profile_manager.ResetUserSaveFile() call in PopulateUserList() to ensure consistent state when refreshing the user list
These changes eliminate redundant code, reduce the risk of UUID → index mismatch bugs, and make the deletion path more straightforward and maintainable.
Fixes: potential inconsistency when user order changes between UI and backend
这段内容:
- 冗长且不必要(大多数细节没人关心)
- 没有说明 PR 的实际目的(修复配置管理器中的双重删除 bug)
- 使用了 Unicode 箭头(这对命令行编辑器不友好)
- 使用企业化和空话式的语言,把信息填充起来,让它看起来像改了很多东西
好的提交信息应当简洁、具有描述性,并传达更改背后的意图,例如修复的 bug 或添加的功能。它不应是每个字节变更的详细变更日志。
参考¶
本政策文件改编自众多其他自由和开源项目(无论是限制性还是宽松性)的 AI 政策。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 eg/Eglantine