人工智能咨询培训老师叶梓 转载标明出处
生成式人工智能(GenAI)在软件开发领域的应用标志着自动化和创新的新时代。自2022年11月ChatGPT 3.5和2023年3月GPT-4的发布以来,GenAI的基础模型能力和应用领域都取得了显著进步。然而,将GenAI整合到编程实践中并非没有挑战。来自悉尼大学、深兰科技(上海)、中国创造学会和上海交通大学的研究团队通过比较GPT-4和GLM-4,旨在探索利用GenAI作为编程工具的最佳实践。
方法
研究者在进行这项研究时,主要目标是通过比较分析来探索如何将生成式人工智能(GenAI)作为编程工具的最佳实践。他们特别关注于评估不同提示策略的有效性,以及对比两种主要的语言模型——GPT-4和GLM-4——在编程任务中的表现。这项研究的核心在于评估代码生成的效率和质量,提示的清晰度和复杂性,以及整体编码效率的提升。
研究者为评估GenAI在编程中的效果,设立了以下四个主要评估标准:
成功率:即一次性提示能否成功生成功能性的蛇游戏核心模块。这是衡量提示策略有效性的直接方式,因为它直接关联到代码能否在首次尝试中就达到预期的功能。
调试效率:在首次尝试未能生成可行的核心模块时,GenAI在调试和完善代码过程中所提供的辅助变得至关重要。这一点评估了GenAI在帮助开发者解决问题和优化代码方面的支持性。
代码简洁性和可读性:生成的代码不仅要功能齐全,还要易于阅读和理解。这一点对于代码的长期维护和升级至关重要,因为它影响到了其他开发者或未来的自己能否轻松地理解和修改代码。
功能完整性和丰富性:研究者查看了生成代码中包含的功能和能力的范围,评估代码是否涵盖了蛇游戏所需的所有基本和可能的扩展功能。这有助于确保生成的代码不仅仅是一个基础版本,而是具有一定深度和扩展性的完整解决方案。
研究者在设计这项研究时,特别注重了提示的层次性和复杂度,以此来测试语言模型在代码生成方面的能力。他们采用了一种分层提示的方法,设计了四个不同复杂度级别的提示。这种方法允许研究者观察语言模型在不同提示复杂度下的表现,从而更好地理解模型在实际编程任务中的潜力和局限。
在最基础的层面上,研究者使用了简单直接的一次性提示,目的是评估语言模型在接收到最少量输入信息时的反应。这种方法可以揭示模型在处理简单任务时的效率和准确性。例如,研究者可能会提供一个非常基础的编程任务描述,然后观察模型能否生成符合要求的代码。
为了进一步评估语言模型的能力,研究者还设计了后续提示。这些提示是在模型生成初始代码后,根据生成代码的成功或失败,提供反馈并请求模型进行调整和改进。这种方法模拟了实际编程过程中的迭代和调试,有助于评估模型在面对问题和反馈时的适应性和学习能力。
在数据收集方面,研究者采取了严格的测试方法,确保了样本量的充足,从而为统计分析提供了可靠性。每个提示都被独立测试了20次,每次测试中还包括了两个后续提示,这样总共产生了240个结果。这些结果被详细记录并分类,以便于分析模型在不同情况下的表现。
实验过程是严格按照步骤执行的,以保证测试的一致性和可重复性。首先,研究者会与语言模型开始一个新的会话,然后输入一个预定的提示。接下来,他们会执行生成的代码,并记录结果。如果代码未能达到预期效果,研究者会根据初步结果提供反馈,并请求模型进行后续提示,然后重复这一过程。
结果
研究者对GPT-4在不同提示复杂度下生成代码的能力进行了测试。测试结果表明,最简单的提示("Prompt 1")在生成代码时的成功率最高,达到了90%。随着提示复杂度的增加,成功率有所下降。例如,在第四级提示("Prompt 4")的首次尝试中,成功率降低到了45%。这表明简单的提示更有助于模型高效地生成准确和相关的代码。
表1 展示了GPT-4在不同提示级别和交互序列下的代码生成成功率。"p" 代表提示级别,"s" 表示交互序列。例如,"p1" 到 "p4" 分别对应第3.3.1节中描述的第一到第四级提示复杂度。序列 "s1" 到 "s3" 分别表示初始输入、第一次后续提示和第二次后续提示。
图2 清楚地展示了一次性提示的成功率,其中最简单的提示 "Prompt 1" 显示出最高的可靠性。
表2 显示了失败类型的分布。在测试过程中,研究者观察到在提示p2s1-p2s3期间出现了大量的失败类型1,这可能是由于GPT-4模型的临时调整导致的异常。
随着提示复杂度的增加,失败类型1的发生率有所下降,而失败类型3的发生率有所上升。这表明更复杂的提示可能会促使模型更频繁地生成完整的代码输出,但同时也增加了生成的代码在预期游戏规则内功能不正确的风险。
GLM-4的表现趋势与GPT-4相似,成功率随着提示复杂度的增加而下降。在最简单的提示("Prompt 1")的首次尝试中,GLM-4的成功率为90%,而在最终提示的首次尝试中,成功率显著下降至45%。
表3 展示了GLM-4在不同提示级别和交互序列下的代码生成成功率。GLM-4在生成代码时经常遇到一个特定错误,即生成的代码在最后一行被过早截断。这种错误被归类为失败类型2,代表“代码生成内容失败”。
在提示1的后续提示中观察到了大量的失败类型1实例。突显了GLM-4在解释模糊术语方面的困难,因为与最初模糊的提示1相关的后续提示也相对不明确。这表明GLM-4在处理和响应不够具体的提示方面可能存在潜在的弱点。
在对GPT-4和GLM-4的代码生成能力进行比较分析时,GPT-4在一系列代码生成任务中略微优于GLM-4,展示了更高的整体成功率。值得注意的是,尽管GLM-4在类型2失败(生成的代码不完整)方面持续存在挑战,但在最终且可能是最复杂的提示中,GLM-4达到了与GPT-4相当的成功率。
观察表明,GLM-4的成功主要通过专门使用Pygame库实现,而GPT-4则尝试了Turtle和其他库,特别是在提示3和4中。这些提示的成功率低于使用Pygame库的提示。这表明,尽管GPT-4目前在整体性能上占优势,但GLM-4专门使用Pygame可能突出了一个潜在的优势领域。如果GLM-4能够解决并减少频繁的类型2失败,有可能缩小与GPT-4的性能差距,甚至在特定领域超过GPT-4的表现。
研究者发现,在代码生成前进行初步的“确认环节”可以显著提高LLMs的一次性成功率。通过提出一个基本问题,例如“你知道经典的街机游戏蛇吗?”在生成代码之前,可以有效地为模型准备即将进行的任务。这种方法提高了模型对任务的理解,从而导致更高的成功率和编码效率。
这种增强可以与思维链(Chain-of-Thought,CoT)机制联系起来,正如Wei等人(2022)[16]所展示的。CoT提示已被证明在各种推理任务中显著提高LLMs的表现。通过用一个情境问题启动CoT过程,我们为模型设置了专注的推理路径,鼓励LLM通过一系列逻辑步骤生成更准确的输出。这种策略不仅将模型的焦点与特定任务目标对齐,还澄清了任务要求,减少了歧义,并优化了模型解决给定问题的计算效率。
研究者最后指出了研究的局限性。这项研究主要关注的是编程初学者和独立开发者,而并没有特别针对大型IT公司的软件工程师。另外研究的焦点集中在Python语言上,这可能导致研究结果并不能直接推广到其他编程语言上。这种局限性提示我们在解读研究结果时需要谨慎,并且在未来的研究中考虑更广泛的编程环境和语言。
尽管存在一些方法论上的限制。但这显示了GenAI在提高生产力方面的潜力,也强调了开发人员在新的编程范式下需要扮演的角色——监督AI、设定目标并确保代码质量,这标志着编程领域的一个重大转变。
论文链接:https://arxiv.org/abs/2402.12782