AI 生成代码的 Review 证据层
本章要解决的问题
Reviewer 需要哪些证据才能判断 AI 改动是否可信?
读者读完应获得什么
- 能列出 AI PR 的最小证据清单。
- 能区分“模型解释”和“系统证据”。
- 能把证据层接入 CI/PR 注释。
本章不讲什么
- 不设计完整人工管理流程。
- 不声称证据可替代所有人工判断。
本章与邻章边界
- 本章聚焦改后:Reviewer 需要哪些系统证据。
- 影响面算法细节见第四篇;Agent 改前上下文见上下文工程章。
AI 生成的 PR 往往包含流畅说明,但 Reviewer 需要的是可核验证据。证据层把代码理解系统接到评审现场。
最小证据清单
对任何 AI 修改,至少检查:
- 改动范围:实际变更实体列表
- 影响路径:入口与关键下游
- 相关测试:已跑/未跑/需更新
- 规则检查:架构/安全基线
- 查询轨迹:Agent 如何得到上下文
- 残留风险:已知不确定点
PR-42 样例报告:examples/mini-shop/artifacts/verification-report-pr-42.md
模型说明 vs 系统证据
| 类型 | 例子 | 可信基础 |
|---|---|---|
| 模型说明 | “只改了折扣,无风险” | 生成文本 |
| 系统证据 | callers=calculateTotal...;tests 需更新 | 图谱查询与命令结果 |
Review 政策应要求:关键断言必须有系统证据支撑。
证据在 PR 中的呈现
建议顺序:
1. 变更摘要(实体级)
2. 影响路径图/列表
3. 测试计划与结果
4. 规则与安全检查
5. 查询轨迹折叠区
6. 人工待确认项
不要把原始 JSON 一股脑贴出;先摘要,后下钻。
自动化与人工分工
- 自动:影响面、测试关联、规则、格式化报告
- 人工:业务语义、产品取舍、例外批准
- AI:草拟说明,但不可自证安全
反模式
- 只看模型自信度
- 绿测就过,不看是否测到变更路径
- 证据不可回跳源码
- 无查询轨迹,无法复盘
AI PR 的危险不在于模型会写错代码——人也会——而在于它能以很高的流畅度生成“看起来可合并”的说明。Reviewer 若只阅读自然语言总结,等于在和文笔比赛。证据层把比赛拉回事实:变更实体、影响路径、相关测试、规则结果、查询轨迹。
分级很重要。把所有信息平铺会制造新的疲劳;把提示级信息默认折叠,才能让阻断项和金额语义变化这类重要项被真正看见。PR-42 正好落在“重要”:业务值要人确认,但自动证据必须先把影响与测试说清。
同源盲点与独立验证(2026 研究视角)
2026 年出现一批针对“AI 审阅 AI”的研究,核心结论与本书证据层一致,且给出了更强表述:
- 同源盲点(model synchopathy):生成修复的模型与批准它的审阅模型若来自同一家族/同一套假设,会共享盲点。产物“看起来干净、置信度很高”,但缺陷仍会漏过。社区甚至把原则写成:“AI 不应既写修复,又写批准它的测试。”
- 独立修补验证(independent patch verification):已有框架(如 bidirectional reconstruct-and-verify)尝试脱离产生补丁时的解释,独立验证补丁是否真的解决问题——回应“同源审阅”的方法空缺。
- 证据门禁(Proof-or-Stop 类方法):
reviewed/ready-to-merge这类生命周期状态本质是 claim,下游系统应只承认“有机械可验证证据支撑”的 claim;拿不出证据的节点不放行。 - 审阅可被带偏(框架效应实证):2026 年一项针对 LLM 辅助安全审查的实验(arXiv:2603.18740)测得:PR 元数据的呈现框架会系统性影响审阅结论,“无缺陷”框架下漏检最强;通过元数据删减与显式去偏指令可恢复检测能力。这为“阻断级判断必须由确定性检查完成”提供了实证依据。
证据强度说明:以上多来自预印本与早期工程实践(arXiv/工程博客),尚未形成稳定共识。本书引用它们是为了强调“同源审阅不可靠”这一风险,不把它们当成已被大规模验证的定论。
对证据层的落地含义:
- 审阅模型 ≠ 生成模型:至少让阻断级判断由不同假设的模型或确定性检查(图谱/测试/规则)完成
- 把“验证”做成独立阶段:不是 Agent 自述“我测过了”,而是 CI 执行并产出可回跳的产物
- 生命周期门禁化:缺证据就不允许从
in_review进入mergeable,而不是靠“相信状态字段”
局限
- 证据完整不等于业务正确,关键语义仍需人工判断。
- 自动化检查受索引新鲜度和规则覆盖限制。
- 证据过多会造成 Review 疲劳,需要分层呈现。
小结
- AI PR 需要专门的证据层。
- 证据必须来自可复现查询与检查。
- 报告要服务 Reviewer 决策,而不是炫技。
- 人工仍负责业务与例外判断。
- 同源审阅有盲点:独立验证(不同模型或确定性检查)是证据层的必要一环,而非可选优化。
进阶要点:证据分级
不是所有证据同等重要。可分级:
| 级别 | 例子 | 合并策略参考 |
|---|---|---|
| 阻断 | 架构规则失败、高危路径无测试 | block |
| 重要 | 影响路径跨模块、金额语义变化 | 必审 |
| 提示 | 文案/日志变化、低置信调用边 | 可折叠展示 |
PR-42 属于“重要”:金额语义变化 + 测试需更新,但架构规则未破。
工作示例:PR 评论骨架
### 自动证据
- Changed: DiscountPolicy.apply
- Paths: apply -> calculateTotal -> createOrder -> create
- Tests: 2 related (need assert update 180 -> 170)
- Rules: pricing-no-payment pass
- Trace: find_symbol, find_callers, related_tests, rules
### 人工待确认
- 业务是否确认 VIP 折扣新值 0.85
自动证据解决“改了什么/影响谁/测什么”;人工确认解决“该不该改成这个业务值”。
常见问题:AI Review 证据
模型很自信是否可合并?
不可以。自信不是证据。
测试全绿是否足够?
不够。还要确认测到了变更路径,且规则/影响面已被检查。
证据太多怎么办?
分级:阻断/重要/提示;默认展示前两级。
本章检查清单
- 变更实体是否列出
- 影响路径是否可回跳
- 相关测试是否识别并执行
- 规则结果是否展示
- 查询轨迹是否保留
关键要点复盘
围绕「AI 生成代码的 Review 证据层」,读者离开本章前应能做到:
- 区分阻断/重要/提示证据
- 填写证据包字段契约
- 用 PR-42 写自动证据+人工确认
- 拒绝“模型自信/全绿即过”
- 衔接到 AI 辅助重构
若任一做不到,请先复习本章例子与练习,再继续向后读。
Reviewer 60 秒路径
- 看变更实体是否与 PR 描述一致
- 看影响路径是否到达入口/资金/权限点
- 看测试是否覆盖这些路径
- 看规则是否失败
- 看轨迹是否显示 Agent 查过测试与规则
任何一步对不上,就从“快速合并”降级为“深入审”。
证据包字段契约
AI PR 证据层建议固定字段,便于 CI 与 UI 共用:
{
"pr": "PR-42",
"changed_entities": [{"id": "method:DiscountPolicy#apply", "change_type": "modified"}],
"impact_paths": [{"path": ["method:DiscountPolicy#apply", "method:PricingService#calculateTotal", "method:OrderService#createOrder", "method:OrderController#create"]}],
"related_tests": ["test:PricingServiceTest#shouldApplyVipDiscount"],
"rules": [{"id": "pricing-no-payment", "status": "pass"}],
"risk": {"level": "medium", "reasons": ["pricing semantics change"]},
"query_trace": ["find_symbol", "find_callers", "related_tests", "architecture_rules"],
"human_checks": ["业务是否确认折扣 0.85"]
}
缺 changed_entities 或 query_trace 的报告,只能算摘要,不能算可审计证据。
练习
- 用 PR-42 填完整证据清单 6 项。
- 把模型说明“无风险”改写成必须附带的系统证据段落。
- 设计 CI 门禁:哪些证据缺失应 block merge。
- 论证为什么“同一模型既生成修复又审阅”不可靠,并给 mini-shop 设计一个独立验证步骤。
本章导航
- 上一章:代码图谱如何服务 AI Agent
- 下一章:AI 辅助重构与系统迁移
- 相关章:给 AI Agent 的查询接口;AI 修改后的验证报告
延伸阅读与参考资料
- GitHub status checks
- GitHub: About code scanning
- SARIF。资料卡:
../docs/research-cards/rc-sarif.md - Codecov PR reporting
- Test Impact Analysis。资料卡:
../docs/research-cards/rc-test-impact.md - Independent Patch Verification(bidirectional reconstruct-and-verify):同源审阅问题与独立验证框架(预印本)。
- Proof-or-Stop: Evidence-gated lifecycle control:生命周期状态需要机械可验证证据(预印本)。
- Measuring and Exploiting Contextual Bias in LLM-Assisted Security Code Review (arXiv:2603.18740):PR 元数据框架可系统性带偏 LLM 审阅并造成漏洞漏检的实证(预印本)。
- 本书样例:
verification-report-pr-42.md。