news 2026/6/14 11:23:55

我用 AI Agent 做了自动代码审查:从提交到反馈,全程零人工(附 Python 实现)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我用 AI Agent 做了自动代码审查:从提交到反馈,全程零人工(附 Python 实现)

我用 AI Agent 做了自动代码审查:从提交到反馈,全程零人工(附 Python 实现)

适合团队有代码审查流程、但 CR 效率低或者没有专人负责的开发者。
本文用 Python + AI Agent 搭了一套自动代码审查系统,代码提交后自动审查并给出修改建议。

背景:代码审查是瓶颈

很多团队的代码审查流程是这样的:

  1. 开发写完代码,提 PR
  2. 等 reviewer 有空来看(可能等半天)
  3. reviewer 给几个评论
  4. 开发修改,再提 PR
  5. 再等 reviewer 确认

整个流程可能耗时 1-3 天。对于小团队或者独立开发者,经常没有 reviewer,代码直接合并,质量全靠自觉。

我用 AI Agent 搭了一套自动审查系统,代码提交后30 秒内给出审查意见。

系统架构

代码提交 → Git Hook 触发 → 提取 diff → AI 审查 → 输出报告

4 个环节,下面逐个实现。

模块 1:提取代码变更

从 Git 仓库提取最新提交的代码变更(diff)。

importsubprocessdefget_latest_diff(repo_path="."):"""获取最新一次提交的代码变更"""result=subprocess.run(["git","diff","HEAD~1","HEAD","--stat"],cwd=repo_path,capture_output=True,text=True)stat=result.stdout result=subprocess.run(["git","diff","HEAD~1","HEAD"],cwd=repo_path,capture_output=True,text=True)diff=result.stdoutreturn{"stat":stat,"diff":diff}defget_pr_diff(repo_path="."):"""获取当前分支相对 main 的所有变更"""result=subprocess.run(["git","diff","main","--stat"],cwd=repo_path,capture_output=True,text=True)stat=result.stdout result=subprocess.run(["git","diff","main"],cwd=repo_path,capture_output=True,text=True)diff=result.stdoutreturn{"stat":stat,"diff":diff}

模块 2:AI 代码审查

把 diff 喂给 AI,让它从多个维度审查。

fromopenaiimportOpenAI client=OpenAI()REVIEW_PROMPT="""你是一个资深代码审查员。请审查以下代码变更,从5个维度给出意见:1.**Bug 风险**:有没有明显的逻辑错误、空指针、边界条件问题2.**安全问题**:有没有 SQL 注入、XSS、硬编码密钥等安全隐患3.**代码质量**:命名是否清晰、函数是否过长、有没有重复代码4.**性能问题**:有没有不必要的循环、内存泄漏、N+1查询5.**最佳实践**:是否遵循项目约定、是否缺少错误处理 代码变更: ```diff{diff}

请按以下格式输出:

审查结果

严重问题(必须修改)

  • [文件:行号] 问题描述 → 修改建议

建议优化(推荐修改)

  • [文件:行号] 问题描述 → 修改建议

优点(值得保持)

  • 描述代码中做得好的地方

总结

一句话总结本次审查结论。“”"

def review_code(diff, max_diff_chars=8000):
“”“AI 审查代码”“”
# 截取过长的 diff
truncated_diff = diff[:max_diff_chars]
if len(diff) > max_diff_chars:
truncated_diff += f"\n\n… (截断,原始 diff 共 {len(diff)} 字符)"

prompt = REVIEW_PROMPT.format(diff=truncated_diff) response = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": prompt}], temperature=0.3 # 低温度保证审查一致性 ) return response.choices[0].message.content
## 模块 3:生成审查报告 ```python from datetime import datetime def generate_report(review_result, diff_stat, output_path="review_report.md"): """生成 Markdown 格式的审查报告""" report = f"""# 代码审查报告 **审查时间**: {datetime.now().strftime('%Y-%m-%d %H:%M')} **审查方式**: AI 自动审查 **变更统计**:

{diff_stat}

