30 行 Python 让 AI 自动修复 Codex Bug,我再也不用盯着报错信息发呆了
30 行 Python 让 AI 自动修复 Codex Bug,我再也不用盯着报错信息发呆了
你有没有遇到过这种情况:让 Codex 写了一段代码,跑起来报错,把错误贴给它让它修,修完又报新的错,来回几轮之后你已经不知道到底是代码的问题还是自己的问题。
V2EX 上有人忍无可忍,写了个自动修 Codex bug 的小工具。思路其实很简单:把「运行 → 报错 → 让 AI 修」这个循环自动化,人只管喝茶。
这篇文章就照着这个思路,从零写一个可以直接用的版本,完整代码不超过 80 行。
核心思路
整个流程就三步,用一个 while 循环串起来:
运行代码 → 捕获 stderr → 把错误 + 代码发给 AI → 拿回修复后的代码 → 写回文件 → 再跑一次
终止条件:运行成功(returncode == 0),或者重试次数超过上限(防止死循环)。
AI 拿到的上下文是:当前完整代码 + 报错信息。这比单独贴错误信息效果好得多,模型能看到是哪一行出的问题,修复成功率明显更高。
完整代码
import subprocess
import sys
import os
from openai import OpenAI
# 用无量 API,国内直连,比官方便宜 60%+
client = OpenAI(
api_key=os.environ.get("WULIANG_API_KEY"),
base_url="https://api2everything.xyz/v1"
)
MODEL = "gpt-4.1" # 换成 claude-sonnet-4-5 也行
MAX_RETRIES = 5
TARGET_FILE = sys.argv[1] if len(sys.argv) > 1 else "target.py"
def run_script(filepath: str) -> tuple[int, str]:
"""运行脚本,返回 (returncode, stderr)"""
result = subprocess.run(
[sys.executable, filepath],
capture_output=True,
text=True,
timeout=30
)
return result.returncode, result.stderr + result.stdout
def ask_ai_to_fix(code: str, error: str) -> str:
"""把代码和报错发给 AI,拿回修复后的完整代码"""
prompt = f"""下面是一段 Python 代码,运行后报错了。
请直接返回修复后的完整代码,不要加任何解释,不要用 markdown 代码块包裹。
=== 当前代码 ===
{code}
=== 报错信息 ===
{error}
修复后的完整代码:"""
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.2 # 修 bug 场景要稳,temperature 调低
)
return response.choices[0].message.content.strip()
def auto_fix_loop(filepath: str):
print(f"🔍 目标文件: {filepath}")
for attempt in range(1, MAX_RETRIES + 1):
returncode, output = run_script(filepath)
if returncode == 0:
print(f"✅ 第 {attempt} 次运行成功!")
return
print(f"❌ 第 {attempt} 次失败,正在让 AI 修复...")
print(f" 错误摘要: {output[:200]}")
with open(filepath, "r", encoding="utf-8") as f:
current_code = f.read()
fixed_code = ask_ai_to_fix(current_code, output)
# 写回文件前先备份
backup_path = f"{filepath}.bak{attempt}"
with open(backup_path, "w", encoding="utf-8") as f:
f.write(current_code)
with open(filepath, "w", encoding="utf-8") as f:
f.write(fixed_code)
print(f" 已备份原文件到 {backup_path},写入修复版本")
print(f"⚠️ 已重试 {MAX_RETRIES} 次,仍未成功,请人工介入")
if __name__ == "__main__":
auto_fix_loop(TARGET_FILE)
怎么用
1. 安装依赖
pip install openai
2. 设置 API Key
去 api2everything.xyz 注册,新用户送 ¥1 余额直接能用,拿到 key 之后:
export WULIANG_API_KEY="sk-xxxx"
3. 跑起来
假设你有一个有 bug 的脚本 messy.py:
python auto_fix.py messy.py
输出大概长这样:
🔍 目标文件: messy.py
❌ 第 1 次失败,正在让 AI 修复...
错误摘要: NameError: name 'pd' is not defined ...
已备份原文件到 messy.py.bak1,写入修复版本
✅ 第 2 次运行成功!
几个值得注意的细节
temperature 设低一点。修 bug 不是创作,你要的是稳定可预期的输出,0.1 ~ 0.2 就够了。调高了 AI 可能给你"创意性"地重写整个逻辑。
备份很重要。AI 修复有时候会过度修改,把原本没问题的逻辑也动了。备份文件让你随时可以回退,.bak1 .bak2 按轮次存,出了问题一眼看清每次改了什么。
上下文给完整的,别只贴 stderr。stdout 里可能有你自己加的 print 调试信息,这些上下文对 AI 判断问题根因很有帮助。
超时保护不能省。如果你的脚本里有死循环,没有 timeout=30 这个工具就会一直卡在那里。
升级方向
如果觉得这个版本够用了可以就这样,如果想继续玩:
- 换模型:把
MODEL改成claude-sonnet-4-5,Claude 在理解代码逻辑方面有时候比 GPT 更准,而且无量 API 上两个都能用,一行切换 - 加 diff 输出:每次修复后用
difflib打印改了哪里,一目了然 - 支持多文件项目:把整个项目目录的文件拼进 prompt,适合修跨文件的引用错误
- 接入 CI:在 GitHub Actions 里跑,自动修 PR 里的测试失败
关于 API 费用
这个工具每次修复大概消耗 1000~3000 token(取决于代码长度),用 gpt-4.1 的话一次修复费用在 ¥0.01 左右,跑个 5 轮也就几分钱。
我自己在用 无量 API,国内直连不用梯子,OpenAI / Claude / Gemini / DeepSeek 300+ 模型都在一个 key 里,只改 base_url 就能切换,比官方便宜 65%,余额永久不过期。新用户注册送 ¥1,够你把今天这个工具跑好几百次。
你用 Codex 或者 Claude Code 写代码时遇到过什么奇葩 bug?欢迎评论区说说,顺手点个赞让更多人看到这个工具。