Skip to content

feat(axbuild): add offline agent review benchmark#1615

Merged
ZR233 merged 4 commits into
devfrom
codex/agent-review-bench
Jul 15, 2026
Merged

feat(axbuild): add offline agent review benchmark#1615
ZR233 merged 4 commits into
devfrom
codex/agent-review-bench

Conversation

@ZR233

@ZR233 ZR233 commented Jul 15, 2026

Copy link
Copy Markdown
Member

问题

项目此前缺少一个可复现、不会向 GitHub 写入评审状态的代码评审基准,无法用真实历史缺陷衡量离线评审的预期问题召回率。评审与评分也需要同时支持 Codex 和 Claude Code,并允许 reviewer 与 grader 独立选择后端及模型配置。

此外,benchmark 不应在 reviewer prompt 中重新维护一份评审规则;否则它会逐渐偏离项目实际使用的 review-single-pr 规范。原有 case 校验还只允许锚定新增行,无法表达 PR #1611 这类仅删除配置、问题需要锚定到相邻 HEAD-side 上下文行的历史缺陷。

改动

  • cargo xtask 注册 agent-review-bench list/check/run
    • run 支持重复的 --case--pr 选择,以及 --timeout-secs--output 和可选 --min-recall
    • 多个 case/PR selector 取并集并去重,未知 selector 会报错;未指定样例时顺序运行全部样例。
    • 默认只报告 recall,不因漏报失败;显式设置 --min-recall 时才启用门禁。
  • reviewer 和 grader 均支持 Codex 与 Claude Code:
    • --agent codex|claude 默认使用 Codex。
    • --grader-agent 可独立选择评分后端;未指定时继承 reviewer。
    • --model--reasoning-effort 配置 reviewer,grader 可通过对应的 --grader-* 参数独立覆盖。
    • model 和 effort 均作为任意字符串原样透传,不解析别名、不规范化,也不做跨后端映射;未指定 model 时由对应 CLI 继承用户配置。
    • Codex effort 使用安全 TOML 字符串编码写入 model_reasoning_effort,Claude model/effort 使用独立 argv 参数,均不经过 shell。
  • reviewer 改为原生触发项目 review-single-pr skill:
    • Codex prompt 仅为 $review-single-pr offline-benchmark
    • Claude prompt 仅为 /review-single-pr offline-benchmark
    • 不调用 Codex 预制 review 或 Claude ultrareview,prompt 中不再重复评审 checklist。
  • review-single-pr 增加严格的 offline-benchmark 模式:
    • 固定评审 synthetic 仓库中的 bench-base..HEAD,复用现有正确性、安全、硬件/ABI、测试接线和文档等评审要求。
    • GitHub intake、联网、CI 查询、构建测试执行、review 提交和 reviewer 分配在该模式下明确不适用。
    • 只允许仓库内只读检查和 harness 白名单中的 Git 命令,最终只输出 benchmark JSON schema。
  • 每个样例通过 git archive 构造独立的 synthetic 两提交仓库:
    • base/head 两侧同时注入当前 AGENTS.mdCLAUDE.mdbook/guideline/、离线 contract,以及当前 review-single-pr skill。
    • skill 分别写入 .agents/skills/review-single-pr/SKILL.md.claude/skills/review-single-pr/SKILL.md,确保两个 CLI 都使用当前规范。
    • 上述上下文在两侧一致,不进入被评审 diff;仓库不使用 worktree、alternates 或共享 .git,reviewer 看不到 case 真值、来源评论和修复提交。
  • 统一 runner 保留后端隔离:
    • Codex 使用 ephemeral、read-only、never-approval,并关闭 sandbox 网络访问。
    • Claude reviewer 加载 user,project setting sources,以保留已登录凭据、默认 model 和项目 skill;同时使用命令行高优先级设置禁用 hooks、skill shell、后台任务、自动记忆和非必要流量,并启用严格空 MCP、禁用 Chrome、dontAsk 和只读工具白名单。
    • Claude grader 不需要 skill,继续使用 safe mode 且只开放 Read。
    • 两个后端统一处理超时、非零退出、空输出和非法 JSON。
  • summary.json 分别记录 reviewer 和 grader 的 agent、CLI 版本以及实际透传的 model/effort 原始值。
  • 固定 TOML case 格式和校验:
    • 校验完整 SHA、base/head 祖先关系、修复提交对象、唯一 ID 和 diff 路径。
    • expected 行必须是带一行上下文的 changed hunk 中仍存在于 HEAD 的行;普通新增行和纯删除旁的 HEAD-side 上下文行均可锚定,hunk 外无关行仍会拒绝。
    • 所有 case 的 titledescriptionmatch_if 已统一为中文;机器 ID、路径、SHA 与 URL 保持不变。
  • grader 在仅含 review 和真值的独立临时目录中逐项进行语义匹配,输出逐例 artifacts 和总 summary.json
  • 增加四个来自真实 PR 历史的样例:
  • 增加 CLI 默认值与继承、双向交叉后端、参数原样透传、原生 skill prompt、Claude 隔离参数、schema、选择、评分、recall 门禁、synthetic Git 仓库、非法 JSON、非零退出和超时测试,不新增依赖。
  • 增加 HEAD-side hunk 回归测试,覆盖新增行、纯删除相邻上下文、hunk 外无关行,以及重复 case/PR selector 的并集去重。

