怎样选择适合你的代码AI助手
对比不同代码助手工具的优缺点和适用场景。帮助程序员在众多工具中找到最合适的提效方案。
对比不同代码助手工具的优缺点和适用场景。帮助程序员在众多工具中找到最合适的提效方案。
在 AI 工具飞速演进的浪潮中,软件开发助手已经占据了一席之地,尤其是在编程领域。
本文记录了对四款领先 Large Language Model 的实验结果(文章末尾还有一位特别嘉宾)。
我让 OpenAI 的 GPT-4、Meta CodeLlama70B、Meta CodeLlama7B 和 Mistral Mixtral8x7B 完成一系列编程挑战,以评估哪一款模型才是更出色的编程助手。目标是评估它们各自的能力,并判断不同编程任务最适合使用哪一种 LLM。
对于 GPT-4,我选择了最新发布的 GTP-4 Turbo(gpt-4-0125-preview),因为它修正了上一版本存在的一些“偷懒”问题。
这次对比的测试环境搭建在 Visual Studio Code 中,并安装了“Continue”插件,以便直接与每个 LLM 交互。
这套方案提供了与 GitHub Copilot、AWS Codewhisperer 等其他编程助手相似的功能,同时让你能够更好地控制代码隐私——例如,在私有服务器上运行 LLM——还可以根据当前任务切换到效果最好或成本更低的 LLM。
下面是我的环境界面:
请注意右侧区域,那里显示的是我刚从 CodeLlama70B 得到的回答。
我从八个对编程至关重要的方面对这些 LLM 进行了评估:
代码生成: 根据需求从零开始编写代码片段或完整模块的能力。
代码解释与文档编写: 解释现有代码并创建有意义文档的能力。
单元测试生成: 为现有代码自动生成单元测试的能力。
调试与错误修复: 识别、解释并修复代码缺陷或错误的效率。
重构/优化建议: 提出并实施代码改进,以提升代码质量和性能的能力。
代码审查辅助: 在代码审查过程中发现潜在问题并提出改进建议的能力。
安全与最佳实践: 检测安全漏洞并确保遵循最佳实践的能力。
需求分析: 理解以自然语言描述的软件需求,并将其转化为技术规格的能力。虽然这并不完全属于“编程”,但与编程密切相关,因为我们可能需要进一步澄清模糊的需求,或者以某种方式对需求进行转换。例如,从需求中推导出 Finite State Machine,再使用某种编程语言实现它。
每个 LLM 的表现按照 0~3 分进行评分。为了确保同一领域内不同任务之间的竞争公平,每个领域都进行了多项测试,总计 19 项。
在整个测试过程中,system prompt 一直保持得非常简单:它只负责将 LLM 的角色设定为编程助手,并要求其回答简洁、直奔主题,以免在冗长且可能毫无用处的解释中消耗过多 token。
这样做是为了评估 LLM 的原生能力,同时也意味着,未来还可以通过有针对性的 system prompt 进一步增强它们的能力。
下面是测试结果概要:
不出所料,GPT-4 成为综合胜者,在所有任务中提供了最准确、最全面的帮助。
CodeLlama70B 和 Mixtral8x7B 的表现十分接近,在某些特定领域甚至能与 GPT-4 持平。
CodeLlama7B 虽然排名最后,但在部分任务中展现出了潜力,这意味着有针对性地调整 prompt 可能会提升它的表现。它的吸引力在于模型体积较小,可以在消费级硬件上运行。
以下是各个类别的测试结果:
你可以在 Github 上找到本次测试使用的完整任务列表,其中包括 prompt 以及每个 LLM 的输出。请注意,我会不时更新这些内容,加入新的测试,也可能加入新的 LLM。
下面列举几个测试中使用的任务。
FEN 计数: 这项任务测试模型对表示棋盘局面的 FEN 字符串的了解程度。虽然四个 LLM 都对 FEN 有一定了解,但只有 GPT-4 成功生成了完全正确的代码。这可能属于这样一种情况:拥有更多“无关知识”,反而能够带来更好的表现。
FEN 计数: 这项任务测试模型对表示棋盘局面的 FEN 字符串的了解程度。虽然四个 LLM 都对 FEN 有一定了解,但只有 GPT-4 成功生成了完全正确的代码。这可能属于这样一种情况:拥有更多“无关知识”,反而能够带来更好的表现。
规范遵循情况: 令人意外的是,没有任何一个 LLM 能够发现相对于一组代码风格规范的全部偏差。这表明,如果要让 LLM 真正胜任这类辅助工作,该领域仍有很多工作要做。可能需要设计得更好的 prompt,甚至采用 RAG 方案,确保 LLM 能够充分“理解”正确的规范。
规范遵循情况: 令人意外的是,没有任何一个 LLM 能够发现相对于一组代码风格规范的全部偏差。这表明,如果要让 LLM 真正胜任这类辅助工作,该领域仍有很多工作要做。可能需要设计得更好的 prompt,甚至采用 RAG 方案,确保 LLM 能够充分“理解”正确的规范。
歧义分析: 不同需求有时会相互冲突,进而可能引发困惑、返工或缺陷。这项任务专门用于检查 LLM 能否识别彼此冲突或内容重叠的需求。有意思的是,在这项任务中,Mixtral8x7B 的表现最终优于 CodeLlama70B。
歧义分析: 不同需求有时会相互冲突,进而可能引发困惑、返工或缺陷。这项任务专门用于检查 LLM 能否识别彼此冲突或内容重叠的需求。有意思的是,在这项任务中,Mixtral8x7B 的表现最终优于 CodeLlama70B。
使用这些 LLM 搭建个人编程助手,可以缓解人们对数据和代码隐私问题的担忧,而这类问题在基于云的解决方案中十分常见。
此外,还需要考虑成本因素,例如自行托管 LLM 的成本、相较于其他云 API 方案,GPT-4 更高的单 token 成本能够带来的收益,等等。
总而言之,虽然 GPT-4 凭借全面的辅助能力脱颖而出,但根据你的具体需求,较小的模型也可能成为可行的替代方案。
这次评估使用的测试旨在覆盖广泛的任务,让我们大致了解不同 LLM 的表现。你可以将其视为一轮初步筛选,但要做出明智的选择,仍然应该针对自己的具体使用场景进行专门测试。
有一点可以肯定:任何还没有使用 AI 编程助手的人,很快都必须开始使用,否则就可能被甩在后面。
现在正是确定哪些任务应该借助 AI 编程助手,以及应该在多大程度上使用它的时候。
在准备本文期间,Google 发布了新的 LLM Gemini Advance,与 Google Bard 相比展现出了显著提升。
我迅速对 Gemini Advance 和 GPT-4 在这 8 个类别中的表现进行了比较。后续显然还需要进行更多测试,但与此同时,下面这份初步结果展示了 Gemini Advanced 与 GPT-4 的综合得分对比:
以及它们在八个领域中的得分对比:
这两个 LLM 的表现非常接近!很显然,Google 的新 LLM 已经成为争夺“综合最佳 LLM”桂冠的有力竞争者。
如果要采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。