LocalAI AI 辅助贡献规范:许可证合规、DCO 签认与 Assisted-by 溯源实践指南
【免费下载链接】LocalAILocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.项目地址: https://gitcode.com/GitHub_Trending/lo/LocalAI
LocalAI 是一个以 MIT 许可证开源的 AI 引擎,其社区协作同样向 AI 编程助手(Claude、Copilot、Cursor、Codex、Aider 等)开放,但这并不意味着 AI 可以替代人类完成法律与质量层面的全部责任。本文基于仓库中 docs/content/reference/ai-coding-assistants.md 参考文档及其背后的政策源文件 .agents/ai-coding-assistants.md,系统梳理在向 LocalAI 提交 AI 辅助贡献时必须遵守的许可证要求、Signed-off-by与 DCO(Developer Certificate of Origin)签认规则、Assisted-by溯源格式以及人类提交者的责任边界,帮助贡献者与 AI 工具正确、合规地参与到该项目的开发中。
政策出处:文档层级与"源文件"关系
AI 辅助贡献政策在仓库中有多个落点,它们构成一套相互引用的文档体系:
- 面向站点读者的参考页:docs/content/reference/ai-coding-assistants.md 是 Hugo 参考(reference)章节中的公开页面,带
disableToc、title、weight等 front matter,用于向访问文档站的开发者说明政策要点。 - 政策的"源文件"(source of truth):.agents/ai-coding-assistants.md 被 AGENTS.md 与 CONTRIBUTING.md 明确称为"full policy source of truth",是 Agent 与维护者实际遵循的权威文本。
- 仓库级入口文件:AGENTS.md 是给 AI 编程助手的统一入口(其符号链接形式为 CLAUDE.md),以"何时该读哪个文件"的表格索引全部专题指南;CONTRIBUTING.md 则是人类贡献者的开发流程手册,内含 "AI Coding Assistants" 摘要章节。
政策本身并非 LocalAI 原创,而是对齐 Linux 内核项目的 AI 辅助贡献指南(内核文档站docs.kernel.org上的 coding-assistants 政策),并针对 LocalAI 的 MIT 许可证与仓库目录布局做了适配。若对某个条款意图理解有歧义,内核文档是判断意图的权威参考。
除政策文件本身外,AI 工具参与开发还应遵循标准流程,参考以下配套文档:
| 文档 | 作用 |
|---|---|
| CONTRIBUTING.md | 开发工作流、分支命名、conventional commits 提交规范与 PR 指南 |
| .agents/coding-style.md | 代码风格、editorconfig、日志与文档约定 |
| .agents/building-and-testing.md | 构建与测试流程(含各平台 Docker 构建) |
许可证与法律要求:MIT 兼容是第一道门槛
LocalAI 采用MIT License,许可证全文见仓库根目录的 LICENSE,版权人为 Ettore Di Giacinto(mudler@localai.io)。AI 辅助贡献首先必须在许可证层面合规:
- 新源文件应使用 SPDX 许可证标识
MIT(视文件类型而定)。这一要求在仓库中已有落实——例如 backend/cpp/llama-cpp/passthrough_options.h、backend/cpp/ds4/request_lifecycle.h 等较新的 C/C++ 后端文件顶部都携带了SPDX-License-Identifier行,Python 后端的构建脚本(如backend/python/longcat-video/Makefile)同样如此。 - 贡献必须与 MIT 兼容,不得引入 GPL 等不兼容许可证的代码,除非与维护者显式沟通并达成一致。
换句话说,即使代码是 AI 生成的,它进入仓库后依然按 MIT 授权对外发布,因此"这段代码的许可证是什么、是否允许并入 MIT 项目"必须由提交者事先确认,而非交给模型自行判断。
Signed-off-by 与 DCO:AI 绝对不能代替人类签认
**开发者来源证书(DCO)**的签认具有法律含义:它声明签名者有权贡献该代码、理解其许可证,并对其负责。LocalAI 政策对此给出了一条不可逾越的红线:
AI Agent 不得添加
Signed-off-by标记。只有人类才能合法地对 DCO 做出认证。
人类提交者因此必须承担以下全部责任:
- 审阅所有 AI 生成的代码;
- 确保符合许可证要求;
- 在项目要求 DCO 时,添加自己的
Signed-off-by标记以认证该贡献; - 为贡献承担全部责任。
同时,AI Agent 也不得为自己添加Co-Authored-By(共同作者)尾注。一份贡献只能由人类评审者拥有;AI 的参与通过Assisted-by尾注记录(见下文),而不是把自己写成"共同作者"。
例外:维护者亲自运行的自动化
上述规则覆盖的是最常见场景——AI 助手帮助一位人类贡献者,随后由人类签认。但它不适用于另一种情形:维护者自己运行的自动化机器人直接打开 PR,没有人类提交者可以签名。如果机械地执行"AI 不得签名",这类 PR 将永远无人签认,DCO 检查会将其永久卡死。
因此政策规定:维护者运营的机器人必须添加Signed-off-by,且署名必须指向"操作它的那位维护者本人",而不是机器人、也不是模型。例如:
Assisted-by: Codex:gpt-5 Signed-off-by: Ettore Di Giacinto <mudler@localai.io>这并非 AI 在认证 DCO——签名的是维护者,正如他们手工敲入一个提交时那样:维护者配置了自动化、拥有其产出、并在合并时为其负责。Assisted-by尾注依然如实记录了"模型产出了这段代码",溯源链没有被破坏。
这一例外非常狭窄,不会为任何其他人放宽规则:
- 仅适用于 LocalAI 维护者运营、且其产出在合并前由该维护者评审的自动化;
- 签认者必须是接受 DCO 责任的真实个人;
- 帮助外部贡献者的 AI 助手依然不得签认,签认尾注由该贡献者自己添加;
- 机器人不得代表除其操作者以外的任何人签认,也不得为它推送分支的那个贡献者添加尾注;若自动化向他人分支贡献代码,则把签认留给该贡献者完成。
溯源机制:Assisted-by 提交尾注格式
当 AI 工具参与 LocalAI 开发时,规范化的溯源有助于跟踪 AI 在开发过程中不断演化的角色。贡献应在提交信息的尾注区(trailer)包含Assisted-by标记,格式如下:
Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]各字段含义:
| 字段 | 含义 | 示例 |
|---|---|---|
AGENT_NAME | AI 工具或框架的名称 | Claude、Copilot、Cursor、Codex |
MODEL_VERSION | 使用的具体模型版本 | claude-opus-4-7、gpt-5 |
[TOOL1] [TOOL2] | Agent 调用的专项分析工具(可选) | golangci-lint、staticcheck、go vet |
注意,基础开发工具不应被列出——git、go、make、编辑器这类人人都用的常规工具不算"分析工具",无需在尾注中声明。
值得说明的是,本仓库确实维护着可供这类专项工具消费的静态检查配置:.golangci.yml 定义了以"与 master 的 diff 为新代码基线"的 lint 策略(
new-from-merge-base: origin/master),并启用了forbidigo等规则约束代码风格(例如禁止测试中使用t.Errorf/t.Fatal,要求改用 Ginkgo/Gomega 的Expect(...).To(...))。这意味着 AI 声称跑过golangci-lint是可被复核、有价值的,也正因如此,政策只认可"专项分析工具"进入Assisted-by。
完整示例
政策给出了一段完整的提交信息示例,同时演示了 conventional commits 风格、范围(scope)与清晰 body 的组合:
fix(llama-cpp): handle empty tool call arguments Previously the parser panicked when the model returned a tool call with an empty arguments object. Fall back to an empty JSON object in that case so downstream consumers receive a valid payload. Assisted-by: Claude:claude-opus-4-7 golangci-lint Signed-off-by: Jane Developer <jane@example.com>示例中值得注意的要点:
- 标题
fix(llama-cpp): ...使用 conventional commits 的类型(范围)格式,scope 精确到后端模块,符合 CONTRIBUTING.md 中"短小、祈使句、72 字符内、用 body 解释 why"的提交规范; - body 交代了修复动机(此前解析器在模型返回空 arguments 对象时会 panic)与修复策略(回退到空 JSON 对象以保证下游收到合法 payload);
- trailer 区严格分层:
Assisted-by记录 AI 工具与模型(Claude:claude-opus-4-7)及专项工具(golangci-lint),随后是人类的Signed-off-by。
责任边界:审阅、验证与"幻觉防护"
使用 AI 助手不会降低贡献者的责任。人类提交者必须:
- 理解进入 PR 的每一行代码;
- 验证生成的代码能编译、通过测试并符合项目风格(LocalAI 的构建/测试入口与具体过程见 .agents/building-and-testing.md);
- 确认代码引用的任何 API、flag 或文件路径在当前代码树中真实存在——政策明确指出,AI 模型可能幻觉出并不存在的标识符。这一点在 LocalAI 这样功能面庞杂的仓库(多后端、多能力注册表、REST 与 MCP 双暴露面)中尤其关键,AGENTS.md 为此专门强调:新端点必须同步出现在 swagger
@Tags、/api/instructions注册表、auth 的RouteFeatureRegistry、React UI 的capabilities.js与文档等每一处能力面中,漏掉任何一处都会让客户端与 UI 感知不到该功能; - 不得未经审阅就逐字提交 AI 输出。
此外,评审者可以对任何变更要求澄清,无论其是如何产生的。面对设计问题,"这是 AI 写的"不是一个可接受的答复——AI 参与不构成降低评审标准、免除解释义务的理由。
落地检查清单
综合政策文档与仓库配套文件,可以总结出人类贡献者与 AI 工具各自的行事清单:
对 AI 工具(Agent / Bot):
- 不要添加
Signed-off-by或Co-Authored-By(为自己署名); - 用
Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]记录参与,不列出 git/go/make 等基础工具; - 遵守 AGENTS.md 及其索引的专题指南(构建、测试、代码风格等);
- 不引入 MIT 不兼容的代码;新源文件按需添加 SPDX 标识
MIT。
对人类贡献者:
- 逐行审阅并理解 AI 生成的代码,验证编译、测试与风格合规;
- 核实引用的 API、flag、文件路径真实存在,警惕模型幻觉;
- 亲自添加
Signed-off-by认证 DCO,承担全部责任; - 使用 conventional commits 风格提交(如
fix(llama-cpp): ...),并在 trailer 区先Assisted-by后Signed-off-by。
对维护者运营的自动化(唯一例外):
- 以操作者的真实身份添加
Signed-off-by,并保留Assisted-by溯源; - 不代其他贡献者签名,不为其推送的分支添加尾注。
政策本身是一份"活文档"(living document)。如果你不确定某个具体贡献应如何适用以上规则,建议在提交前先打开 issue 或与维护者沟通确认——这也正是该参考页以提示框形式给出的官方建议。对本仓库而言,最权威的落点始终是 .agents/ai-coding-assistants.md,配套流程详见 CONTRIBUTING.md 与 AGENTS.md。
【免费下载链接】LocalAILocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.项目地址: https://gitcode.com/GitHub_Trending/lo/LocalAI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考