AI Native 实践

AI Native 研发工作流的交付契约:让 Agent 产出可审计的变更,而非自动化幻觉

面向 issue 分诊、CI 调查、文档更新和代码建议,本文给出一套 AI Native 仓库工作流:任务契约、受限产物、证据回执、人工审核与可复跑评测如何协作。

来源说明与边界

本文的直接材料包括 GitHub Agentic Workflows 官方说明GitHub 的开发教程GitHub 关于 rationale、confidence、approvals 的说明。官方文档明确区分了声明式触发器、权限、安全输出与人工审核;也提醒 approvals 是工作流便利功能,不是服务端安全边界。

研究侧参考 Reproducible, Explainable, and Effective Evaluations of Agentic AI for Software Engineering,该文分析 Agentic AI 软件工程评测中的复现与解释缺口,并主张保存 Thought-Action-Result 轨迹或其可用摘要;以及 Agent 执行证据溯源综述,用于界定“最终结果正确”并不足以说明过程可信。

本文是一套内部研发自动化的工程建议,不是对任何平台的安全保证。它不主张让 Agent 自行合并、发布或改权限;示例中的 GitHub 语法和功能以官方文档为准,预览功能可能变化。

先给结论

AI Native 工作流的单位不应是“一段 prompt”,而应是一份交付契约:它明确任务输入、允许 Agent 产出的对象、所需证据、谁能审批、失败时如何退出。Agent 可以负责把问题变成候选 issue、PR、报告或文档 diff;但权限、合并和生产动作必须由确定性平台策略与人共同控制。

event -> task contract -> bounded agent run -> evidence receipt
                                      |              |
                                      v              v
                             safe output only   quality / policy gates
                                                     |
                                                     v
                                           suggest, approve, merge, or stop

对团队而言,最可复制的路径是从只读、可逆、低影响任务开始:CI 失败归因、issue 分类、变更说明、文档差异提示。不要先做“自动修复并合并”。这样既能积累可比较的任务数据,也不会把模型置信度误当权限。

场景定义:一个研发团队的重复工作如何被重新分工

以“每次 PR 更新后,判断测试是否充分并维护相关文档”为例。

原流程痛点AI Native 后的职责
开发者读 diff、找测试、手动补说明小改动频繁,检查标准不一致Agent 提取变更面、提出测试缺口和文档候选
reviewer 判断风险、请求修改上下文重建成本高reviewer 审核有证据的建议与风险分类
maintainer 合并与发布容易被“看起来合理”的总结推动平台检查 required checks,maintainer 决定 merge

这里的关键不是用 Agent 替代 reviewer,而是让 reviewer 不再从零开始检索:他看到的是带文件、测试、规则和不确定性标签的 evidence receipt。

技术问题:为什么“高置信度”不等于可以自动执行

GitHub 文档对 approvals 的提醒非常重要:它们只影响某些自动化变更何时以建议出现,并不构成服务端权限边界。拥有写权限的 Agent 仍可能通过其他接口执行写操作。因此,任何设计都必须先回答两个问题:

  1. Agent 技术上被允许做什么?这由 token、仓库权限、网络、容器和 safe outputs 决定。
  2. 团队 流程上希望它做什么?这由置信度、审核队列和业务风险决定。

把两者写在一个 “confidence >= 0.9 就自动合并” 的规则中是类别错误。置信度只能影响建议排序和人工负荷,不能扩大实际能力。

交付契约:将自然语言任务编译为可检查输入输出

一个任务至少包含五个面:范围、输入快照、允许输出、证据、退出条件。

id: pr-test-coverage-review
trigger:
  event: pull_request
  types: [opened, synchronize]
scope:
  repository: org/service-a
  ref: pull-request-head
inputs:
  required:
    - git_diff
    - existing_tests
    - ci_status
allowed_outputs:
  - pull_request_review_comment
  - issue_comment
  - markdown_report
forbidden_outputs:
  - merge_pull_request
  - push_to_default_branch
  - change_repository_settings
evidence_requirements:
  - changed_file_reference
  - test_or_rule_reference
  - uncertainty_label
exit_conditions:
  - no_actionable_gap
  - insufficient_context
  - human_review_required

这份 YAML 的价值是双重的:运行时可用于限制权限和安全输出;离线可用于判断 Agent 是否完成了该做的事。它也避免 prompt 逐渐膨胀成“能做一切”的隐式授权。

状态机:不让未验证文本直接变成仓库事实

triggered -> context-collected -> proposed -> evidence-checked
     -> suggested -> human-approved -> applied
     -> no-op | insufficient-context | policy-denied | expired

proposed 是模型语言;evidence-checked 是确定性检查,例如引用的文件仍位于当前 SHA、测试名称存在、输出路径未越权;applied 才是仓库发生改变。每次状态转换应记录 run ID、输入 revision、规则版本和操作者。

Agent、工具与人的清晰分工

