今天,我们宣布了一项最先进的突破,它突破了人工智能代码生成的界限。我们在NinjaTech AI的科学团队开发了一种新的代码生成方法,名为 “多编程语言集合”(MPLE)。

根据HumanEval基准测试的测量,在Llama 3.1 405B Instruct中使用这种方法,我们能够在统计上显示出比OpenAI的GPT-4O和Anthropic的Sonnet 3.5更好的表现。您可以在我们发布的技术论文中找到这些结果以及我们方法的详细信息 arxiv.org

在这篇博客文章中,我们将深入探讨与多编程语言集合 (MPLE) 相关的三个关键发现,它有可能显著增强所有人工智能助手的代码生成能力:

  1. 用于代码生成的代理工作流程 (MPLE) 方法可以经济高效地提高2-9%的准确性。
  2. 将 MPLE 与应用于现有 LLM 模型的反射和蒙特卡罗树搜索 (MCTS) 等高级推理技术相结合,可以进一步提高性能。
  3. 令我们惊喜的是,我们观察到由 llama3.1-405b-instruct 提供支持的 MPLE+MCTS 技术的精度为 HumanEval 基准测试中为 96.25%

代码生成的挑战

编写代码可能具有挑战性,因为它需要对编程语言有深入的理解,以及将复杂的想法转化为可执行代码的能力。此外,开发人员还必须应对调试、优化和兼容性等问题——这会使编码过程更加复杂和耗时。

这就是 AI 的用武之地;当用户提示时,大型语言模型 (LLM) 可以快速生成大量代码。自从我们推出以来 MyNinja.ai 2024 年 5 月下旬,它已经处理了来自大约 17.3 万名开发人员的超过 73.4 万个 Coder 任务。

但是,人工智能代码生成并不能消除编写代码的所有挑战。LLM 不是 100% 可靠的——它们在生成代码时可能会出错。

LLM 出错的原因是,传统的 AI 代码生成方法依赖于单一编程语言,这可能会导致特定语言的错误和偏见。例如,LLM 可能在 Python 代码生成中表现良好,因为它是用 Python 训练的。但是,当提示创建 C++ 或 Java 代码时,由于错误处理或库使用方面的差异,它可能无法创建准确的结果。LLM 难以生成准确代码的另一个原因是很难将人类可读的文本(即用户的提示)翻译成代码。

解决这个问题的一种方法是投资更多的模型训练。公司可以花更多的时间,越来越多的钱来培训LLM,让他们在第一次尝试时回答编程问题。这称为零样本学习,这意味着该模型在没有例子的情况下,只给出提示的正确答案,并且仅根据其先验知识生成适当的响应。但是,零镜头方法需要投入大量的时间和金钱(1000万至1亿美元以上),以提高模型的准确性。

但是 在过去的两年中,推理成本下降了100倍以上 而且他们继续这样做,从而产生了一种新的方式:CodeGen的代理工作流程。

我们的解决方案:多编程语言集合 (MPLE)

我们的团队提出了一种名为多编程语言集成(MPLE)的人工智能代码生成新方法。这种方法利用多种编程语言的优势,使用多重方法生成更准确、更稳健的代码。

我们不是在第一次尝试(单次尝试)时依靠模型来创建正确的答案,而是多次与 LLM 交互以生成正确的答案。每次我们与模型交互时,我们都会要求它使用不同的编程语言来解决用户的问题。这使我们能够利用 LLM 的自然优势——将代码从一种编程语言翻译成另一种编程语言的能力。

可以把 MPLE 想象成一个专家团队,每个人都精通不同的编程语言,在第一次尝试时共同努力创建最准确的代码。每位专家(或编程语言)都有其独特的优势,通过结合他们的优势,他们可以得出更准确、更可靠的解决方案。MPLE 要求所有这些专家贡献他们的 “专业知识”,同时我们的系统会生成正确的用户要求的代码。

以下是 MPLE 的工作原理:

  1. 初始代码生成: 当用户提示我们的系统提出与代码相关的问题时,我们的 AI 模型会使用用户请求的编程语言生成初始响应。
  2. 多语言采样和翻译: 在将响应返回给用户之前,对代码进行测试以确保其质量和准确性。如果代码未能通过所有测试,我们的模型会使用不同的编程语言生成新代码。然后,新代码被翻译回用户请求编程语言。该替代版本与原始版本不同,因为它利用了备选语言的优势,有可能消除导致测试失败的错误。
  3. 迭代改进: 对照测试用例再次测试了经过改进的代码版本。如果版本未能通过所有测试,则继续迭代不同的编码语言,直到版本成功通过所有测试。该过程完成后,将向用户返回响应(即代码的最终版本)。
  4. 合奏集成: 在整个迭代过程中,集成框架整合了多种语言的优势,以逐步完善程序。通过将每种特定语言的代码生成视为个人的 “弱专家”,该框架可以组合其输出以减少特定语言的错误和偏见。

