我给Claude、ChatGPT和Gemini相同的有问题的JavaScript进行调试——只有一个找到了实际原因
大型语言模型不仅可以生成代码;它们还可以帮助你调试代码。当错误不明显,并且控制台输出让你感到困惑时,将一段代码片段交给你的 AI 编程助手,让它仔细检查以发现问题,是挽救一个糟糕周二的好方法。
我们有多种可用选项——免费的、付费的,甚至你可以在本地运行最大的开源模型。所以我整理了一个小测试,一个包含三个不同错误的 JavaScript 文件,并交给 Gemini、ChatGPT 和 Claude 来修复。这些错误——作用域问题、异步竞态问题,以及导致非确定性排序的基于索引的赋值——很容易被忽略,从而破坏一个完美的下午。但是你有几个 AI 工具来帮忙解决这些问题。
双子尝试了一个补丁
快速猜测——但不完全是实际问题
双子座在速度方面处于中间位置,在 ChatGPT 之前但在 Claude 之后显示了两种不同的响应。它正确地发现了一个作用域问题,并将块级作用域解释作为解决方案的一部分。然而,它后来在代码中完全忽略了一个随机延迟的竞态条件。
因此,发布的修复会让代码看起来正确,但从技术上讲并不正确。你运行代码,检查控制台,仍然会遇到问题。在 Gemini 展示的两个回应中,其中一个甚至没有解释更改或这些更改如何影响你的代码。多次运行提示也会产生不同的结果,包括一次它检测到了异步竞争问题,但仍然错过了基于索引的赋值错误。
ChatGPT 接近了
推理良好,诊断部分不完整
ChatGPT 虽然速度较慢,但它值得花时间。首先,它抓住了所有三个漏洞——作用域问题、导致最终日志提前打印的缺失 await,以及随机延迟导致的非确定性顺序。解释也条理清晰,初学者容易理解。
它还提出了三种不同的修复选项,每种选项都有不同的后果。它最好的建议是一个可以修补代码的方案,假设其他部分会自动跟进。技术上这是正确的,但这样做并不能解决根本原因。这不是修补错误,而是在延迟问题的出现。
值得称赞的是,ChatGPT 尝试以正确的方式修复它,这涉及将脚本中的循环作为另一种解决方案进行修复。然而,它也指出,虽然修复方法是正确的,但实施起来会更慢。
克洛德实际上找到了漏洞
唯一一个抓住真正问题的人
克洛德是最快提出回应的人,并且手头提供了最完整的解决方案。它没有提供多种答案或用不同方式修复问题的代码。聊天机器人识别出了三个问题,并有条不紊地解释和修补了它们。请注意,我在此测试中使用的是克洛德聊天,而不是克洛德编码。然而,克洛德在回应后立即建议切换到克洛德编码。
输出也不像 Gemini 或 ChatGPT 那样简单。虽然 Claude 的解释在技术上是合理的,但你需要了解 JavaScript 才能明白它在说什么。对于有经验的程序员来说没问题,但对于一个玩着从网上找到的脚本的新手来说,必须后续请求一个更简单的解释。无论如何,Claude 也擅长清理 ChatGPT 生成的代码,所以如果你在寻找一个调试工具,这可能就是它。
没有准确性,速度毫无意义
正确比迅速更重要
有些时候,Claude 准确但慢,而 ChatGPT 准确且快。从技术上讲,你可以说这是 ChatGPT 和 Claude 之间的平局,但 Claude 的回答通常更完整、正确且结构良好——而其他两个在同样的时间内,甚至更多时间内,只能提供部分回答。
这种组合在实际调试过程中具有累积价值。如果你正在处理一个特别大的代码库,每节省的一分钟,到最后可能会累计成几个小时。更不用说,当你使用表面修复补丁某个问题时,最终可能会带来更多或完全不同的问题,这会增加混乱。
为真正的调试工作选择合适的人工智能
这对开发者实际上意味着什么
有些任务大语言模型会产生幻觉,但它们在代码生成和调试方面仍然非常有用。Gemini 对许多任务都很有用,尤其是与其谷歌生态系统集成时,而 ChatGPT 能发现并修复大多数(如果不是全部)错误,尽管有时解决方案会让人困惑。Claude 同时更快且更稳定,这是一个很难忽视的优势。
当你处理需要通过不易察觉的执行流程追踪因果关系的问题时,这种更好的推理会更加谨慎和全面——这意味着你通常能更频繁地解决根本原因。对于快速的合理性检查,任何一个方法都可以。但当你处理那些具有误导性或更技术性的问题时,Claude可能是更好的选择。