实现逻辑

reviewer 只接触从指定 base/head 快照重建的独立仓库。当前项目规则和 skill 同时提交到 synthetic base/head,因此模型能按当前规范评审历史变更,但这些规则不会污染目标 diff。offline-benchmark 参数与环境 marker 共同启用只读分支,避免 review-single-pr 的在线 GitHub 流程产生副作用。

grader 与代码仓库完全分离,只根据 reviewer JSON 和预期 finding 的语义标准判断是否命中。这样既避免答案泄漏,也避免评分模型从代码或修复提交反推答案。

纯删除 diff 没有可用于评论的删除后行。case 校验因此使用一行 diff 上下文,将紧邻删除点且仍存在于 HEAD 的行作为锚点;校验范围不会扩大到 hunk 外的任意未修改行,review JSON/TOML schema 也无需增加 diff side 字段。

统一 runner 根据 reviewer/grader 的实际选择分别检查 CLI、构造命令和记录版本。模型及 effort 保持调用方提供的字符串边界;目标 CLI 不支持的值会原样报错并作为 harness failure。

验证

  • cargo fmt --all --check
  • cargo test -p axbuild --lib:747 passed
  • cargo xtask clippy --package axbuild
  • cargo xtask agent-review-bench check:4 个样例全部通过
  • cargo xtask agent-review-bench list:列出 4 个中文标题
  • 原有 fix(realtek-rtl8125): advertise gigabit autonegotiation #1583 基线:
    • Codex CLI 0.144.1 reviewer/grader:recall 1/1(100%),extra findings 0
    • Claude Code 2.1.208 reviewer/grader:recall 1/1(100%),extra findings 0
  • fix(qemu): increase explicit timeout for SVM smoke tests #1611 首次且唯一一次真实运行:
    • 命令:cargo xtask agent-review-bench run --case 1611-axvisor-qemu-timeout-watchdog --min-recall 100
    • Codex CLI 0.144.1,reviewer/grader 均使用默认模型配置和 high reasoning effort
    • reviewer 分别提交了 SVM、VMX 两个 major finding,均指出缺失 timeout 会禁用 per-case watchdog,并要求恢复有限超时
    • 当前 expected 要求单个 finding 同时覆盖 SVM 与 VMX;grader 因两个 finding 各自只覆盖一个配置,判定 recall 0/1(0%),extra findings 2,100% 门禁按预期返回失败
    • review 245.80 秒,grade 20.44 秒;本地产物目录为 target/agent-review-bench/20260715-072953-580Z
    • 保留该首次结果,不放宽匹配条件,也未重跑挑选结果

范围

