用 30 行 Python 让 Claude Opus 4 帮你审完整个代码仓库
用 30 行 Python 让 Claude Opus 4 帮你审完整个代码仓库
很多人用 AI 审代码的方式是:打开对话框,粘贴一个文件,等回复,再粘贴下一个。
这不叫 AI 辅助开发,这叫手动搬运。
真正省时间的做法是:写一个脚本,把整个 repo 喂给模型,让它一次性给你输出所有问题。本文就教你怎么做,代码可以直接跑。
为什么选 Claude Opus 4?
Claude Opus 4 在代码理解上有几个明显优势:
- 长上下文:支持 200K token,一个中型项目的核心代码基本能塞进去
- 结构化输出稳定:让它按格式输出问题列表,很少跑偏
- 对潜在 bug 的嗅觉:比 GPT-4o 更倾向于指出逻辑隐患,而不只是风格问题
当然,Opus 4 官方价格不便宜。后面会说怎么省钱。
思路
1. 遍历 repo,收集所有 .py / .ts / .js 等源文件
2. 把文件内容拼成一个大 prompt,附上文件路径作为上下文
3. 调用 Claude API,要求它按固定格式输出审查结果
4. 把结果写成 Markdown 报告
整个流程不超过 50 行代码。
完整代码
#!/usr/bin/env python3
"""
repo_review.py — 用 Claude Opus 4 审查整个代码仓库
依赖: pip install openai
"""
import os
import sys
from pathlib import Path
from openai import OpenAI
# ── 配置 ──────────────────────────────────────────────
REPO_PATH = sys.argv[1] if len(sys.argv) > 1 else "."
OUTPUT_FILE = "review_report.md"
MAX_CHARS = 180_000 # 留一些余量给 system prompt 和回复
EXTENSIONS = {".py", ".ts", ".js", ".go", ".java", ".rs"}
client = OpenAI(
api_key = os.environ["OPENAI_API_KEY"], # 填你的 key
base_url = "https://api2everything.xyz/v1" # 国内直连,无需代理
)
# ── 收集源文件 ─────────────────────────────────────────
def collect_files(root: str) -> list[tuple[str, str]]:
files = []
skip = {"node_modules", ".git", "__pycache__", ".venv", "dist", "build"}
for path in sorted(Path(root).rglob("*")):
if any(p in path.parts for p in skip):
continue
if path.suffix in EXTENSIONS and path.is_file():
try:
content = path.read_text(encoding="utf-8", errors="ignore")
files.append((str(path.relative_to(root)), content))
except Exception:
pass
return files
# ── 构建 prompt ────────────────────────────────────────
def build_prompt(files: list[tuple[str, str]]) -> str:
parts = []
total = 0
for rel_path, content in files:
block = f"\n\n### 文件: {rel_path}\n```\n{content}\n```"
if total + len(block) > MAX_CHARS:
parts.append("\n\n[后续文件因长度限制已截断]")
break
parts.append(block)
total += len(block)
return "".join(parts)
# ── 调用模型 ───────────────────────────────────────────
SYSTEM = """你是一位资深代码审查工程师。
请审查用户提供的代码,按以下格式输出 Markdown 报告:
## 总体评价
(2-3 句话概括)
## 问题列表
| 严重程度 | 文件 | 行(估计) | 问题描述 | 建议修复 |
|----------|------|-----------|----------|----------|
严重程度分三级:🔴 高危 / 🟡 中危 / 🟢 建议优化
## 亮点
(值得保留的好写法)
只输出 Markdown,不要额外解释。"""
def review(prompt: str) -> str:
resp = client.chat.completions.create(
model = "claude-opus-4-5",
messages = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": f"请审查以下代码:{prompt}"}
],
max_tokens = 4096,
)
return resp.choices[0].message.content
# ── 主流程 ─────────────────────────────────────────────
if __name__ == "__main__":
print(f"📂 扫描仓库: {REPO_PATH}")
files = collect_files(REPO_PATH)
print(f"📄 找到 {len(files)} 个源文件")
prompt = build_prompt(files)
print(f"📝 Prompt 长度: {len(prompt):,} 字符,开始审查...")
report = review(prompt)
Path(OUTPUT_FILE).write_text(report, encoding="utf-8")
print(f"✅ 报告已保存到 {OUTPUT_FILE}")
使用方法
# 安装依赖
pip install openai
# 设置 API Key(用无量Api 的 key)
export OPENAI_API_KEY="sk-xxxx"
# 审查当前目录
python repo_review.py .
# 审查指定项目
python repo_review.py ~/projects/my-app
跑完会在当前目录生成 review_report.md,直接用 Typora 或 VS Code 打开就能看。
几个实用改进方向
只审查 git diff(适合 PR 场景):
import subprocess
diff = subprocess.check_output(
["git", "diff", "main...HEAD"], text=True
)
# 把 diff 内容替换 prompt 里的文件内容
并发审查多个模块(大型 monorepo):
from concurrent.futures import ThreadPoolExecutor
modules = ["src/auth", "src/api", "src/db"]
with ThreadPoolExecutor(max_workers=3) as ex:
results = list(ex.map(lambda m: review(build_prompt(collect_files(m))), modules))
接入 CI/CD:把脚本加到 GitHub Actions,每次 PR 自动生成审查报告,评论到 PR 里。
关于费用
Claude Opus 4 官方价格是 $15 / 1M input tokens。一个中型项目跑一次大概消耗 50K-100K tokens,算下来每次审查 $0.75-$1.5。
如果用 无量Api,同样的模型便宜约 65%,SVIP 还有 7.7 折。base_url 换一行,key 换一下,其他代码完全不用动——因为接口格式和 OpenAI 完全兼容。国内用户还有个额外好处:直连不需要代理,延迟更稳定。注册就送 ¥1 余额,先试试再说。
小结
核心逻辑就三步:收集文件 → 拼 prompt → 调 API。真正花时间的是调 system prompt,让模型输出你想要的格式。上面给的 prompt 经过几轮迭代,输出的表格基本不需要再整理。
有问题或者跑出来结果不对的,评论区说一下,我看到都会回。觉得有用的话点个赞,后续还会写「让 AI 自动写单测」和「用 Claude 做架构图生成」。