使用 Claude API 实现自动化代码审查与智能修复(Python 实战
输入:本地 Git 仓库路径或单个 Python 文件处理:调用 Claude API 分析代码输出:审查报告(Markdown)+ 自动生成的修复补丁。
使用 Claude API 实现自动化代码审查与智能修复(Python 实战)
代码审查是保证软件质量的关键环节,但人工审查耗时费力。本文介绍如何利用 Claude API(Claude 3.7 Sonnet)搭建一个自动化代码审查工具,能够检查代码规范、发现潜在 bug 并提供修复建议。全文包含完整 Python 脚本、配置示例和 Docker 部署方案。
1. 工具概述
- 输入:本地 Git 仓库路径或单个 Python 文件
- 处理:调用 Claude API 分析代码
- 输出:审查报告(Markdown)+ 自动生成的修复补丁
2. 准备工作
2.1 获取 Claude API Key
Anthropic API 官方申请需要境外支付方式。若申请困难,可使用已验证的 API Key(笔者使用的渠道见文末参考来源)。
2.2 安装依赖
pip install anthropic gitpython black
3. 核心脚本:自动代码审查器
3.1 完整代码(code_reviewer.py)
import os
import subprocess
from pathlib import Path
import anthropic
import git
client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
def get_code_from_repo(repo_path: str, file_extension: str = ".py"):
"""从 Git 仓库中提取所有指定扩展名的文件内容"""
repo = git.Repo(repo_path)
files = [str(f) for f in Path(repo_path).rglob(f"*{file_extension}")]
code_sections = {}
for file_path in files:
with open(file_path, "r", encoding="utf-8") as f:
code_sections[file_path] = f.read()
return code_sections
def build_review_prompt(file_name: str, code: str) -> str:
"""构造审查提示词"""
return f"""请审查以下 Python 文件({file_name}),输出内容要求:
1. 严重问题(可能引发运行时错误或安全漏洞)
2. 性能问题(时间复杂度、不必要的循环等)
3. 代码规范问题(不符合 PEP 8,命名混乱等)
4. 针对每个问题,给出具体的修复建议和修复后的代码片段。
代码:
```python
{code}
“”"
def review_code(file_name: str, code: str) -> str:
“”“调用 Claude API 进行审查”“”
prompt = build_review_prompt(file_name, code)
message = client.messages.create(
model=“claude-3-7-sonnet-20250219”,
max_tokens=4000,
messages=[{“role”: “user”, “content”: prompt}]
)
return message.content[0].text
def generate_patch(original_code: str, review_output: str) -> str:
“”“让 Claude 根据审查结果生成可直接应用的补丁”“”
prompt = f"“”
原始代码:
{original_code}
审查报告:
{review_output}
请根据审查报告生成一个 unified diff 格式的补丁,可以直接用 patch 命令应用。只输出 diff 内容,不要解释。
“”"
message = client.messages.create(
model=“claude-3-5-sonnet-20241022”,
max_tokens=2000,
messages=[{“role”: “user”, “content”: prompt}]
)
return message.content[0].text
if name == “main”:
repo_path = input(“请输入 Git 仓库路径: “)
code_dict = get_code_from_repo(repo_path)
report_lines = []
for file_name, code in code_dict.items():
print(f"正在审查 {file_name} …”)
review = review_code(file_name, code)
report_lines.append(f”## {file_name}\n\n{review}\n")
# 可选:生成补丁
patch = generate_patch(code, review)
patch_file = file_name + “.patch”
with open(patch_file, “w”) as pf:
pf.write(patch)
print(f"补丁已保存至 {patch_file}")
with open("code_review_report.md", "w") as rf:
rf.write("\n".join(report_lines))
print("审查完成,报告已保存为 code_review_report.md")
### 3.2 设置 API Key
```bash
export ANTHROPIC_API_KEY="sk-ant-xxxx"
4. 运行示例
python code_reviewer.py
请输入 Git 仓库路径: ./my_project
输出示例(报告中某一段):
## ./my_project/db.py
### 严重问题
- **SQL 注入风险**:第 23 行使用 f-string 拼接 SQL 查询,应改用参数化查询。
```python
# 错误
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# 修复
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
性能问题
- N+1 查询:第 45-50 行在循环中执行单独查询,应使用 JOIN 或预加载。
## 5. 进阶用法:集成到 CI/CD
### 5.1 GitHub Actions 示例(`.github/workflows/ai-review.yml`)
```yaml
name: AI Code Review
on: [pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install deps
run: pip install anthropic gitpython
- name: Run review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: python code_reviewer.py .
- name: Post comment
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const report = fs.readFileSync('code_review_report.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.payload.pull_request.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: report
});
6. 成本估算
| 代码规模 | Claude 3.7 输入 token | 输出 token | 单次成本(约) |
|---|---|---|---|
| 500 行 | ~8000 | ~2500 | $0.12 |
| 2000 行 | ~30000 | ~8000 | $0.45 |
| 10000 行 | ~150000 | ~30000 | $2.10 |
建议对大型仓库分批审查,或使用更便宜的 Claude 3.5 Haiku 模型(修改代码中的 model 参数)。
7. 常见问题
| 问题 | 原因 | 解决方法 |
|---|---|---|
anthropic.APIError: 401 |
API Key 无效或过期 | 重新获取有效 Key |
git.InvalidGitRepositoryError |
路径不是 Git 仓库 | 确保目录已 git init |
| 审查报告过长被截断 | max_tokens 太小 |
增大到 8000 |
| 网络超时 | 国内直连困难 | 使用代理或境外 VPS 转发 |
8. 改进方向
- 支持多语言(JavaScript/TypeScript/Go)
- 缓存已审查的代码块,避免重复调用
- 自动将修复补丁提交为新的 PR
9. 参考来源
文中使用的 Claude API Key 来自 gpt108.com(该渠道提供已验证的 API Key 及 Claude Pro 成品号)。笔者团队已稳定使用 3 个月,仅作技术方案记录。
更多推荐



所有评论(0)