技术教程 · 阅读约 7 分钟

用 30 行 Python 让 AI 帮你审完整个代码仓库(含真实可跑代码)

用 30 行 Python 让 AI 帮你审完整个代码仓库(含真实可跑代码)

大多数人用 AI 审代码的方式是:复制一个文件,粘贴进对话框,等回复,再复制下一个。

这样做效率极低,而且 AI 根本看不到文件之间的依赖关系。

今天换一种做法——写一个脚本,自动遍历整个 repo,批量送给模型审查,把所有问题汇总成一份报告。全程不用开浏览器,不用复制粘贴。


思路

1. 递归扫描项目目录,收集所有源码文件

2. 按文件逐一调用 Chat Completions API,让模型针对每个文件给出问题列表

3. 最后汇总,输出一份 Markdown 格式的审查报告

用 OpenAI 格式的 API 就够了,模型随便换。


完整代码


#!/usr/bin/env python3

"""

repo_review.py — 自动审查整个代码仓库

用法: python repo_review.py ./your-project

"""



import os

import sys

from pathlib import Path

from openai import OpenAI



# ✅ 换一行 base_url 就能用无量 Api,价格比官方便宜约 60%

client = OpenAI(

    api_key=os.environ.get("API_KEY", "your-api-key-here"),

    base_url="https://api2everything.xyz/v1",

)



# 要审查的文件类型

INCLUDE_EXTENSIONS = {".py", ".js", ".ts", ".go", ".java", ".cpp", ".c", ".rs"}

# 跳过的目录

SKIP_DIRS = {"node_modules", ".git", "__pycache__", ".venv", "dist", "build"}



REVIEW_PROMPT = """你是一名资深代码审查工程师。请审查以下代码,重点关注:

1. 潜在的 bug 或逻辑错误

2. 安全漏洞(SQL 注入、XSS、硬编码密钥等)

3. 性能问题

4. 不符合最佳实践的写法



请用简洁的列表格式输出,每条问题注明行号(如有)。如果代码没有明显问题,回复"✅ 未发现明显问题"。

不需要给出修复建议,只需列出问题。"""





def collect_files(root: str) -> list[Path]:

    """收集所有需要审查的源码文件"""

    files = []

    for path in Path(root).rglob("*"):

        if any(skip in path.parts for skip in SKIP_DIRS):

            continue

        if path.is_file() and path.suffix in INCLUDE_EXTENSIONS:

            files.append(path)

    return sorted(files)





def review_file(file_path: Path, model: str = "gpt-4.1-mini") -> str:

    """调用 API 审查单个文件"""

    code = file_path.read_text(encoding="utf-8", errors="ignore")

    if len(code.strip()) < 10:

        return "(文件为空,跳过)"



    # 超长文件截断,避免超出 context

    if len(code) > 12000:

        code = code[:12000] + "\n\n... [文件过长,已截断]"



    response = client.chat.completions.create(

        model=model,

        messages=[

            {"role": "system", "content": REVIEW_PROMPT},

            {"role": "user", "content": f"文件路径: {file_path}\n\n```\n{code}\n```"},

        ],

        temperature=0.2,

        max_tokens=1024,

    )

    return response.choices[0].message.content.strip()





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"# 代码审查报告\n\n项目: `{Path(root).resolve()}`\n"]



    for i, f in enumerate(files, 1):

        rel = f.relative_to(root)

        print(f"[{i}/{len(files)}] 审查: {rel}")

        result = review_file(f)

        report_lines.append(f"## `{rel}`\n\n{result}\n")



    report = "\n".join(report_lines)

    output_path = Path("review_report.md")

    output_path.write_text(report, encoding="utf-8")

    print(f"\n✅ 完成!报告已保存到 {output_path}")





if __name__ == "__main__":

    main()


跑起来只需三步


# 1. 安装依赖

pip install openai



# 2. 设置 API Key(在无量 Api 注册后获取,新用户送 ¥1 余额)

export API_KEY="your-api-key"



# 3. 对你的项目跑一遍

python repo_review.py ./your-project

输出的 review_report.md 长这样:


# 代码审查报告



## `src/auth.py`



- 第 42 行:password 以明文存储在日志中,存在信息泄露风险

- 第 67 行:使用了 MD5 做密码哈希,建议替换为 bcrypt



## `src/db.py`



✅ 未发现明显问题


几个实用调整

换更强的模型:把 model="gpt-4.1-mini" 改成 "claude-sonnet-4-5" 或 "gemini-2.5-pro",无量 Api 支持 300+ 模型,同一个 key 直接切换,不用重新注册。

只审查改动的文件:


# 只审查本次 git diff 涉及的文件

git diff --name-only HEAD | xargs python repo_review.py

并发加速:文件多的时候可以用 concurrent.futures.ThreadPoolExecutor 并发请求,速度能快 5-10 倍,代码改动不超过 10 行。


关于费用

跑一个中型项目(50 个文件,每文件平均 200 行),用 gpt-4.1-mini 大概消耗 15 万 tokens,官方价格约 ¥1.5,通过无量 Api 大概 ¥0.5 出头。如果用更便宜的模型做初筛、再用强模型复核可疑文件,成本还能再压一半。

新用户注册就送 ¥1 余额,跑几次审查完全够用,感受一下再决定要不要充值。


这个脚本我自己在用,跑了十几个开源项目,发现过不少"看起来没问题但实际有坑"的代码。你有大型 repo 想跑的话,把文件数量和模型选择问题扔评论区,我帮你估个成本。

觉得有用的话点个赞,后续还有更多 API 自动化的实战内容。


无量 Api — 国内直连 OpenAI / Claude / Gemini / DeepSeek 等 300+ 模型,比官方便宜约 65%,注册送 ¥1
👉 https://api2everything.xyz/?utm_source=zhihu&utm_medium=article&utm_campaign=daily&aff=wqUb