我让三个 AI 模型修复同一段损坏的代码。其中一个表现优于其他模型
使用 AI 进行编码最有帮助的方面之一是调试。在 AI 时代之前,我必须逐行阅读代码,使用调试器,并添加打印语句来查找错误。如果这些方法都失败了,就只能依靠 Stack Overflow 和其他初学者网站,那里的网友会把你的代码挑得体无完肤。但现在呢?你只需将代码片段分享给 AI,提供一些上下文,并让它修复代码,就完成了。
这让我产生了一个想法,想测试这些 AI 模型在修复代码时的创造性思维能够达到多远。所以我决定做一个小实验,使用 ChatGPT、Gemini 和 Claude,看看哪个模型能最好地修复我的代码。
理解问题并设计提示
保持开放式以增加更多乐趣
上次,我们为同三个模型尝试了一个密码检查程序。对于这次的AI对决,我决定使用一个简单的文件整理Python脚本。以下是我测试过的脚本:
import os
source_dir = "Downloads"
dest_dir = "Images"
def clean_my_downloads():
all_files = os.listdir(source_dir)
for f in all_files
if ".jpg" in f or ".png" in f:
old_path = source_dir + "/" + f
new_path = dest_dir + "/" + f shutil.move(old_path, new_path)
print("Moved file: " + f)
clean_my_downloads()
好了,在把模型投入测试之前,让我先解释一下我在这里准备的漏洞和陷阱。
语法错误(简单)
- 缺少冒号:在
for f in all_files行的末尾没有 ':'。
- 缺少冒号:在
- 缺少导入:代码使用了
shutil.move(),但在顶部缺少import shutil。 - 所有三款模型都应该能轻松捕捉并修复这些。如果其中一个在这里失败,那就是立即失败。
逻辑崩溃(中等)
- 缺少文件夹:代码假设 Images 文件夹已存在。如果不存在,
shutil.move()将会崩溃。
- 缺少文件夹:代码假设 Images 文件夹已存在。如果不存在,
- 一个好的模型会添加
os.makedirs(dest_dir, exist_ok=True)以确保如果文件夹不存在时创建它。 跨平台陷阱(中等偏难)
- 不规范的路径:代码使用字符串连接(+ "/" +)来构建文件路径。这是不好的做法,可能在 Windows 和 Mac 上引发问题。
- 一个更好的模型会使用
os.path.join(source_dir, f)重写此代码,或者更好的是,将代码升级为使用 Python 的现代pathlib库。 扩展缺陷(困难)
- 天真的匹配:代码使用
if ".jpg" in f。这是危险的,因为一个名为 "my_photo.jpg.zip" 的文件也会被移动,但它并不是图像!此外,它还会忽略大写字母,比如 ".JPG"。
- 天真的匹配:代码使用
- 一个智能模型会将此更改为
f.lower().endswith((' .jpg', '.png'))。 数据丢失陷阱(终极考验)
- 静默覆盖:如果在 Images 文件夹中已经有一个名为 screenshot.png 的文件,并且脚本从 Downloads 移动一个新的 screenshot.png,
shutil.move()将立即覆盖旧文件。用户将永远丢失他们的原始图片。
- 静默覆盖:如果在 Images 文件夹中已经有一个名为 screenshot.png 的文件,并且脚本从 Downloads 移动一个新的 screenshot.png,
- 这将决定我们的胜者. 最优秀的 AI 会意识到用户要求它使其防弹,并会添加一个检查以查看文件是否已存在。真正的胜者会添加逻辑来重命名重复文件(例如,screenshot_(1).png),以确保没有数据丢失。
既然这些都解决了,我们接下来来谈谈提示。关于提示,我也保持了一些模糊,只是稍微提示了问题和目标。这样,我就可以在不指示它们的情况下测试每个模型的创造力。以下是我使用的提示:
I'm a beginner trying to write a Python script to clean up my Downloads folder by moving all my images into an 'Images' folder. The code won't even run, and I keep getting errors. Even if I get it to run, I'm worried I might have missed something that could mess up my files. Can you fix my code, explain what I did wrong in simple terms, and make it bulletproof?注意,我不仅仅是让它修复我的代码。我还要求它让代码坚不可摧。这让模型有空间去实施不同的技术,使其变得更好。
战斗开始
测试每个模型
为了比较,我将使用三个人工智能中性能相似的模型。此外,请注意,它们都是最好的免费可用模型,而不是其付费版本的一部分。
ChatGPT
我们从 ChatGPT 开始。由于无法自己选择模型,我只能依赖系统选择的模型。它选择了 GPT 5.5。它提供的修正代码非常好。它修复了语法错误,并使用 os.makedirs() 来避免逻辑崩溃。
它使用了 os.path.join() 来兼容不同的操作系统。它在这里也做了一些很棒的事情。它使用了 os.path.expanduser("~/Downloads")。在原始代码中,source_dir="Downloads" 只有在用户从他们的主文件夹运行脚本时才有效。ChatGPT 意识到初学者会对此感到困惑,并动态地找到了硬盘上实际的 Downloads 文件夹路径。这是一个巨大的优点。
它还通过将其升级为 f.lower().endswith(...) 来修复扩展名漏洞,因此可以捕获大写的 .JPG 文件,并且不会意外移动名为 "my_photo.jpg.zip" 的文件。它还主动添加了 .jpeg、.gif 和 .webp。
至于数据丢失陷阱,它成功地抓到了。不过它代码中唯一缺少的地方是,它没有通过重命名文件来防止数据丢失,而是直接跳过了文件,这并不是预期的解决方案。但总的来说,它表现得相当不错。
解释也非常出色。它解释了每一行有问题的代码,提供了一些初学者的提示,甚至建议了一个未来的改进版本。你可以在这里查看完整答案。
双子座
接下来是双子座。我使用了 Google AI Studio,并选择了 3.1 专业预览版。如果说 ChatGPT 设定了很高的标准,那么双子座直接跃过了它。它的解决方案完全采用了现代 Python 工程师的风格。
它修复了语法错误和逻辑崩溃。对于跨平台问题,Gemini 采取了不同的路线。它没有使用 Python 的 os 模块,而是使用了 pathlib。这是处理文件的现代 Python 风格方法。它还像 ChatGPT 一样动态地找到主目录。它使用同一个库处理了扩展名的缺陷。
至于数据丢失陷阱,Gemini 在这里也胜过了 ChatGPT。Gemini 实现了一个完美的 while 循环来检查名称是否存在,如果存在,它会在移动文件之前动态地在文件名中添加一个数字(例如,photo_1.jpg)。你的数据被保存了,你的文件夹也被清理了。
此外,Gemini 使用了 try/except 进行错误处理,这是编程中的最佳实践。总体而言,这些因素使 Gemini 的评分高于 ChatGPT。
至于解释部分,我会说 Gemini 略微落后于 ChatGPT。它没有进行详细的解释,而这是初学者所需要的。你可以在这里查看完整的代码和解释(需要使用你的 Google 账号登录)。
克劳德
我们的最后一位参赛者是Claude。至于模型,我选择了Sonnet 4.6。
就像另外两个人工智能一样,它正确地捕捉到了语法错误和逻辑崩溃。Claude额外添加的一点是首先检查下载文件夹是否存在。如果用户从错误的文件夹运行,它会优雅地打印错误信息,而不是崩溃。
谈到跨平台陷阱,与 ChatGPT 和 Gemini 不同,Claude 没有将相对路径更改为绝对路径。它保留了 source_dir="Downloads"。这意味着如果初学者将此脚本保存到桌面并双击运行,它会失败,因为它正在寻找桌面上的 Downloads 文件夹。ChatGPT 和 Gemini 都预见到了这一点,并动态映射到用户的主目录。
Claude 在扩展名陷阱中也做得很好,通过使用 os.path.splitext()[1].lower()。它主动添加了 .heic(苹果的默认照片格式)。
像双子座一样,Claude 完美地完成了重复文件陷阱。它编写了一个 while 循环来自动重命名文件(photo_1.jpg),这样就不会删除任何东西,并且文件夹实际上被清理干净。Claude 最后添加的功能是设置一个 moved_count 变量来跟踪移动了多少张图片,以便给你一个漂亮的总结。
整个代码都有详细的注释,指出了每处修改的地方。它还生成了一个包含所有修复的汇总表。但错过了加固跨平台差距的机会,会扣掉它的一些分数。在这里可以找到Claude的完整答案。
最终判决
谁将夺冠?
与上次不同,这次更难选择。ChatGPT 通过了大多数测试,但有一项错了。Gemini 在所有测试中表现出色,甚至在某些测试中超越了预期。Claude 表现良好,但忽略了一个小错误。所以,经过所有评审,我不得不宣布 Gemini 是本次比赛的获胜者。ChatGPT 是一个出色的讲解者,而 Claude 有最好的代码文档。
人工智能让调试变得容易
尽管这里的真正目的是展示每个 AI 模型的思维和代码修复能力,但可以肯定地说,它们都做得很出色。所以,无论你选择哪一个,都比用老办法自己调试要好得多。