角色输入输出不应承担
context collectordiff、CI、仓库规则受限上下文包写入仓库
analysis agent上下文包、任务契约候选结论与证据引用授权、合并、发布
deterministic checkerevidence receiptpass/fail/reasons创造业务结论
reviewer建议、证据、风险标签批准、拒绝、补充要求从零收集所有背景
maintainer / CI审批与 required checksmerge / deploy 决策相信模型的自我评价

这套分工也适用于研究、运营和数据分析:Agent 可以收集和整理,但事实结论、预算动作、外部发布必须有独立证据和合适的 owner。

证据回执:给人看的不是长思维链,而是可复核连接

保留内部 trace 有助于调试,但面向 reviewer 的回执应该更短、更稳定:

{
  "run_id": "pr-842-20260831-01",
  "input_revision": "abc123",
  "decision": "suggest-review-comment",
  "confidence": "medium",
  "claims": [
    {
      "text": "新增鉴权分支缺少拒绝路径测试",
      "evidence": [
        {"type": "diff", "path": "src/auth.ts", "line": 84},
        {"type": "test-search", "query": "denied token", "result": "none"}
      ],
      "limits": "动态集成路径未在本次运行执行"
    }
  ],
  "policy_version": "review-contract-v2"
}

这个结构让 reviewer 可以问三个简单问题:证据是否仍对当前 revision 有效?结论是否超出证据?缺失的验证是否已被明确说明?比“模型认为覆盖不足”更可操作。

数据与权限边界

工作流默认只读,令 token 权限和 safe outputs 小于或等于任务允许输出。不要把生产 token、未脱敏日志、客户数据或其他仓库的上下文放进通用 Agent 容器。外部文本,包括 issue、PR 描述和构建日志,都应被视为 data,而不是高优先级指令。

runtime_policy:
token: read-only
network: deny-by-default
workspace: ephemeral
secrets:
  expose: []
safe_outputs:
  - pr_comment
  - draft_issue
write_paths: []
retention:
  evidence_receipt_days: 30
  raw_trace_days: 7

当确实需要创建 PR 时,单独用窄权限 workflow;创建 PR 和合并 PR 仍应是两个契约,避免一次认证跨越整个交付链。

可复制 SOP:从一项低风险工作开始

  1. 选择一个有明确完成标准的任务,例如“CI 失败摘要”或“PR 缺失测试建议”。
  2. 写出 task contract,先只允许评论、报告或 draft issue。
  3. 为 30 个历史样本建立人工标注:正确建议、无建议、应升级、应拒绝。
  4. 运行 Agent,保存 input SHA、receipt、规则版本和 reviewer 决策。
  5. 每周复盘 false positive、false negative、证据缺失和权限越界尝试;先改 contract 与 fixture,再改 prompt。
  6. 只有当低风险任务稳定后,才增加受审阅的 PR 创建;生产发布永远保持独立 gate。

质量、ROI 与成本评估

指标定义目的
actionable precisionreviewer 接受的建议 / 全部建议控制噪声
missed-risk rate人工发现但 Agent 未标出的风险 / 人工风险控制假阴性
evidence completeness含可定位证据和限制说明的 receipt 比例防止空泛结论
median review timereviewer 从打开到决定的时间衡量真实节省
override rate人工推翻 Agent 建议的比例定位契约/策略缺陷
token + runner cost单次运行的实际成本避免低价值高频自动化

ROI 不应只计“跑了多少次”。一个减少 30% 上下文重建时间、但每周只触发十次的工作流,可能比高频生成低质量评论更值得保留。

失败与回滚

失败模式兜底策略
Agent 引用过期 diffchecker 验证 input SHA;不一致即 expired
issue 文本诱导越权行为将文本作为非指令 data;safe output 和 token 独立约束
置信度很高但证据为空强制 receipt schema;缺证据只能建议人工调查
建议过多淹没 reviewer设置每 PR 上限与 no-op 合法出口
workflow 误写仓库使用只读 token;将写操作拆到独立的窄权限契约
规则/模型升级后质量漂移固定回归集,比较 task contract 与模型版本

回滚的基本动作应是禁用触发器、撤销窄 token、保留 receipt 供复盘,而不是删除证据后假装从未发生。

工程判断与局限

这套方式比“让 Agent 自由执行”慢,也会增加 schema、fixture 和审阅成本;对一次性的创意任务并不划算。但在重复、可审计、跨人协作的工作中,交付契约能把模型不确定性限制在建议层,把平台权限和业务责任留在确定性控制面。

论文对 TAR 可用性的主张、平台文档的 safe outputs 机制和本文的契约设计是三个不同层次:前两者提供问题与能力背景,后者是我的工程组合。没有组织自己的历史样本和 reviewer 数据,就不能宣称它会提高质量或 ROI。

发布前自审

  • 事实可靠性:平台行为引用官方文档;研究主张标记为研究建议。
  • 具体性:包含任务契约、状态机、回执 schema、运行策略、SOP 和指标。
  • 人工审核点:明确 reviewer、maintainer 与平台权限职责。
  • 失败与回滚:涵盖过期证据、提示注入、权限越界和质量漂移。
  • 非薄内容/非标题党:没有宣称自主交付,主题聚焦可审计变更。