使用 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 个月,仅作技术方案记录。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