用 30 行 Python 让 AI 帮你审完整个代码仓库(附完整可运行代码)
用 30 行 Python 让 AI 帮你审完整个代码仓库(附完整可运行代码)
你写代码的时候有没有这种感觉:PR 堆了一周,自己审查累得要死,还总在低级错误上翻车。
其实现在完全可以让 AI 替你做第一道审查,把明显的问题过滤掉,你只需要把精力放在架构决策上。
下面这个脚本我自己在用,核心逻辑不到 30 行,能遍历整个 repo、逐文件调用模型做 code review,最后输出一份 Markdown 报告。
思路拆解
整个流程很简单:
1. 递归遍历目录,过滤掉不需要看的文件(node_modules、.git、二进制文件等)
2. 把文件内容塞给模型,附上一段结构化的 review prompt
3. 把每个文件的反馈汇总成报告,写入 review_report.md
模型用 gpt-4.1 或者 claude-sonnet-4-5 都行,接口是 OpenAI 格式,改一个 base_url 就能切换。
完整代码
import os
import sys
from pathlib import Path
from openai import OpenAI
# ✅ 改这一行就能用,国内直连,不需要梯子
client = OpenAI(
api_key=os.environ.get("API_KEY", "your-key-here"),
base_url="https://api2everything.xyz/v1",
)
# 跳过这些目录和扩展名
SKIP_DIRS = {".git", "node_modules", "__pycache__", ".venv", "dist", "build"}
SKIP_EXTS = {".png", ".jpg", ".jpeg", ".gif", ".svg", ".ico", ".lock", ".bin"}
MAX_FILE_CHARS = 8000 # 避免单文件太长超出上下文
REVIEW_PROMPT = """你是一位资深代码审查工程师。请对以下代码进行审查,重点关注:
1. 潜在的 Bug 或逻辑错误
2. 安全漏洞(SQL 注入、未校验输入、硬编码密钥等)
3. 性能问题
4. 可读性和命名规范
请用中文输出,格式为:
- **问题**:具体描述
- **位置**:大致行号或函数名
- **建议**:如何改进
如果代码没有明显问题,直接回复「✅ 无明显问题」。
"""
def should_skip(path: Path) -> bool:
if any(part in SKIP_DIRS for part in path.parts):
return True
if path.suffix.lower() in SKIP_EXTS:
return True
return False
def review_file(filepath: Path, model: str = "gpt-4.1-mini") -> str:
try:
content = filepath.read_text(encoding="utf-8", errors="ignore")
except Exception as e:
return f"❌ 读取失败:{e}"
if len(content.strip()) < 10:
return "⏭ 文件为空,跳过"
if len(content) > MAX_FILE_CHARS:
content = content[:MAX_FILE_CHARS] + "\n\n[...文件过长,已截断...]"
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": REVIEW_PROMPT},
{"role": "user", "content": f"文件路径:{filepath}\n\n```\n{content}\n```"},
],
temperature=0.2,
)
return response.choices[0].message.content.strip()
def review_repo(repo_path: str, model: str = "gpt-4.1-mini"):
root = Path(repo_path)
files = [p for p in root.rglob("*") if p.is_file() and not should_skip(p)]
print(f"📁 共找到 {len(files)} 个文件,开始审查...\n")
report_lines = [f"# Code Review 报告\n\n仓库路径:`{repo_path}`\n"]
for i, filepath in enumerate(files, 1):
rel_path = filepath.relative_to(root)
print(f"[{i}/{len(files)}] 正在审查:{rel_path}")
result = review_file(filepath, model=model)
report_lines.append(f"\n## `{rel_path}`\n\n{result}\n")
report_path = root / "review_report.md"
report_path.write_text("\n".join(report_lines), encoding="utf-8")
print(f"\n✅ 审查完成,报告已写入:{report_path}")
if __name__ == "__main__":
target = sys.argv[1] if len(sys.argv) > 1 else "."
review_repo(target)
跑起来
pip install openai
# 设置 API Key(在无量Api 注册后获取,注册送 ¥1)
export API_KEY="sk-xxxxxxxx"
# 审查当前目录
python review_repo.py .
# 或者指定路径
python review_repo.py /path/to/your/project
跑完会在项目根目录生成一个 review_report.md,按文件分节,问题一目了然。
模型选择建议
| 场景 | 推荐模型 | 说明 |
|------|----------|------|
| 快速过滤 | gpt-4.1-mini | 速度快、成本低,适合大型 repo |
| 深度审查 | claude-sonnet-4-5 | 逻辑推理更强,适合核心模块 |
| 安全审计 | gemini-2.5-pro | 对安全漏洞的识别相对全面 |
只需要改 model= 这个参数,其他不用动,这就是 OpenAI 格式兼容的好处。
关于费用
审查一个中等规模的 Python 项目(~50 个文件,~5000 行代码),用 gpt-4.1-mini 大概消耗不到 ¥0.5。如果你直接用 OpenAI 官方 API,同样的用量大概要 ¥1.4 左右。
我自己用的是 无量Api,国内直连不需要梯子,价格比官方便宜 60% 以上,支持 300+ 模型统一入口,注册就送 ¥1 余额,拿来跑这个脚本够用很久了。改一行 base_url 就接入,迁移成本基本为零。
几个可以继续扩展的方向
- 只审查 diff:结合
git diff HEAD~1的输出,只把改动的部分喂给模型,更聚焦 - CI 集成:把这个脚本加到 GitHub Actions,每次 PR 自动触发
- 自定义规则:在
REVIEW_PROMPT里加上你们团队的编码规范,让模型按规范审
有遇到问题或者想聊具体用法的,评论区留言,我看到都会回。觉得有用的话点个赞,后续还会写更多 AI 工程化的实战内容。