线上 CI 一旦连续红灯,团队最怕的不是“修得慢”,而是“修坏更多”。 这篇给你一套可落地的 GitHub Actions + AI Agent 自动修复流水线:先做失败分级,再限制 AI 修改范围,最后用回归与安全闸门兜底。
先给结论:自动修复只处理“低风险、可验证”问题
建议把失败分成三档:
- P0(高风险):安全、数据一致性、迁移脚本,禁止自动修复
- P1(中风险):依赖冲突、类型错误、lint,允许 AI 出补丁但必须人工批准
- P2(低风险):格式化、文档、简单测试修复,可自动合并
核心原则:允许 AI 快,但不允许 AI 越权。
1) 失败分级:先判定再调用 Agent
在 workflow 中先解析失败日志并打标签:
name: ci-auto-fix
on:
workflow_run:
workflows: ["CI"]
types: [completed]
jobs:
classify:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
outputs:
severity: ${{ steps.cls.outputs.severity }}
steps:
- uses: actions/checkout@v4
- name: classify failure
id: cls
run: |
python3 scripts/classify_failure.py > result.txt
cat result.txt
echo "severity=$(cat result.txt)" >> "$GITHUB_OUTPUT"
classify_failure.py 的最低实现建议:
- 匹配
security,migration,destructive→P0 - 匹配
test failed,type error,dependency→P1 - 匹配
markdownlint,prettier,ruff format→P2
2) 给 Agent 上“笼头”:限制改动目录和行数
不要把整个仓库丢给 Agent。只允许它改白名单路径:
ALLOWED_PATHS="src/ tests/ .github/"
MAX_CHANGED_LINES=200
git diff --name-only > changed_files.txt
python3 scripts/check_scope.py changed_files.txt "$ALLOWED_PATHS" "$MAX_CHANGED_LINES"
check_scope.py 失败就立即终止并转人工。
3) 自动生成修复 PR(不直接推主分支)
propose-fix:
needs: classify
if: ${{ needs.classify.outputs.severity != 'P0' }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: run agent patch
run: |
./scripts/run_agent_fix.sh "${{ needs.classify.outputs.severity }}"
- name: open PR
run: |
gh pr create \
--title "ci: agent fix for failed run ${{ github.run_id }}" \
--body "Auto-generated patch. Requires gated checks."
4) 安全闸门:三道必须过
合并前至少强制三道检查:
- 回归测试通过(单测 + 关键 e2e 冒烟)
- 安全扫描通过(CodeQL/SAST + secret scan)
- 策略校验通过(改动范围、敏感文件未触达)
示例:
- name: gated regression
run: make test-critical
- name: security scan
run: make security-scan
- name: policy check
run: python3 scripts/policy_guard.py
5) 常见翻车点与排障
现象 A:Agent 一直修同一个错误,进入重试风暴
- 限制同一 run 最多 1 次自动修复
- 对同一错误指纹 24 小时内只允许 3 次尝试
python3 scripts/retry_budget.py --fingerprint "$ERR_FP" --max 3 --window 24h
现象 B:修复成功但引入隐性性能退化
- 把
benchmark smoke放进闸门 - 对关键接口设置 P95 阈值,超过就阻断合并
现象 C:AI 修改了不该改的基础设施文件
- 在
policy_guard.py硬编码 denylist:terraform/,migrations/,secrets/
6) 最小可行落地(MVP)
如果你今天就要上线,按这个顺序:
- 只开 P2 自动修复
- 所有修复都走 PR,不直推主分支
- 打开回归 + 安全闸门
- 记录指标:自动修复成功率、回滚率、平均恢复时间(MTTR)
当回滚率连续两周低于 3%,再扩展到 P1。
总结
AI 自动修复流水线的关键不是“让模型更聪明”,而是 把失败分级、权限边界、验证闸门做扎实。先用保守策略换稳定收益,再逐步放权,才是团队可长期复用的路径。