用 OpenAI Codex CLI 做代码审查,30 行脚本搞定整个 repo
用 OpenAI Codex CLI 做代码审查,30 行脚本搞定整个 repo
很多人用 Codex 还停留在「问一问、改一改」的阶段。但其实 Codex 真正厉害的地方,是可以批量跑——把整个项目喂进去,让它系统性地找 bug、发现安全漏洞、输出改进建议。
而且最近 Codex 送重置次数了,这个时间点正好来聊聊怎么把它的能力榨干。
痛点:手动 code review 有多累
你提了一个 PR,reviewer 要花 1-2 小时逐行看,还不一定能发现所有问题。更别说历史代码——那些「先跑起来再说」留下来的技术债,根本没人有时间系统清理。
AI review 不是来替代人的,而是在人工 review 之前先跑一遍,把明显的问题过滤掉,让 reviewer 把精力花在架构和业务逻辑上。
思路
1. 遍历指定目录下的所有代码文件
2. 每个文件单独送给模型,附上定制的 review prompt
3. 汇总输出到一个 Markdown 报告
模型用 gpt-4.1 或 claude-sonnet-4-5 都行,取决于你的预算和偏好。
完整代码(Python,约 80 行)
#!/usr/bin/env python3
"""
repo_review.py - 用 AI 批量审查代码仓库
依赖: pip install openai
"""
import os
import sys
from pathlib import Path
from openai import OpenAI
# ── 配置区 ────────────────────────────────────────────
BASE_URL = "https://api2everything.xyz/v1"
API_KEY = os.environ.get("OPENAI_API_KEY", "your-key-here")
MODEL = "gpt-4.1" # 也可换成 claude-sonnet-4-5
MAX_TOKENS = 1024
EXTENSIONS = {".py", ".ts", ".js", ".go", ".java", ".rs"}
SKIP_DIRS = {"node_modules", ".git", "__pycache__", "dist", "build"}
# ──────────────────────────────────────────────────────
client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
REVIEW_PROMPT = """你是一位资深工程师,正在做代码 review。
请针对以下代码,按照这个格式给出反馈:
### 🐛 潜在 Bug
(列出逻辑错误、边界条件缺失等)
### 🔒 安全风险
(SQL 注入、未转义输入、硬编码密钥等)
### ⚡ 性能问题
(不必要的循环、重复 IO、内存泄漏风险等)
### 💡 改进建议
(可读性、命名、结构优化等,限 3 条以内)
如果这段代码没有明显问题,直接回复 `✅ 无明显问题`,不要凑字数。
文件名:{filename}
{code}
def collect_files(root: str) -> list[Path]:
result = []
for path in Path(root).rglob("*"):
if any(skip in path.parts for skip in SKIP_DIRS):
continue
if path.suffix in EXTENSIONS and path.is_file():
result.append(path)
return sorted(result)
def review_file(filepath: Path) -> str:
try:
code = filepath.read_text(encoding="utf-8", errors="ignore")
except Exception as e:
return f"读取失败: {e}"
# 超长文件只取前 300 行,避免超出 context
lines = code.splitlines()
if len(lines) > 300:
code = "\n".join(lines[:300]) + "\n\n# ... (文件过长,已截断)"
prompt = REVIEW_PROMPT.format(filename=filepath.name, code=code)
try:
resp = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
max_tokens=MAX_TOKENS,
temperature=0.2,
)
return resp.choices[0].message.content.strip()
except Exception as e:
return f"API 调用失败: {e}"
def main():
root = sys.argv[1] if len(sys.argv) > 1 else "."
files = collect_files(root)
if not files:
print("没有找到可审查的代码文件")
return
print(f"找到 {len(files)} 个文件,开始审查...\n")
report_lines = [f"# Code Review 报告\n\n扫描路径:`{root}`\n\n---\n"]
for i, filepath in enumerate(files, 1):
rel = filepath.relative_to(root)
print(f"[{i}/{len(files)}] 审查 {rel} ...", end=" ", flush=True)
result = review_file(filepath)
skipped = result.strip().startswith("✅")
print("跳过" if skipped else "完成")
if not skipped:
report_lines.append(f"## `{rel}`\n\n{result}\n\n---\n")
report_path = Path("review_report.md")
report_path.write_text("\n".join(report_lines), encoding="utf-8")
print(f"\n✅ 审查完成,报告已写入 {report_path}")
if __name__ == "__main__":
main()
跑起来
# 设置 key(无量Api 的 key 直接用)
export OPENAI_API_KEY=sk-xxxx
# 审查当前目录
python repo_review.py .
# 审查指定目录
python repo_review.py ./src
输出是一个 review_report.md,只包含有问题的文件,没问题的自动跳过,不会产生噪音。
几个实用调整
换成 Claude 做 review:把 MODEL 改成 claude-sonnet-4-5,对复杂逻辑的理解通常更细腻,但速度稍慢。
并发加速:文件多的时候可以用 ThreadPoolExecutor 并发跑,10 个 worker 大概能快 5-8 倍。
过滤级别:在 prompt 里加一句「只报告严重程度 High 以上的问题」,可以大幅减少输出噪音,适合接入 CI。
接入 pre-commit:把脚本改成只扫 git diff --name-only 的文件,每次提交前自动跑,几秒出结果。
关于 Codex 档位问题
V2EX 上有人在聊 Codex 用 gpt-4.5 的哪个档位性价比最高。实际上对于 review 这种任务,gpt-4.1 已经够用,准确率和 4.5 差距不大,价格便宜很多。如果你是通过官方 API 用,可以对比一下 token 单价,算下来差距挺明显的。
省钱 60% 的方案
上面代码里的 base_url 用的是 无量Api(api2everything.xyz),国内直连,不需要代理。支持 OpenAI / Claude / Gemini / DeepSeek 等 300+ 模型,比官方便宜 65%,SVIP 还有 7.7 折。
对于跑 repo review 这种批量任务,token 消耗不小,价格差就很明显了。注册送 ¥1,余额永久有效,可以先试试。
改接入点只需要一行:
client = OpenAI(api_key="你的key", base_url="https://api2everything.xyz/v1")
其他代码完全不用动。
你们目前用什么工具做 AI code review?有没有接入 CI 的经验?评论区聊聊,有问题也可以直接问。
觉得有用的话点个赞,下次继续写 AI 工程化的实战内容。