AI 验证循环度量 AI 编码代理能否在没有人工协助的情况下搭建项目、运行项目并验证自己的修改。这是自主代理工作的关键所在——能够检验自身工作的代理,其成果会不断累积;做不到这一点的代理只是在生成看似合理的文本——因此它在 AI 就绪度徽章中承载最高的权重。
- 类别:AI 就绪度(类别内占 40%)
- 在总指数中的权重:1.6%
- 指标键名:
ai_verify_loop
数值如何计算
| 组成部分 | 权重 | 证据 |
|---|---|---|
| 一条命令的引导启动 | 18 | Makefile、Taskfile、justfile、mise 或 noxfile 得满分;自身即定义了该命令的工具链(Cargo.toml、go.mod、mix.exs、Maven、Gradle、.csproj)得其中大部分 |
| 自动化测试 | 22 | 代理可用于自检的测试套件(与工程实践共享) |
| Lint / 格式化配置 | 11 | 与工程类的 linter 信号共享 |
| 静态类型检查 | 11 | 静态类型语言,或类型检查配置(mypy、pyright、tsconfig、py.typed) |
| 可复现环境 | 10 | devcontainer、Dockerfile、Nix 或依赖锁定文件 |
| 已验证的代理实践 | 10 | 近期提交中由编码代理撰写或共同撰写的比例;达到 5% 及以上即得满分 |
| 自动化维护 | 8 | 样本中观察到的依赖更新机器人提交;仅有配置而未观察到任何提交者获部分分值 |
| OpenSSF Scorecard:Pinned-Dependencies | 10 | Scorecard 的 0–10 结果,换算为 10 分 |
Pinned-Dependencies 属于共享证据:它为代理验证循环补充供应链可复现性方面的信息,同时仍是安全类的完整组成部分。当 Scorecard 不可用或报告 n/a 时,该组成部分被排除。
证据,而不只是装备
这里的其他每个组成部分读取的都是仓库中的文件:存在任务运行器、存在锁定文件。它们各自都只是某个无人亲眼见其运行的循环的替代指标。
由编码代理撰写的提交——或在 Co-authored-by 尾注中归功于代理的提交——是唯一可得的记录,证明该循环确实闭合过。一项修改在有代理参与的循环中被提出、被验证、被合并,而项目自身的历史就是这么写的。
依赖机器人的 pull request 同样出自机器之手,且必须通过相同的关卡:测试运行、检查通过、完成合并。已经在消化这类流量的项目,等于展示了代理所需的那条通路——这正是自动化维护与代理实践并列计分、而非折入其中的原因:两者可以各自单独存在。
真正计入的是观察到的提交,而非配置文件。仓库里可以躺着一份 dependabot.yml,而集成早已关闭;Renovate 则常常完全在仓库之外配置:有两个广泛使用的项目,约三分之一的提交经由它产生,却根本没有任何可识别的配置文件。只有自行撰写内容的机器人才计入——一个只负责合并他人工作的机器人并没有在写修改。
同样这些提交在开发活跃度中是减分项,因为自动化挤占人类工作是一种警示信号。这是刻意为之。两个指标问的是不同的问题:人是否仍在维护这个项目,以及机器能否为它作出贡献。两个答案可以同时为真。
这佐证的是采用程度,而非自主程度。维护者与代理交互式协作留下的痕迹,和无人值守的运行完全相同,公开数据无法区分二者——因此该组成部分权重适中,且不对代理完成了多少工作作出任何断言。此外,检测只认得它已知的那些代理,所以使用了未被识别工具的项目,只会被读作没有证据——绝不会被读作不合格。
当未采集到提交样本时,该组成部分被排除,而不是按零计分。
为何工具链算作引导启动
cargo test 与 go test ./... 是各自语言中标准的验证循环。只认可任务运行器,等于因为默认设置更好而惩罚这些生态——运作良好的 Rust 项目会因为不附带 Makefile 而在此项得零分。package.json 与 pyproject.toml 则是刻意不予认可的:npm 与 Python 并未定义通用的测试命令,而某个具体项目是否定义了一条,藏在本指标并不读取的文件内容之中。
为何这个循环决定代理的有用程度
每个组成部分各自消除自主工作的一种失败模式:
- 引导启动——代理无需考古即可从克隆走到运行。
- 测试——代理能够证明一项修改达成了预期效果。
- Lint 与类型——整类错误在评审之前即被机械化地捕获。
- 可复现环境——“在代理的沙箱里能跑”意味着在别处也能跑。
值得注意的是,这与服务人类贡献者的基础设施完全相同——该指标不奖励任何超出严谨项目既有配置之外的代理专属花样。一个扎实的 工程质量项目通常在此处起点就很高。
如何解读结果
- 信号确认的是该循环的存在,而非其速度或覆盖率——这是整枚徽章基于存在性的诚实原则。
- 验证循环得分高而代理上下文只是占位文件,通常说明这是一个工程完善、只是尚未编写代理指引的项目——这是成本最低的改进项。
提升数值
- 添加一个提供
install、test与lint目标的 Makefile(或 justfile/Taskfile)。 - 维护一套可在本地用一条命令运行的自动化测试。
- 采用类型检查——即使是最简化的 mypy/tsconfig 配置也计入。
- 提交锁定文件、Dockerfile 或 devcontainer,以保障环境可复现。
- 在已经使用代理的地方,保留工具默认添加的
Co-authored-by尾注。删除它,等于抹去该循环在实践中确实闭合的唯一公开证据。