如何使用 Codex 进行代码审查 (2026)
使用 OpenAI Codex 自动化代码审查,实现更快速、更一致的反馈
开始使用 Hypereal 构建
通过单个 API 访问 Kling、Flux、Sora、Veo 等。免费积分开始,扩展到数百万。
无需信用卡 • 10万+ 开发者 • 企业级服务
如何使用 Codex 进行代码审查 (2026)
代码审查至关重要,但非常耗时。典型的工程团队会将 15-25% 的开发时间花在审查 Pull Request 上。OpenAI 的 Codex 可以自动完成代码审查中重复的部分——捕捉 Bug、强制执行风格规范、识别安全问题——从而让开发人员能够专注于架构和设计决策。
本指南将向你展示如何使用 OpenAI Codex 设置自动化代码审查,涵盖从简单的 API 调用到完整的 CI/CD 集成。
Codex 可以(以及不可以)审查什么
在设置自动化审查之前,需了解 AI 代码审查擅长什么以及在哪方面有所欠缺:
| Codex 优势 | 仍需人工介入 |
|---|---|
| Bug 检测(空引用、差一错误、竞态条件) | 业务逻辑正确性 |
| 安全漏洞扫描 | 架构决策 |
| 风格和命名规范强制执行 | 产品需求对齐 |
| 性能问题识别 | 团队背景和历史偏好 |
| 错误处理完整性 | 组织标准 |
| 死代码和未使用的导入 | 优先级和权衡 |
| 类型安全问题 | UX 和可访问性判断 |
最佳实践是将 Codex 作为第一轮审查者来捕捉机械性问题,由人工审查者处理更高层面的关注点。
方法 1:直接通过 API 进行代码审查
最简单的方法是将代码 Diff 发送到 Codex API 并获取结构化反馈。
环境准备
pip install openai
基础代码审查脚本
from openai import OpenAI
client = OpenAI(api_key="sk-your-api-key")
def review_code(diff: str, context: str = "") -> str:
"""将代码 diff 发送至 Codex 进行审查。"""
response = client.chat.completions.create(
model="gpt-5.1-codex",
messages=[
{
"role": "system",
"content": """你是一位资深代码审查员。请审查提供的
git diff 并提供可操作的反馈。
对于发现的每个问题,请提供:
1. 文件名和行号
2. 严重程度 (critical, warning, suggestion)
3. 问题描述
4. 带有代码的改进建议
重点关注:
- Bug 和逻辑错误
- 安全漏洞
- 性能问题
- 错误处理缺失
- 类型安全问题
不要评论:
- 微小的格式问题(留给 Linter 处理)
- 主观的风格偏好
- 看起来是有意为之且正确的更改
如果代码看起来不错,请简要说明。不要捏造问题。"""
},
{
"role": "user",
"content": f"项目上下文:\n{context}\n\n待审查的 Diff:\n{diff}"
}
],
max_completion_tokens=4096
)
return response.choices[0].message.content
# 示例指南
diff = """
diff --git a/src/auth.py b/src/auth.py
@@ -45,6 +45,15 @@ def authenticate(request):
+def reset_password(email):
+ user = db.query("SELECT * FROM users WHERE email = '" + email + "'")
+ if user:
+ token = generate_token()
+ send_email(email, token)
+ return {"status": "ok"}
+ return {"status": "ok"} # 不要泄露邮箱是否存在
"""
print(review_code(diff))
输出将识别出 SQL 注入漏洞,建议使用参数化查询,并指出其他可能的代码问题。
结构化 JSON 输出
为了进行程序化处理,可以请求结构化输出:
from pydantic import BaseModel
class ReviewIssue(BaseModel):
file: str
line: int
severity: str # critical, warning, suggestion
category: str # bug, security, performance, style
description: str
suggested_fix: str
class CodeReview(BaseModel):
issues: list[ReviewIssue]
summary: str
approval: str # approve, request_changes, comment
def review_code_structured(diff: str) -> CodeReview:
response = client.beta.chat.completions.parse(
model="gpt-5.1-codex",
messages=[
{
"role": "system",
"content": "审查代码 diff。返回结构化反馈。"
},
{
"role": "user",
"content": diff
}
],
response_format=CodeReview
)
return response.choices[0].message.parsed
方法 2:GitHub Actions 集成
通过 GitHub Actions 工作流为每个 Pull Request 自动化代码审查。
工作流文件
创建 .github/workflows/ai-code-review.yml:
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
permissions:
pull-requests: write
contents: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get PR diff
id: diff
run: |
git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install dependencies
run: pip install openai PyGithub
- name: Run AI Code Review
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: python .github/scripts/ai_review.py
审查脚本
创建 .github/scripts/ai_review.py:
import os
import json
from openai import OpenAI
from github import Github
def main():
# 读取 diff
with open("/tmp/pr.diff", "r") as f:
diff = f.read()
# 如果 diff 过大则跳过(粗略估计 >100K tokens)
if len(diff) > 400000:
print("Diff 太大,无法进行 AI 审查,已跳过")
return
# 获取 AI 审查结果
client = OpenAI()
response = client.chat.completions.create(
model="gpt-5.1-codex",
messages=[
{
"role": "system",
"content": """审查此 PR diff。对于每个问题,请提供:
- 文件路径和行号
- 严重程度:critical/warning/suggestion
- 清晰的描述
- 改进建议
以 JSON 格式返回:{"issues": [...], "summary": "..."}
保持简洁。仅标记真实存在的问题。"""
},
{"role": "user", "content": diff}
],
response_format={"type": "json_object"},
max_completion_tokens=4096
)
review = json.loads(response.choices[0].message.content)
# 发布到 GitHub PR
gh = Github(os.environ["GITHUB_TOKEN"])
repo = gh.get_repo(os.environ["GITHUB_REPOSITORY"])
pr = repo.get_pull(int(os.environ["PR_NUMBER"]))
# 发布总结评论
body = f"## AI 代码审查\n\n{review['summary']}\n\n"
if review["issues"]:
body += "### 发现的问题\n\n"
for issue in review["issues"]:
emoji = {"critical": "🔴", "warning": "🟡", "suggestion": "🔵"}
sev = emoji.get(issue["severity"], "⚪")
body += f"{sev} **{issue['severity'].upper()}** - `{issue['file']}:{issue['line']}`\n"
body += f" {issue['description']}\n\n"
else:
body += "未发现问题。代码看起来不错。\n"
body += "\n---\n*由 Codex 提供的自动化审查*"
pr.create_issue_comment(body)
if __name__ == "__main__":
main()
方法 3:自定义审查规则
定义 Codex 强制执行的项目特定审查规则:
REVIEW_RULES = """
项目特定的审查规则:
1. 安全性
- 所有 SQL 查询必须使用参数化查询
- 用户输入在处理前必须通过 Zod Schema 验证
- API 端点必须检查身份验证和授权
- 严禁硬编码机密信息 (Secrets)
2. 错误处理
- 所有异步函数必须包含 try/catch 块
- HTTP 错误必须返回正确的状态码和错误信息
- 数据库错误必须被捕获,且不能泄露内部细节
3. 性能
- 不允许在循环中进行数据库查询(使用批量查询)
- 大数组必须使用分页
- API 响应必须定义类型,且不返回完整的数据库对象
4. 规范
- React 组件使用带有 Hooks 的函数式组件
- API 路由遵循 REST 规范
- 文件命名:文件使用 kebab-case,组件使用 PascalCase
- 所有导出的函数必须包含 JSDoc 注释
"""
def review_with_rules(diff: str) -> str:
response = client.chat.completions.create(
model="gpt-5.1-codex",
messages=[
{
"role": "system",
"content": f"根据以下规则审查代码:\n{REVIEW_RULES}\n\n"
"仅标记违反这些特定规则的行为。"
"在每条发现中包含规则编号。"
},
{"role": "user", "content": diff}
],
max_completion_tokens=4096
)
return response.choices[0].message.content
方法 4:Cursor 中的交互式审查
你可以直接在 Cursor 内部使用 Codex 进行代码审查:
- 打开你想审查的文件或 Diff
- 全选代码(整个文件按
Cmd+A) - 按
Cmd+L打开聊天框 - 使用审查提示词:
审查这段代码的 Bug、安全问题和性能问题。
请明确行号并为每个问题提供修复方案。
专注于真实的问题,而不是风格上的挑剔。
对于 PR 审查,在 Cursor 的终端中使用:
git diff main...HEAD | pbcopy
然后将 Diff 粘贴到 Cursor 的聊天框中并请求审查。
成本管理
AI 代码审查的成本因 PR 大小而异:
| PR 大小 | 大约 Token 数 | 成本 (Codex) | 成本 (GPT-5.1) |
|---|---|---|---|
| 小型 (<100 行) | ~5K 输入, ~1K 输出 | ~$0.07 | ~$0.05 |
| 中型 (100-500 行) | ~20K 输入, ~2K 输出 | ~$0.22 | ~$0.15 |
| 大型 (500-2000 行) | ~80K 输入, ~4K 输出 | ~$0.76 | ~$0.52 |
| 超大型 (2000+) | ~200K 输入, ~8K 输出 | ~$2.08 | ~$1.48 |
对于一个每周有 20 个中等大小 PR 的团队,预计支出约 $20/周或 ~$80/月。这比节省下来的工程师工时费用要便宜得多。
成本优化技巧
- 对审查任务使用 GPT-5.1 而非 Codex Max。标准的 Codex 已足以胜任审查任务。
- 审查前过滤文件。跳过自动生成的文件、lock 文件和资源文件。
- 缓存审查结果。仅对上次推送后发生更改的文件进行重新审查。
- 设置 Token 限制。将输出限制在 4096 token 内——审查应当简洁扼要。
对比:AI 代码审查工具
| 工具 | 模型 | 集成方式 | 定价 | 最适合 |
|---|---|---|---|---|
| OpenAI Codex (DIY) | GPT-5.1 Codex | 自定义 | 约 $0.20/次审查 | 完全控制 |
| GitHub Copilot Review | 基于 GPT | 原生 GitHub | 包含在 Copilot Enterprise 中 | GitHub 团队 |
| CodeRabbit | 多模型 | GitHub/GitLab | $15/用户/月 | 自动化 PR 审查 |
| Sourcery | 自定义 | GitHub/IDE | 提供免费版 | Python 团队 |
| Cursor (手动) | 多模型 | 编辑器 | Cursor 订阅 | 个人开发者 |
常见问题
AI 可以取代人工代码审查员吗? 不可以。AI 能有效地发现机械性问题,但无法评估业务逻辑、架构决策或团队背景。请将其作为第一轮筛查工具,而非替代品。
向 OpenAI API 发送私有代码安全吗? 默认情况下,OpenAI 的 API 不会使用你的数据进行训练(根据其数据使用政策)。对于敏感代码,请审阅 OpenAI 的数据处理条款,或使用带有企业数据协议的 Azure OpenAI。
AI 代码审查有多准确? Codex 捕获真实 Bug 的概率约为 70-85%。它偶尔会标记误报(约占发现结果的 10-15%)。请将发现结果视为建议,而非绝对规则。
我应该根据 AI 审查结果拦截 PR 吗? 仅针对严重等级(安全漏洞、显而易见的 Bug)的发现进行拦截。警告和建议应作为参考信息,而非阻断条件。
总结
使用 Codex 进行自动化代码审查是防范 Bug、安全问题和代码质量问题的实用且经济的第一道防线。无论你是通过 GitHub Actions 将其集成到 CI/CD 流水中,还是通过 Cursor 手动使用,机械性审查任务节省的时间都会在团队中迅速产生复利效应。
对于正在构建 AI 应用且需要图像生成、视频创建或数字人 API 的团队,Hypereal AI 提供开发者友好的 API 和透明的定价。立即免费注册开始使用。