值得注意的是,这种方法不是新模型,也不需要重新训练模型。该系统可协调与现有LLM的多次互动,以使用多重方法创建最佳答案。我们认为,随着推理成本的持续下降,人工智能驱动的结果(经济上可行)的未来将由利用大量推理技术的代理工作流程主导,在这些工作流程中,会生成大量代币来回答复杂的问题。

通过测试验证 MPLE

我们在两个广为认可的代码生成基准测试中测试了 MPLE 框架: HumanevalHumanEval-Plus。这些基准测试衡量了 LLM 根据用户提示生成功能代码的能力。

HumanEval 专为文本到代码生成任务而设计,其中输入是描述程序预期功能的用户提示。然后,根据LLM的输出通过具有特定要求的单元测试的能力来评估 LLM 输出。HumanEval-Plus 通过整合大量额外的测试用例来严格评估代码的稳健性和正确性,从而对 HumanEval 进行了扩展。

我们使用 Pass @1 测量了 MPLE 的有效性。这种代码评估方法衡量生成的代码在首次尝试时成功完成的任务的百分比。

我们使用专有的 LLM 和其他知名模型(例如 GPT-4o、Claude-Sonnet-3.5 和 LLama3.1-405b)进行了实验。

我们的测试表明,与基准相比,拟议的 MPLE 框架持续提高了所有测试的 LLM 的 Pass @1 准确性。例如, 使用 MPLE 时,GPT3.5-Turbo 的准确率从基准的 65.83% 提高到 74.17%,强调了利用多种编程语言减少特定语言偏见和错误的有效性(参见表 1)。

表 1:应用于各种 LLM 的 MPLE 的 HumanEval 测试结果

将 MPLE 与反射和蒙特卡罗相结合可获得更好的结果

我们进一步推动了 MPLE,设计了一个将 MPLE 与反射和 MCTS 等高级推理技术集成在一起的系统。这些技术用于增强法学硕士的问题解决和推理能力,尤其是在需要战略或多步决策的任务方面。我们的假设是,这些系统的组合将产生比单独使用 MPLE 更高的结果。通过一系列测试,我们得以证明这个假设是正确的。

我们还使用HumanEval-Plus基准测试了MPLE,结果进一步验证了我们的多语言集成方法的好处。值得注意的是, llama3.1-8binstruct 的性能从基线的 60.00% 提高到使用 mple+Reflection 时的 71.88% (见表2).

表 2:应用于各种 LLM 的 MPLE 和 Reflection 或 MCTS 的 HumanEval-Plus 测试结果

此外,MPLE+Reflection和MPLE+MCTS取得了具有竞争力的业绩,多个模型(GPT-4Omini、GPT-4O、Claude-Sonnet-3.5和llama3.1-405b-instruct)的表现为87.50%(见表3)。

表 3:应用于各种 LLM 的 MPLE 和 Reflection 或 MCTS 的 HumanEval-Plus 测试结果

我们的研究结果清楚地表明,MPLE 框架,尤其是与其他推理算法结合使用时,为增强多个 LLM 的代码生成提供了一种强大而灵活的方法。MPLE 持续的性能改进凸显了其在人工智能驱动的软件开发中的实际应用潜力。

Llama 3.1-405b 使用 MPLE 和 MCTS 取得最先进的结果:准确率为 96.25%!

在我们的分析中,MPLE 应用于 MPLE 时的性能给我们留下了特别深刻的印象。MPLE+MCTS 的组合在多个模型中实现了最高精度,例如 llama3.1-405b-instruct,其精度达到了 96.25% 的 SOTA Pass @1(见表 4)。

表 4:应用于各种 LLM 的 MPLE 和 MCTS 的 HumanEval 测试结果

前进之路

随着我们继续突破 MPLE 的可能性界限,我们很高兴能探索新的研发领域。潜在的重点领域包括:

  1. 制定更稳健的评估指标: 创建有效的评估指标对于准确衡量MPLE的性能至关重要。通过关注更全面的指标,我们可以确保该框架在各个领域的准确性、可靠性和实际适用性。
  2. 将 MPLE 应用于现实世界中的问题: MPLE 有可能应对复杂的现实挑战,例如自动化业务流程、优化软件开发管道和改善网络安全措施。在更广泛的数据集和现实世界应用程序中评估 MPLE 对于评估其普遍性和影响至关重要。
  3. 为编码任务增强 NinjallM: 我们的 NinjallM 3.0(lama3.1-405b 的微调和量化版本),可在以下网址获得 MyNinja.ai 在HumanEval(93.85%)和HumanEval-Plus(86.67%)上取得了可喜的成绩,我们正走上进一步提高其性能的道路。我们将在一个月内推出基于 MPLE 的 Ninja Coder。

我们很高兴与全世界分享我们对MPLE的研究。我们认为,这种方法有可能对LLM代码生成产生重大影响。MPLE 减少了特定语言的错误和偏差,从而生成更准确、更稳健的代码,这意味着开发人员有更多时间来解决更大的问题。我们致力于继续在这一领域进行研究和开发,我们期待在未来看到MPLE的创新应用。

附言:未来的错误要少得多 :-)

P.S. 我们使用 MyNinja.ai 来协助创建这篇博客文章。