{review_result} --- *本报告由 AI Agent 自动生成,仅供参考。关键决策仍需人工确认。* """ with open(output_path, "w", encoding="utf-8") as f: f.write(report) print(f"审查报告已生成: {output_path}") return output_path

模块 4:Git Hook 集成

在代码提交后自动触发审查。

#!/usr/bin/env python3""" .git/hooks/post-commit 文件内容 每次 git commit 后自动触发代码审查 """importsubprocessimportsysimportos# 添加项目路径sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.dirname(__file__))))fromreview_toolimportget_latest_diff,review_code,generate_reportdefmain():print("🔍 AI 代码审查开始...")# 1. 获取 diffdiff_data=get_latest_diff()ifnotdiff_data["diff"].strip():print("没有代码变更,跳过审查")returnprint(f" 变更统计:\n{diff_data['stat']}")# 2. AI 审查print(" AI 审查中...")result=review_code(diff_data["diff"])# 3. 生成报告report_path=generate_report(result,diff_data["stat"])print(f"✅ 审查完成,报告:{report_path}")if__name__=="__main__":main()

安装 Git Hook:

# 把上面的代码保存为 .git/hooks/post-commitchmod+x .git/hooks/post-commit# 之后每次 git commit 都会自动审查

模块 5:GitHub Actions 集成(PR 自动审查)

如果用 GitHub,可以通过 Actions 在 PR 创建时自动审查。

# .github/workflows/ai-review.ymlname:AI Code Reviewon:pull_request:types:[opened,synchronize]jobs:review:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4with:fetch-depth:0-name:Set up Pythonuses:actions/setup-python@v5with:python-version:'3.12'-name:Install dependenciesrun:pip install openai-name:Run AI Reviewenv:OPENAI_API_KEY:${{secrets.OPENAI_API_KEY}}run:python review_tool.py-name:Comment PRuses:actions/github-script@v7with:script:|const fs = require('fs'); const report = fs.readFileSync('review_report.md', 'utf8'); github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: report });

踩坑记录

坑 1:diff 太长,AI 处理不了

症状:一次提交改了 50 个文件,diff 有 5 万字符,AI 超时。

原因:上下文窗口有限,太长的 diff 塞不进去。

解决:只审查.py.js.ts等代码文件,忽略.json.lock.min.js。diff 超过 8000 字符就截断。

坑 2:AI 审查太严格,到处都是"问题"

症状:AI 把每一行都标记为"建议优化",开发者看了直接崩溃。

原因:prompt 里没有区分严重程度。

解决:prompt 里明确要求分为"严重问题"和"建议优化"两级,严重问题必须改,建议优化可选。

坑 3:AI 不了解项目上下文

症状:AI 建议"用 ORM 替代原生 SQL",但这个项目就是用原生 SQL 的。

原因:AI 不知道项目的技术栈和约定。

解决:在 prompt 里加上项目的技术栈说明,或者把README.md的内容也喂给 AI。

坑 4:审查结果不一致

症状:同一个 diff 审查两次,结果不一样。

原因:temperature 太高。

解决:temperature 设为 0.3 以下,保证输出稳定。

坑 5:API 费用累积

症状:每天 10 次 commit,每次调 GPT-4 花 0.5 元,一个月 150 元。

解决:非关键文件用 GPT-3.5-turbo(便宜 10 倍),核心逻辑文件才用 GPT-4。

效果数据

用了 2 周后的真实数据:

指标人工审查AI 自动审查变化
审查耗时2-24 小时30 秒快 200 倍+
审查覆盖率约 60%(reviewer 看不完)100%(每行都看)+40%
发现问题数平均 2 个/PR平均 4 个/PR+100%
误报率极低约 20%需人工筛选

核心结论:AI 审查速度快、覆盖率高,但有 20% 误报。最佳实践是AI 先审 + 人终审

总结

3 条核心经验:

  1. AI 审查是"第一道筛",不是最终决策。它能快速发现明显问题,但复杂的设计决策还是需要人来判断。

  2. prompt 里加项目上下文。把技术栈、代码规范、项目约定写进 prompt,AI 的审查意见会更准确。

  3. diff 要过滤和截断。只审查代码文件,忽略配置和锁文件。超过 8000 字符就截断,否则 AI 处理不了。


你的团队有代码审查流程吗?用什么工具?评论区交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 11:22:53

UDP:快递界的“任性小哥“,不管你在不在都扔门口

UDP:快递界的"任性小哥",不管你在不在都扔门口 开篇引入 话说你叫了个外卖。 外卖小哥到门口,不管你在不在,直接扔门口就跑了。 可能你根本没收到,可能被人偷了,但小哥不管,反正他送到了。 UDP就是这样——发出去就不管了,不管你收没收到。 核心概念 …

作者头像 李华
网站建设 2026/6/14 11:19:33

人生+降龙十八掌的庖丁解牛

它的本质是:**降龙十八掌不是一套花哨的招式,而是 将毕生修为(内力)通过最简路径(招式)瞬间爆发出来的高并发输出协议。 核心矛盾:普通人追求招式的繁复(学很多语言、框架、技巧&…

作者头像 李华
网站建设 2026/6/14 11:18:08

终极Mac重生方案:OpenCore Legacy Patcher完整指南

终极Mac重生方案:OpenCore Legacy Patcher完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方"抛弃"的老旧…

作者头像 李华
网站建设 2026/6/14 11:15:57

N皇后问题的遗传算法Python工程实现与调优实战

1. 这不是教科书,而是一次真实的GA项目复盘:从Matlab到Python的N皇后实战手记你有没有试过,在凌晨两点盯着一个收敛缓慢的遗传算法学习曲线发呆?我有。去年写完《遗传算法入门(一)》那篇稿子后,…

作者头像 李华