AI 就绪度指标

AI 验证循环

inspect.software 如何度量代理验证循环——一条命令的引导启动、测试、lint、类型检查与可复现环境。AI 就绪度中权重最高的指标。

方法论 v2.10.0更新于 2026-07-21

AI 验证循环度量 AI 编码代理能否在没有人工协助的情况下搭建项目、运行项目并验证自己的修改。这是自主代理工作的关键所在——能够检验自身工作的代理,其成果会不断累积;做不到这一点的代理只是在生成看似合理的文本——因此它在 AI 就绪度徽章中承载最高的权重。

  • 类别:AI 就绪度(类别内占 40%)
  • 在总指数中的权重:1.6%
  • 指标键名:ai_verify_loop

数值如何计算

组成部分权重证据
一条命令的引导启动18Makefile、Taskfile、justfile、mise 或 noxfile 得满分;自身即定义了该命令的工具链(Cargo.tomlgo.modmix.exs、Maven、Gradle、.csproj)得其中大部分
自动化测试22代理可用于自检的测试套件(与工程实践共享)
Lint / 格式化配置11与工程类的 linter 信号共享
静态类型检查11静态类型语言,或类型检查配置(mypy、pyright、tsconfig、py.typed
可复现环境10devcontainer、Dockerfile、Nix 或依赖锁定文件
已验证的代理实践10近期提交中由编码代理撰写或共同撰写的比例;达到 5% 及以上即得满分
自动化维护8样本中观察到的依赖更新机器人提交;仅有配置而未观察到任何提交者获部分分值
OpenSSF Scorecard:Pinned-Dependencies10Scorecard 的 0–10 结果,换算为 10 分

Pinned-Dependencies 属于共享证据:它为代理验证循环补充供应链可复现性方面的信息,同时仍是安全类的完整组成部分。当 Scorecard 不可用或报告 n/a 时,该组成部分被排除。

证据,而不只是装备

这里的其他每个组成部分读取的都是仓库中的文件:存在任务运行器、存在锁定文件。它们各自都只是某个无人亲眼见其运行的循环的替代指标。

由编码代理撰写的提交——或在 Co-authored-by 尾注中归功于代理的提交——是唯一可得的记录,证明该循环确实闭合过。一项修改在有代理参与的循环中被提出、被验证、被合并,而项目自身的历史就是这么写的。

依赖机器人的 pull request 同样出自机器之手,且必须通过相同的关卡:测试运行、检查通过、完成合并。已经在消化这类流量的项目,等于展示了代理所需的那条通路——这正是自动化维护与代理实践并列计分、而非折入其中的原因:两者可以各自单独存在。

真正计入的是观察到的提交,而非配置文件。仓库里可以躺着一份 dependabot.yml,而集成早已关闭;Renovate 则常常完全在仓库之外配置:有两个广泛使用的项目,约三分之一的提交经由它产生,却根本没有任何可识别的配置文件。只有自行撰写内容的机器人才计入——一个只负责合并他人工作的机器人并没有在写修改。

同样这些提交在开发活跃度中是减分项,因为自动化挤占人类工作是一种警示信号。这是刻意为之。两个指标问的是不同的问题:人是否仍在维护这个项目,以及机器能否为它作出贡献。两个答案可以同时为真。

这佐证的是采用程度,而非自主程度。维护者与代理交互式协作留下的痕迹,和无人值守的运行完全相同,公开数据无法区分二者——因此该组成部分权重适中,且不对代理完成了多少工作作出任何断言。此外,检测只认得它已知的那些代理,所以使用了未被识别工具的项目,只会被读作没有证据——绝不会被读作不合格。

当未采集到提交样本时,该组成部分被排除,而不是按零计分。

为何工具链算作引导启动

cargo testgo test ./... 是各自语言中标准的验证循环。只认可任务运行器,等于因为默认设置更好而惩罚这些生态——运作良好的 Rust 项目会因为不附带 Makefile 而在此项得零分。package.jsonpyproject.toml 则是刻意不予认可的:npm 与 Python 并未定义通用的测试命令,而某个具体项目是否定义了一条,藏在本指标并不读取的文件内容之中。

为何这个循环决定代理的有用程度

每个组成部分各自消除自主工作的一种失败模式:

  • 引导启动——代理无需考古即可从克隆走到运行。
  • 测试——代理能够证明一项修改达成了预期效果。
  • Lint 与类型——整类错误在评审之前即被机械化地捕获。
  • 可复现环境——“在代理的沙箱里能跑”意味着在别处也能跑。

值得注意的是,这与服务人类贡献者的基础设施完全相同——该指标不奖励任何超出严谨项目既有配置之外的代理专属花样。一个扎实的 工程质量项目通常在此处起点就很高。

如何解读结果

  • 信号确认的是该循环的存在,而非其速度或覆盖率——这是整枚徽章基于存在性的诚实原则。
  • 验证循环得分高而代理上下文只是占位文件,通常说明这是一个工程完善、只是尚未编写代理指引的项目——这是成本最低的改进项。

提升数值

  • 添加一个提供 installtestlint 目标的 Makefile(或 justfile/Taskfile)。
  • 维护一套可在本地用一条命令运行的自动化测试。
  • 采用类型检查——即使是最简化的 mypy/tsconfig 配置也计入。
  • 提交锁定文件、Dockerfile 或 devcontainer,以保障环境可复现。
  • 在已经使用代理的地方,保留工具默认添加的 Co-authored-by 尾注。删除它,等于抹去该循环在实践中确实闭合的唯一公开证据。

相关条目:AI 代码可读性 · 工程实践