v1 支持 PATH 中已安装并登录的 Codex 或 Claude Code CLI;不管理 API key/profile,不增加预算参数或自动 CLI 探测,不接入 CI,也不提交 GitHub review 或创建、修改 issue、评论和 reviewer 状态。

@ZR233
ZR233 marked this pull request as ready for review July 15, 2026 05:47

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

评审总结

本 PR 在 cargo xtask 中新增 agent-review-bench 子命令,用于离线评审基准测试。主要改动包括:

  1. CLI 注册:在 scripts/axbuild/src/lib.rs 中注册 agent-review-bench list/check/run 子命令。
  2. 样例管理cases.rs):TOML 格式样例定义、SHA 校验、base/head 祖先关系检查、HEAD 侧新增行验证。
  3. synthetic 仓库构建sandbox.rs):通过 git archive 构造独立的双提交仓库,注入当前 review-single-pr skill、AGENTS.md、CLAUDE.md、book/guideline/ 和离线 contract,确保评审上下文一致且不污染目标 diff。
  4. Agent 运行器runner.rs):支持 Codex 和 Claude Code 两种后端,独立 reviewer/grader 配置,安全透传 model/effort 参数(Codex 用 TOML 字符串编码,Claude 用独立 argv),统一超时/非零退出/空输出处理。
  5. 评分模块scoring.rs):依据 grader JSON 与预期 finding 进行语义匹配,计算 caught/missed/extra 统计。
  6. 离线模式:在 .claude/skills/review-single-pr/SKILL.md 中增加 offline-benchmark 模式,明确不适用在线 GitHub 流程,仅输出 JSON schema。

实现逻辑

  • reviewer 只接触从 base/head 快照重建的独立仓库,当前规则和 skill 同时注入两侧但不进入 diff。
  • grader 在仅含 review.json 和 expected.json 的独立临时目录中评分,与代码仓库完全分离,避免答案泄漏。
  • 参数透传保持字符串边界,不做别名解析或跨后端映射;不支持的值由目标 CLI 原样报错。

验证结果

  • cargo fmt --check:通过
  • cargo clippy --manifest-path scripts/axbuild/Cargo.toml --all-features -- -D warnings:通过
  • cargo test --manifest-path scripts/axbuild/Cargo.toml --all-features:744 passed, 0 failed
  • cargo xtask agent-review-bench check:3 个样例全部通过
  • [patch.crates-io] 使用

CI 状态

所有 CI check run 均标记为 skipped,符合预期——本 PR 仅修改 scripts/axbuild/ 和 skill 文件,不涉及 kernel、driver、test-suit 等需要 QEMU/板卡的路径,路径过滤正确跳过了不相关的 job。没有 PR 导致的 CI 失败。

重复/重叠分析

  • 在 dev 分支中不存在等效功能或已有实现。
  • 当前 open PR 中无与 agent-review-bench 功能重叠或冲突的 PR(#1616 是 axvisor shell 修复,完全不相关)。
  • 本 PR 是全新工具引入,不与任何现有功能重复。

审查意见

无阻塞性问题。代码设计清晰,模块边界合理,参数安全透传(Codex effort 使用 TOML 编码、Claude 使用独立 argv,均不经过 shell),测试覆盖全面(包括 mock agent 端到端测试、schema 校验、边界情况等),离线模式对 review-single-pr skill 的修改严格受 guard 条件限制不会影响在线评审流程。

残留风险

  • benchmark 本身不接入 CI(符合 PR 声明的 v1 范围),后续可考虑增加定期 CI 基线收集。
  • 样例的 remote 指向 https://github.com/rcore-os/tgoskits.git,当仓库迁移或重命名时需同步更新。

Powered by deepseek-v4-pro

@mai-team-app
mai-team-app Bot requested a review from ZCShou July 15, 2026 06:57
@ZR233
ZR233 merged commit bc453ea into dev Jul 15, 2026
64 checks passed
@ZR233
ZR233 deleted the codex/agent-review-bench branch July 15, 2026 08:05
This was referenced Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant