[Access]An Approach for Rapid Source Code DevelopmentBased on ChatGPT and Prompt Engineering

全文总结

本文提出了一种基于ChatGPT和提示工程(Prompt Engineering)的快速源代码开发方法。

研究背景

  1. 背景介绍:
    这篇文章的研究背景是随着软件复杂性和规模的增加,开发者需要花费大量精力手动编写代码。代码生成技术应运而生,旨在减轻开发者的重复性任务,提高软件开发效率,并减少人为错误。近年来,深度学习技术尤其是大型语言模型(LLMs)在代码生成方面取得了显著进展。
  2. 研究内容:
    该问题的研究内容包括利用ChatGPT开发一个基于Web的代码生成平台,通过用户界面、提示构建器和后端服务来实现代码自动生成。特别地,提示构建器通过动态封装原始输入来优化提示,从而提升模型的生成性能。
  3. 文献综述:
    该问题的相关工作有:早期的代码生成主要应用于代码补全,研究人员通过静态特性和统计语言模型来提升代码生成性能。随着大型语言模型如GPT-3和Codex的出现,代码生成能力得到了显著提升。OpenAI的ChatGPT进一步展示了其在代码生成领域的潜力。

研究方法

这篇论文提出了基于ChatGPT和提示工程的代码生成方法。具体来说:

  • 用户界面: 提供一个交互界面,用户可以配置基本参数并输入自然语言需求。
  • 提示构建器: 设计了一个新颖的提示工程工具,通过动态封装原始输入来优化提示。
  • 后端服务: 使用Java开发后端服务,支持持续会话并通过流式调用ChatGPT API输出代码生成结果。

实验设计

  • 数据集: 使用了两个数据集进行实验评估,一个是公开的数据集HumanEval,另一个是从实际项目中提取的CodeData-L数据集。
  • 实验步骤:
    1. 进行消融实验,比较使用提示构建器前后的生成性能。
    2. 通过精确匹配(EM)、双语评估替补(BLEU)、CodeBLEU和Pass@1等指标评估生成性能。
    3. 通过手动验证评估生成的代码是否满足实际开发需求。

结果与分析

  • 消融实验结果:
    • 使用提示构建器后,EM提高了65.06%,BLEU提高了38.45%,CodeBLEU提高了15.70%,Pass@1提高了50.64%。
  • 实际开发场景:
    • 在实际开发场景中,98.5%的测试用例可以通过手动验证,表明ChatGPT生成的代码在实际开发中具有显著的辅助作用。
  • 案例研究:
    • 独立函数生成: ChatGPT能够高效生成逻辑正确且书写优雅的独立函数代码。
    • 多文件生成: ChatGPT能够处理多文件代码生成任务,生成的代码大部分达到“生成可用”的状态。
    • 前端可视化: ChatGPT生成的前端代码经过多轮提问后,生成的网页展示效果良好

结论

这篇论文通过开发和验证基于ChatGPT和提示工程的代码生成平台,展示了其在实际软件开发中的潜力。研究表明,提示构建器显著提升了ChatGPT的代码生成性能,生成的代码在实际开发中具有较高的实用价值。然而,ChatGPT在代码生成方面仍存在一些局限性,如生成特定函数时的不准确性、版本迭代带来的成本问题以及单轮和多轮对话之间的矛盾。未来的研究可以进一步探索更高效的代码生成方法和更可靠的模型解释性。

这篇论文为利用大型语言模型进行代码生成提供了新的思路和方法,具有重要的理论和实践意义。

核心速览

研究背景

  1. 研究问题:这篇文章要解决的问题是如何利用ChatGPT和提示工程(Prompt Engineering)进行快速源代码开发。
  2. 研究难点:该问题的研究难点包括:如何有效地优化提示(Prompt)以提高ChatGPT的代码生成性能,以及如何在实际软件开发场景中验证生成代码的有效性。
  3. 相关工作:该问题的研究相关工作包括基于深度学习的代码生成模型,如CodeBERT、PLBART和CoTexT等。此外,OpenAI的GPT-3和Codex模型也在代码生成领域展示了显著的性能。

研究方法

这篇论文提出了一种基于ChatGPT和提示工程的Web代码生成平台。具体来说,

  1. 用户界面(User Interface):提供了一个交互界面,用户可以进行基本参数配置和输入自然语言需求。

     

  2. 提示构建器(Prompt Builder):创建了一个新颖的提示工程工具,通过动态封装原始输入来全面优化提示。提示构建器包括两个部分:原始提示和动态封装。

     

    • 原始提示:用户输入的信息。
    • 动态封装:使用工具对原始输入进行优化,包括系统信息配置、原始输入信息、编码规范、文件格式、文件结构和严格要求。
  3. 后端服务(Backend Service):使用Java开发了后端服务,支持连续会话和通过流式调用ChatGPT API输出代码生成结果。

  4. 自调试优化(Self-Debugging Optimization):通过执行生成的代码并利用代码和执行结果的反馈来指导模型进行调试,修正代码中的错误,从而提高模型的输出性能。自调试框架主要通过以下三种方法生成少样本提示:

    • 简单反馈:根据执行的正确性提供反馈。
    • 单元测试:在计算函数时,如果特定参数集导致单元测试失败,将参数和测试结果告知ChatGPT,并使用提示检查错误。
    • 代码解释:当描述的场景效果有限时,通过解释生成的代码来训练模型进行自调试。

实验设计

  1. 数据收集:实验使用了两个数据集:HumanEval和CodeData-L。HumanEval是一个广泛使用的开源代码生成数据集,包含164个编程任务。CodeData-L数据集从各种工程项目中提取了200个示例,涵盖Web开发的典型工作流程。
  2. 实验设计:通过消融实验比较了提示优化前后的生成性能。评估指标包括精确匹配(EM)、双语评估替补(BLEU)、CodeBLEU和Pass@1。此外,还对CodeData-L数据集进行了手动评估,以验证多轮生成代码是否真正满足需求。
  3. 样本选择:选择了独立函数生成、多文件生成和网页可视化三个案例进行研究。每个案例都通过多轮对话生成代码,并根据生成的代码进行调整和优化。
  4. 参数配置:在用户界面中,用户可以配置API密钥、最大令牌数、温度、Top P等参数。这些参数用于控制ChatGPT的生成行为和结果质量。

结果与分析

  1. 代码生成性能提升:提示构建器显著提高了ChatGPT的代码生成性能。具体来说,EM提升了65.06%,BLEU提升了38.45%,CodeBLEU提升了15.70%,Pass@1提升了50.64%。

     

  2. 实际开发场景中的验证:在CodeData-L数据集中,98.5%的测试用例可以通过手动验证。这表明基于ChatGPT的代码生成方法在实际开发中具有显著的辅助作用。

  3. 案例研究

    • 独立函数生成:ChatGPT能够生成具有正确逻辑和优雅风格的代码片段。通过明确的提示指令,可以触发优化并生成符合要求的代码。

       

    • 多文件生成:ChatGPT能够生成高质量的多文件代码,尽管在处理复杂需求时需要多轮对话和提示优化。

       

    • 网页可视化:ChatGPT能够生成基本的网页代码,但在前端框架和复杂样式方面仍有改进空间。

       

总体结论

这篇论文开发了一个基于ChatGPT和提示工程的在线代码生成服务,通过调试和优化提高了模型的生成性能。实验结果表明,高质量的提示可以显著提高ChatGPT的代码生成能力,并在实际开发中提供了有效的辅助。然而,生成代码的有效性仍然高度依赖于人类输入。未来的研究将继续探索更高效的代码生成方法和工具的改进。

论文评价

优点与创新

  1. 高效的代码生成平台:开发了一个基于ChatGPT和提示工程的Web代码生成平台,包含用户界面、提示构建器和后端服务,显著提升了代码生成的效率和质量。
  2. 优化的提示构建器:通过动态封装原始输入,生成了全面的提示,提升了模型的生成性能。实验结果表明,提示构建器在精确匹配(EM)、双语评估替补(BLEU)、CodeBLEU和Pass@1等指标上分别提升了65.06%、38.45%、15.70%和50.64%。
  3. 实际开发场景的验证:在真实开发场景中,98.5%的测试用例可以通过手动验证,证明了基于ChatGPT的代码生成方法的实际帮助。
  4. 多轮对话优化:引入了自调试优化方法,通过执行生成的代码并利用代码执行结果和反馈来指导模型进行调试,显著提高了生成代码的质量。
  5. 多种编程语言的兼容性:平台支持多种编程语言,包括SQL、PHP、Java、Python和JavaScript,适用于不同的开发需求。

不足与反思

  1. 模型版本的迭代:当前使用的是GPT-3.5版本,而GPT-4已经显示出更高的效率和更清晰的代码风格。未来研究将逐步过渡到GPT-4,并提供不同版本的ChatGPT接口供用户选择。
  2. 提示标准的定义:高质量的提示对于代码生成至关重要,当前的研究对提示的结构有较高要求。未来的研究可能会探索更用户友好的交互格式或具有增强理解能力的AI产品。
  3. 单轮与多轮对话的矛盾:单轮生成结果的准确性有限,而多轮对话虽然能提高生成质量,但会增加时间开销。未来需要在这两者之间找到平衡。
  4. 错误提示和约束的理解:ChatGPT在处理复杂场景时,可能会出现生成无效代码或误导性输出的情况。未来需要进一步研究和改进模型的可靠性和解释性。
  5. 数据隐私保护:生成代码的过程中可能存在信息泄露的风险,未来需要在工具中加入安全风险评估和隐私保护措施。

关键问题及回答

问题1:提示构建器(Prompt Builder)是如何优化ChatGPT的提示的?

提示构建器通过动态封装原始输入来全面优化提示。具体来说,提示构建器包括两个主要部分:原始提示和动态封装。原始提示是用户输入的信息,而动态封装则使用工具对原始输入进行优化,包括以下几个方面:

  1. 系统信息配置:设置系统角色为代码专家,引导ChatGPT生成完整的功能代码。
  2. 原始输入信息:包括函数签名、自然语言描述的功能需求、示例和额外指南。
  3. 编码规范:定义代码生成的规则,如去除冗余注释、标准化命名、清晰的注释等。
  4. 文件格式:指定生成的代码文件的格式,如文件名、语法语言和代码块结构。
  5. 文件结构:通过示例展示文件结构的层次树,帮助生成多个代码文件时清晰地展示每个文件在项目中的位置。
  6. 严格要求:确保ChatGPT严格遵守所有规定的条件,使用更具体的术语来提高响应的清晰度和效率。

通过这些优化措施,提示构建器显著提高了ChatGPT的代码生成性能。

问题2:在消融实验中,提示构建器对ChatGPT代码生成性能的具体提升有哪些?

在消融实验中,提示构建器对ChatGPT代码生成性能的提升主要体现在以下几个方面:

  1. 精确匹配(EM):提升了65.06%。这表明提示构建器显著提高了生成代码与参考代码的匹配程度。
  2. 双语评估替补(BLEU):提升了38.45%。BLEU评分通过计算生成代码与参考代码的n-gram相似度来评估生成代码的质量。
  3. 代码BLEU:提升了15.70%。CodeBLEU不仅考虑了n-gram匹配,还结合了代码语法和语义,进一步评估生成代码的准确性。
  4. Pass@1:提升了50.64%。Pass@1是指在随机过程中生成代码通过单元测试的比例,这一指标直接反映了生成代码的执行性能。

这些提升表明,提示构建器在多个维度上显著提高了ChatGPT的代码生成能力。

问题3:在实际软件开发场景中,基于ChatGPT的代码生成方法的表现如何?

在实际软件开发场景中,基于ChatGPT的代码生成方法表现出色。具体表现如下:

  1. 代码生成质量:通过手动评估,98.5%的测试用例可以通过手动验证,表明生成的代码在功能和质量上都能满足开发者的需求。
  2. 多轮生成和优化:对于复杂的开发需求,ChatGPT能够通过多轮问答生成高质量的代码。例如,在生成文件写入函数时,ChatGPT能够考虑到权限和多用户访问安全,并通过多轮对话优化代码逻辑。
  3. 前端页面生成:虽然在前端框架和样式调整方面还有改进空间,但ChatGPT能够生成基本的前端页面代码,展示了其在不同开发场景中的适用性。

总体而言,基于ChatGPT的代码生成方法在实际软件开发中具有显著的辅助作用,能够提高开发效率,减少人为错误,并生成高质量的代码。

摘要

代码生成是现代软件开发中一种强大的技术,它提高了开发效率,减少了错误,并促进了标准化和一致性。最近,ChatGPT在自动代码生成方面展现出了巨大的潜力。然而,现有关于代码生成的研究缺乏对实际软件开发过程的指导。在本研究中,我们利用ChatGPT开发了一个基于网络的代码生成平台,包括关键组件:用户界面、提示构建器和后端服务。具体来说,提示构建器动态生成了全面的提示,以增强模型生成性能。我们在两个数据集上进行了实验,以评估我们方法中代码生成的性能。通过8个广泛使用的指标。结果表明:(1)我们的提示构建器有效,精确匹配(EM)提高了65.06%,双语评估下(BLEU)提高了38.45%,代码BLEU提高了15.70%,Pass@1提高了50.64%。(2)在真实开发场景中,98.5%的测试用例可以通过手动验证来验证,这突显了基于ChatGPT的代码生成方法所提供的真正帮助。

索引术语 ChatGPT、提示工程、代码生成、软件开发、大型语言模型。

I. 引言

随着软件复杂性和规模的不断增长,开发者必须通过手工编写代码付出巨大努力。代码生成的出现旨在减轻开发者的重复性任务,提高整体软件开发效率。同时,代码生成作为预防措施,防止人为拼写错误和语法错误,确保代码质量和稳定性。

如今,深度学习(DL)技术已经在代码生成方面取得了显著进步。基于深度学习的模型有助于从自然语言转换到源代码,使程序能够解读开发者的意图,并自主生成高质量的代码。研究人员已经研究了这些模型在自动化代码方面的有效应用。

本手稿的编辑协调审查并批准发表的是Laxmisha Rai。

由于训练和开发成本的限制,这些模型最终在工程开发中的实际实施面临挑战。

最近,OpenAI引入了ChatGPT,它能够根据接收到的输入理解并生成类似人类的文本。在各个领域[4],[5],[6],[7],ChatGPT已经显示出相当大的潜力,通过生成相应的代码实现了这一目标。同时,优化提示作为模型输入已被实证证明对模型输出有增益。因此,我们提出了一种创新的方法,以直接应用ChatGPT进行代码生成为中心。为了协助实际软件开发,我们开发了一个基于网络的平台,为用户提供不同编程语言的代码生成服务。具体来说,主要组成部分如下。

● 用户界面。提供一个交互式界面供用户执行基本的参数配置和输入自然语言要求。

● 提示构建器。创建了一个新颖的提示工程工具,通过动态封装原始输入来实现提示的综合优化。

● 后端服务。使用Java开发后端服务,实现连续会话,并通过流调用ChatGPT API输出代码生成结果。

我们已经进行了广泛的实验来评估我们的平台。(1) 我们通过向ChatGPT请求时加入提示构建器进行了消融实验。实验基于公共数据集HumanEval[8]。然后我们比较了使用精确匹配(EM)、双语评估未研究(BLEU)[9]、代码BLEU[10]和Pass@1等评估指标进行提示优化前后的性能。结果明确展示了我们的提示构建器带来的巨大收益,以EM的65.06%、BLEU的38.45%、CodeBLEU的15.70%以及出色的Pass@1的50.64%取得了显著成绩。(2)我们从真实项目中提取了CodeData-L数据集,并通过手动评估来检验多轮生成后的代码是否真正满足要求。结果表明,98.5%的场景能够成功通过评估。

贡献:我们在本文中总结我们的贡献如下。

● 我们开发了一个基于网络的AI工具,用于代码生成,以提高日常生产力。

我们设计了复杂的提示结构以及动态封装模式,以提高ChatGPT输出的精确度。

● 我们通过广泛的评估证实了该工具的性能,确认这种方法确实有助于软件开发。

本文的组织结构如下。第二节描述相关工作。第三节详细介绍研究方法。第四节展示了一些典型的例子。我们在第五节讨论结果的评估和分析。最后,第六节总结了本文。

II. 相关工作

软件开发的主要目标之一是尽量减少开发成本、提高生产效率和改善产品质量。考虑到代码自动生成在减轻工作负担和提高开发效率方面的巨大好处,代码生成性能的提升已成为当前研究的焦点。最初,代码补全[11]是代码生成的一个范式应用,并且是当今集成开发环境的关键组成部分。Asaduzzaman等人[12]试图通过利用源代码的静态特性来增强代码补全的性能。

机器学习的演变导致了在代码生成方面的创新方法[13]。具体来说,这个想法是使计算机能够学习人类语言,并基于此进一步完成从自然语言到计算机语言的转换。Hindel等人强调了代码中相当一部分的自然性[14]。他们利用基于n-gram的统计语言模型来表征代码,并通过下一个词预测任务评估其重复性和可预测性,类似于自然语言。这意味着可以使用自然语言方法来解决源代码生成中的挑战。然而,扎根于自然语言的代码生成仍然是一项艰巨的任务。大型语言模型的出现给研究人员带来了乐观的感觉。

一种人工智能模型,大型语言模型(LLMs)利用深度学习技术。这些模型在广泛的训练数据集和大量的计算资源上训练,可以理解和生成自然语言。根据预训练的Transformer语言模型中的各种架构[15],LLMs可以分为不同的架构,如仅编码器、编码器-解码器和仅解码器。自2017年引入以来,Transformer最初被用作解决机器翻译挑战的语言模型。通过广泛的研究,预训练的Transformer模型展示了在多样化领域中的卓越多功能性。它们已成为自然语言处理中挑战的稳健解决方案,包括文本表示、分类、生成和问答。研究人员也开始探索这些模型在代码生成领域的应用,例如CodeBERT[1]、PLBART[2]、CoTexT[3]以及类似方法。

OpenAI的GPT-3,即预训练Transformer模型的第三次迭代,在其适应多种软件工程任务方面具有多功能性。拥有1750亿参数的GPT-3是在一个极其庞大的数据集上训练的[16],该数据集来自互联网。它在各种分类和生成任务中展现了高性能[17]、[18]、[19]、[20]。OpenAI还推出了一个名为Codex的模型,专门用于代码生成。根据OpenAI官方演示,Codex通过响应自然语言指定的要求来生成源代码,展示了高级别的代码生成能力。随后,研究人员基于Codex进行了各种方向的研究,包括代码生成[21]、代码修复[22]、安全漏洞修复[23]和仿真建模[24]。2022年11月,OpenAI介绍了AI聊天机器人模型ChatGPT[25],展示了GPT-3.5模型参数的大幅增加,达到了十亿级别。这种增强以及更高级订阅版本ChatGPT Plus[26]的引入,显著提高了模型性能[27]。ChatGPT已经在代码生成方面展现出值得注意的潜力,在多个领域。

图1。基于ChatGPT和提示工程进行代码生成与评估的架构。

包括数据可视化和网络安全等领域的域名。在不久的将来,OpenAI将推出下一代超大型语言模型GPT-4[28],为代码生成领域带来新的机遇。本文深入研究了并评估了基于ChatGPT的代码生成质量,并结合了提示工程的细微之处。

III. 方法论

本研究通过开发并验证我们的基于网络的服务来探索ChatGPT的代码生成能力。在本节中,我们将概述这种方法,包括以下部分:用户界面、提示构建器、评估方法等。

图1展示了本研究的整体框架。首先,用户用自然语言输入原始提示,通常包含功能要求和包含技术选择及参考组件等信息。其次,用户可以使用我们的提示构建器动态封装原始输入,通过分配角色、施加特定要求和其他增强措施来优化它。第三步涉及将提示发送给ChatGPT并检索响应。我们选择GPT-3.5作为我们的方法,因为当我们在设计我们的工具时,GPT-3.5是主流版本。对于开发者来说,使用我们的工具与GPT-3.5更为方便。最后,我们使用了代码评估和人机评估等多种评估方法来验证我们工具的有效性。

A. 用户界面

本研究使用的平台界面如图2所示。用户可以使用页面右侧的设置标签自定义参数,例如API密钥、最大令牌数、温度、顶部P等。这些参数的含义如下:

  1. API密钥:这是一个唯一的标识符或认证令牌,用于访问ChatGPT API。

  2. 基础URL:这指定了构建API请求的起点。

  3. OpenAI模型:这指的是用于生成响应的具体版本或变体。

  4. 最大令牌数:这决定了生成的响应中的最大令牌数(单词或子词)。

  5. 温度:这控制了生成的响应的随机性。较高的温度会导致更多样化和富有创意的响应。

  6. 顶部P:这用于控制生成的响应的多样性。它限制采样到累积概率超过某个阈值(P)的最可能令牌。

页面底部的对话框允许输入信息。与ChatGPT的用户对话以对话格式记录在页面中心。左侧的对话标签提供了查询和管理历史会话的能力。

B. 提示构建器

根据大量报告,我们发现提示生成(PE)已在AI的代码生成领域被广泛使用。PE涉及设计和优化提示,以提高大型语言模型(LLMs)的有效性和可控性。研究确认[29],高质量的提示应包含基本特征,如清晰的任务描述、精确的语言表达和适当的上下文示例。

在本节中,我们采用了动态组装方法来构建提示,使用我们的Prompt Builder,它由两部分组成。第一部分是原始提示,代表用户输入的信息。第二部分涉及使用名为Prompt Builder的工具进行动态封装,包括系统细节和提示优化的策略。我们在图3中展示了典型的提示结构。以下是对所提及组件的解释:

  1. 配置系统信息图3(a)。首先,我们将系统角色代码专家设置为指导ChatGPT生成完整的功能性代码。随后,主要任务被确定为代码输出,定义了质量标准,要求准确性和逻辑一致性。最后,模型需要遵循后续指南。这种方法在一定程度上有助于控制ChatGPT的想象倾向,并确保相对专业的代码生成风格。

图2。从自然语言描述生成用户界面代码。

图3。使用Prompt Builder动态包裹的提示结构。(a),(c)-(f)插件动态包裹。(b)初始用户输入,表示任务:用Python创建一个函数。(i)-(iv)详细的提示结构。

  1. 原始输入信息图3(b)。本节包括用户提供的原始提示,代表我们为用户推荐的输入。(i)表示函数签名。(ii)包含功能要求的自然语言描述。(iii)提供几个示例,大大提高了生成内容的精确度。(iv)包括额外的指南,例如设置边界或提供上述信息的进一步解释。然而,在实际实验中,并非每个输入都符合这些标准。许多实际开发要求旨在实现“从头开始”的方法,其中可用代码直接从自然语言输入生成,通常以“零样本提示”的格式。零样本提示构成了最基本的提示类型,仅提供任务描述或初始文本以启动ChatGPT。在现有的关于样本量考虑的研究中,秦等人[30]进行了一项评估,揭示了ChatGPT在零样本条件下推理和理解任务的出色性能。

建立编码规范图3(c)。本节概述了在代码生成中必须遵循的指南。例如,去除冗余的注释和文本,标准化变量的命名、函数、类,并加入清晰的注释。

4)指定文件格式图3(d)。生成的代码文件的特定格式由两条规则控制,包括文件名、语法语言以及单个代码文件的代码块等元素。如果没有用户指定,允许模型生成合适的文件名。

定义文件结构图3(e)。文件结构通过示例说明,最终在输出末尾包含层次树结构。这种方法特别有利于生成多个代码文件,清晰地描绘了每个代码文件在整个项目中的位置。

6)施加严格的要求图3(f)。最后一部分指导ChatGPT严格遵守所有规定的条件。实际经验[31]表明,包含更具体的术语会导致更清晰的响应,提高效率和精确度。坚持严格遵循限制同样适用于此情境。

C. 自动调试优化

提高代码生成的性能是一项挑战,尤其是在面对复杂的编程需求时。本节结合了自调试方法[32]来优化图4中的提示。该方法涉及执行生成的代码并利用

图4. 通过自我调试提高ChatGPT生成性能。

从代码和执行结果中获得的反馈指导模型进行调试,修正代码中的错误以提高模型的输出性能。

在多轮对话中迭代改进代码时,通过利用不同类型的反馈,ChatGPT输出的精度得到了提升。自我调试框架主要利用代码执行结果的反馈,通过以下三种方法生成少量提示。

1)简单反馈:例如,在前一步骤中生成结果之后,我们将根据执行的正确性向模型提供反馈,如“上述生成的代码是正确的”或“上述生成的代码是错误的;请更正。”

2)单元测试:例如,如果在计算函数期间某个参数集的单元测试用例失败,我们将在下一次交互中将参数和测试结果描述给ChatGPT,并使用提示来检查错误。这种方法可以显著提高调试的性能。

代码解释:研究表明大型语言模型(LLMs)能够生成问题解决解决方案的文本和代码描述。因此,当所描述的场景中的有效性有限时,可以通过解释生成的代码来进行自我调试训练。谷歌的研究已经验证了大型语言模型具有自我调试的有益影响。5展示了使用代码解释和自我调试来纠正预测SQL查询的示例,这是一个具有挑战性的问题场景。在这个场景中,ChatGPT通过解释和比较它生成的SQL查询来进行自我调试,从而能够纠正SQL查询语句,并改善与“已删除”状态相关的结果数据的过滤。

在这项研究中,基于概述的层次结构,在多轮对话中进行提示优化,广泛地结合了简单反馈和单元测试反馈。在少数情况下应用了代码解释反馈,释放了提高模型自编码性能的潜力,到一定程度。

表1. 案例研究1:独立函数对话中的提示和ChatGPT互动。

Prompt Creating a File-Writing Function in PHP.
1. Consider scenarios where there is no permission to create written files
2. Consider the security of multiple person operation
<< ?php
function write_file(\ file_path,\ content){
ChatGPT "To address scenarios where the user may not have permission to create or write to a file, and to ensure multi-user
operation safety, we can incorporate error handling and utilize a unique file naming convention. We'll also add a
timestamp to the file name for uniqueness."
The code is shown in Fig. 6(a).
Prompt The above code needs to be written to the same file, considering security in multi-user operations, implemented
with locking.
ChatGPT "To ensure safety in a multi-user environment, we'll implement file locking to prevent concurrent writes to the
same file. This will help avoid potential conflicts."
The code is shown in Fig. 6(b).

图5:通过自我调试提高ChatGPT生成性能。

IV. 结果

A. 案例研究1:独立函数

关于代码生成,最初的考虑涉及效用类中的独立函数。这些函数独立运行,没有代码文件之间的相互调用,也不会纠缠过于复杂的业务场景。这种偏好确保了纯功能性逻辑的更直接说明。例如,让我们考虑一个常见的场景,在PHP中创建一个文件写入函数。值得注意的是,实际应用场景可能涉及诸如操作权限不足和并发访问等挑战。表1展示了基于所描绘场景的代码生成的会话日志。在这个表以及后续类似类型的表格中,“提示”代表用户输入,而“ChatGPT”表示ChatGPT生成的响应。由于空间限制,生成的代码不会直接包含在会话表中。相反,它以图6的形式呈现。

如图6(a)所示,很明显生成的代码已经考虑到了与文件操作权限和多用户访问安全相关的问题。然而,默认实现为每个文件提供了一个时间戳,本质上创建了不同的文件。在典型的多用户写入场景中,应该针对同一个文件,这并不符合要求。尽管实现是正确的,但需要进一步的调整。

在第二轮提示中,指令明确要求对同一文件进行操作,并指定了ChatGPT使用锁定操作。如图6(b)所示,代码已成功修改,逻辑准确。

总结代码生成过程,很明显ChatGPT能够高效地为具有正确逻辑和优雅书写风格的独立函数生成代码段。此外,锁定操作的使用权取决于明确的提示指令,例如“考虑多用户安全”,突出了触发优化的提示表达式的具体要求。这种优化并非所有提示都会触发。

B. 案例研究2:多文件生成

案例研究1展示了ChatGPT的卓越独立函数生成能力。考虑到不同代码文件之间的相互调用和依赖性,我们探讨ChatGPT是否能够有效处理多文件代码生成任务。为了调查这一点,我们选择了一个场景,在Java中使用Spring Boot框架实现的Web服务器上的容器启动停止管理。基本业务逻辑在图7中概述。

(a) Default implementation (b) Implementation with locking
function write_file(filepath,filep​ath,content){ function write_file(filepath,filep​ath,content)
try{ try{
//Ensure the directory exists, create if not //Ensure the directory exists, create if not
if(!file_exists(dirname($file_path))){ if(!file_exists(dirname($file_path))){
mkdir(dirname($file_path), 0755, true); mkdir(dirname($file_path),0755,true);
} }
//Generate a unique file name with timestamp //Generate a file name
$file_name= date('YmdHis').'_output.txt'; $file_name='output.txt';
fullpath=fullp​ath=file_path.'/'.$file_name; fullpath=fullp​ath=file_path.'/'.$file_name;
//Write content to the file //Open the file for writing and lock it
file_put_contents(\ full_path,\ content); filehandle=fopen(fileh​andle=fopen(full_path,'w');
return true; flock($file_handle, LOCK_EX);
} catch(Exception$e){
echo"Error:".$e->getMessage(); //Write content to the file
return false; fwrite(filehandle,fileh​andle,content);
return true;
} catch(Exception$e){
echo"Error:".$e->getMessage();
return false;
}

图6. PHP中文件写入的实现。(a) 默认实现。(b) 加锁实现。

本案例的问答对话记录在表2中。

由于篇幅限制,本节仅分析图8(a)中的核心代码文件。首先,用自然语言描述了功能需求。值得注意的是,描述中存在歧义,例如缺少定义的状态转换。表2中的任务描述提供了四个状态的简要概述,包括一个称为“关闭”的破坏性状态。这个状态旨在用于接口中关闭容器组,与本案例中打开容器组的请求无关。然而,ChatGPT的生成是值得赞扬的,它准确地根据“start函数”定义了三个状态之间的转换,整体功能逻辑基本上是正确的。与实际工程代码相比,相当一部分代码已经达到了“生成且可用”的状态,有些地方可以改进。

在这个背景下,如果“sendStartRequest”函数抛出异常,则需要状态回滚。因此,ChatGPT被指导使用try-catch-finally机制重构该函数。此外,还传达了一个信息,即应在finally块内进行页面通知的WebSocket调用,如图8(b)所示。

最后,ChatGPT生成的完整代码文件结构显示在图9中。

总之,生成的代码整体质量非常高,大多数识别的缺陷都通过多轮提问得到了解决。在处理复杂要求时,需要更加关注提示的优化,这要求明确阐述并强调要求的关键点。

此外,提示中错误状态的存在也证明了使用ChatGPT进行代码生成的能力是稳健的。

C. 案例研究3:网页可视化

前两个案例集中在后端开发场景上,而这个案例专门选择了表3中的前端开发环境。由于前端代码包括页面布局、交互效果和页面加载等视觉元素,它提供了一种更直观的方式来评估ChatGPT生成的代码是否满足开发者的需求。这个案例旨在开发一个简化版的史蒂夫·乔布斯主页,技术栈包括HTML、CSS和JavaScript。

由于通过多轮提问生成了大量的前端代码,并且空间有限,本节不提供源代码。相反,生成的网页通过图像显示,如图10所示。

在这个案例中,前端网页代码实际上是通过多次提问由ChatGPT生成的,从而呈现出一个执行良好的演示。然而,需要注意的是,这个案例不包括更复杂的前端框架,如Vue.js。包含相关技术参考文献会使问答过程变得更加复杂。

表2. 案例研究2:多文件生成对话:提示和ChatGPT互动。

Prompt Implement the initiation of container groups.
Prompt 1. Employ the Spring Boot framework and a thread pool.
Prompt 2. The startup process involves invoking the"sendStartRequest" interface.
Prompt 3. Based on the results from the previous step, update the"status" field in the"container_group" table.
Prompt 4. The"status" field consists of states 0(Off),1(On),2(Open),and 3(Close).
Prompt 5. Status changes are implemented using WebSocket.
Prompt Note: Code generation should encompass various layers, including controller, service,entity, dao, and others.
ChatGPT "Please adjust the code according to your specific project structure and requirements."
ChatGPT Core code is shown in Fig. 8(a).
Prompt 1. Utilize annotations for dependency injection.
Prompt 2. Optimize the"startContainerGroup" function using try-catch-finally.
ChatGPT "This code now uses annotations for dependency injection, explicitly defines a thread pool, and optimizes
ChatGPT exception handling using try-catch-finally. It also ensures that if an exception occurs, the status is rolled back
ChatGPT appropriately."
Prompt 1. In the"startContainerGroup" function, update the status to 0 when catching an exception.
Prompt 2. Move the WebSocket invocation to the finally block and relocate the definition of the thread pool to a separate
Prompt file.
ChatGPT Core code is shown in Fig. 8(b).
ChatGPT The directory structure is shown in Fig. 9.

表3. 案例研究3:网页可视化对话:提示与ChatGPT互动。

Prompt Generate a Steve Jobs' homepage adapted for iPhone 14 using HTML.
ChatGPT "To ensure that the webpage adapts well to the iPhone 14's screen, we use the meta tag with the viewport attribute to set the initial scale to 1. This allows the page to adapt to the device's screen width."
Prompt Create an image hyperlink online, positioned to the right of the tag. Online link: http://renwu.rbaike.com/uploads/202209/16634114335W4cPyzK.jpg
ChatGPT "Please replace the placeholder links and image source with your actual content."
Prompt Adjust the image size to width: 120px, height: 150px.
ChatGPT "Now, the image will be displayed with a width of 150 pixels and a height of 200 pixels."
Prompt Please help me place the photo on the right, and align the sections in the directory: personal information, achievements, and contact.
ChatGPT "Now, the navigation items"Personal Information,""Achievements," and"Contact" will be aligned to the left, and the image will be aligned to the right."
Prompt Enhance the appearance of the page.
ChatGPT "In this updated code, I've added more styling to enhance the visual appeal of the page.
Feel free to further customize the styles to your preference!"

V. 评估

我们的评估旨在回答以下研究问题(RQ)。

RQ1:我们设计的提示优化方法是否增强了ChatGPT的代码生成效率?

RQ2:ChatGPT与提示工程在代码生成中的结合是否能真正帮助开发者完成软件开发任务

RQ3:使用ChatGPT进行代码生成有哪些局限性,未来的研究方向是什么?

在本节中,我们将分析实验结果,并对之前的研究问题提供答案。

A. 评估方法

我们在一个公开可用的数据集上进行了实验,该数据集基于Python,以及一个新颖的数据集。

图7. 服务器上容器的启动程序,使用网页进行管理。

CodeData-L(针对如SQL、PHP、Java、Python和JavaScript等目标语言)。

图8。在Java中生成的代码核心。(a) 在初始阶段生成的代码核心。(b) 通过提示调整优化代码核心结构。

图9. 基于Spring Boot框架生成的代码结构。

HumanEval目前是代码生成领域最广泛使用的开源数据集。基准数据集由OpenAI工程师手动创建了164个编程任务,旨在确保与训练集的非重叠程度达到一定水平。HumanEval与Python语言兼容,包括每个编程任务的描述、参考代码和几个测试示例。

CodeData-L数据集从各种工程项目中提取了200个示例,涵盖了Web开发的标准工作流程,包括数据库开发、后端开发和前端开发场景。选定的示例涵盖了数据操作、实用工具和典型的业务逻辑。目标语言包括SQL、Java、PHP、Python和JavaScript。这个数据集从不同的角度接近评估,旨在评估经过微调后的生成结果是否达到了预期的效果。

图10. 改进史蒂夫·乔布斯iPhone 14的个人主页。

多轮对话会话对开发者来说是有满足感的。通常,实验从使用自然语言描述和函数签名作为第一轮的原始提示开始。

在HumanEval数据集上,我们将人类编写的程序视为真实情况,并采用两种类型的指标来评估生成的代码[33]、[34]、[35]、[36]。

基于比较的指标:使用了三种广泛使用的指标来评估生成的代码与真实情况的相似性。

1)EM分数是生成的代码与真实情况之间的匹配程度,用于衡量准确性。

2)BLEU分数是一个用于评估生成的代码与真实情况之间相似性的指标。它使用以下公式计算n-gram相似性:

BLEU=BP⋅(∑n=1Nwnlog⁡pn)BLEU=BP⋅(∑n=1N​wn​logpn​)

N是我们实验中考虑的最大n-gram阶数,我们将其设置为4。wnwn​是与n-gram精确度相关的权重。pnpn​是n-gram的精确度。BP是简洁性惩罚,它惩罚生成的代码比参考代码短。

  1. 代码BLEU得分是一种超越了BLEU得分在n-gram匹配中的优势的变体。它通过抽象语法树(AST)整合代码语法,并通过数据流整合代码语义,衡量语法正确性和逻辑正确性,从而扩展其能力。

基于执行的指标:评估生成代码的实际执行性能。

  1. Pass@1是在随机过程中生成代码通过单元测试的期望值。Pass@1被广泛用作pass@k指标的一个实例。

如果Pass@k得分低但CodeBLEU得分高,这表明模型生成的与正确代码非常接近的结果。然而,错误可能以代码的关键细节预先呈现,需要考虑程序修复或手动干预。否则,这表明模型生成了具有不同结构但正确结果的替代解决方案。因此,我们采用了所有四个指标来评估生成输出的有效性。

代码生成的最后目标是确认其在开发过程中的实际支持。因此,在CodeData-L上进行了人类评估。

人类评估部分依赖于通用度量模型[37]和代码生成评估指标(CGEMs)[38]中的某些指标。

表4显示了人类评估指标,包括功能、质量、复杂性和可维护性。每个测试用例的分数被分配,每个评级按照百分比尺度标准化,然后计算平均分数。如果一个案例在单轮中代码生成得分超过80分,则该案例被归类为满意。如果在多次优化轮次后得分持续超过80分,则该案例被标记为修改。如果达到最大尝试次数(10轮),得分仍然低于80分,则该案例被表示为失败。

B. 代码评估

问题1:我们设计的提示优化方法是否增强了ChatGPT的代码生成效果?

设置。我们进行了消融实验,比较了提示优化前后的生成性能。所使用的指标包括第V-A节提到的指标,如EM、BLEU、CodeBLEU和Pass@1。更高的分数表明所有指标的性能更优。

结果与分析。我们的提示构建器已被证明能够有效优化ChatGPT的生成结果。表5展示了消融实验的结果。使用提示构建器在EM上提高了65.06%65.06%,在BLEU上提高了38.45%38.45%,在CodeBLEU上提高了15.70%15.70%,在Pass@1上提高了50.64%50.64%。

答案RQ1:提示构建器可以对Chat-GPT中的代码生成带来显著的改进。使用提示构建器实现了巨大的改进:在EM方面提高了65.06%65.06%,在BLEU方面提高了38.45%38.45%,在CodeBLEU方面提高了15.70%15.70%,在Pass@1方面提高了50.64%50.64%。结合第四节中的消融研究和案例研究,我们证明了提示构建器在各个方面都取得了显著的有效性,包括生成过程和结果。

C. 人类评估

问题2:ChatGPT与提示工程在代码生成方面的结合是否真的可以帮助软件开发人员?

设置。案例选择涵盖了三种类型的场景。实验涉及生成数据库查询语句、开发常用的实用类和典型业务代码,以及为前端页面创建可视化。开发者使用第五节A中呈现的指标对所有测试用例进行评分和评估,获得最终的统计结果。

结果与分析。ChatGPT在由精心设计的提示引导下,在支持跨多样化场景的代码生成方面表现卓越。图11根据目标语言提供了统计数据的分类显示。统计数据证实了ChatGPT生成的底层代码质量达到了高标准。然而,在前端代码方面,生成的结果存在不足。对于视觉元素,操作员必须首先掌握自然语言描述中概述的精确边界。此外,由于前端页面中样式和图形调整的广泛性,这个过程的描述在语言上显得相当复杂。

Metric Score Feature
Functionality 2=Yes 1= Partial 0=No Whether the generated code accomplishes the requirements specified in the natural language description.
Quality out of 100 The existence of bugs, and code smells in the generated code. Code quality is a common set of requirements for all software projects.
Complexity out of 100 Time complexity is assessed through runtime evaluation, while space complexity is evaluated based on metrics such as cyclomatic complexity and code size.
Maintainability out of 100 Whether the implementation adheres to standardization and exhibits good readability.

表5.消融研究结果。

Model Prompt Builder EM BLEU CodeBLEU Pass@1
X 12.05 26.92 40.96 25.18
ChatGPT 19.89(↑65.06%) 37.27(↑38.45%) 47.39(↑15.70%) 37.93(↑50.64%)

图12展示了所有场景的统计数据。饼图显示了80%的成功率(满意)、18.5%的修改后成功率以及1.5%的失败率。值得注意的是,即使在多次提问之后,只有1.5%的场景未能达到预期的状态。

答案RQ2:经过PE优化后,ChatGPT生成的代码现在有望帮助开发者进行实际开发。此外,PE和ChatGPT最显著的优势在于其效率。在处理不熟悉的编程语言或为复杂场景开发功能时,直接从自然语言要求生成代码可以显著降低软件开发成本,提高准确性,并最小化人为错误。ChatGPT不仅提供了预训练和简化的解决方案,还展示了在解决错误提示和约束方面的鲁棒性。随着模型准确性的不断提高,基于ChatGPT的代码生成解决方案预计将成为代码生成领域中最实用的选择。

图11. 基于编程语言的代码质量统计。

图12:生成代码场景的所有实例的通过率统计。

D. 缺点与挑战

问题3:使用ChatGPT进行代码生成有哪些局限性,未来的研究方向是什么?

本研究还发现了该工具相关的局限性。检查这些局限性可以洞察出必须解决的技术持续发展的挑战。以下讨论将深入探讨这些方面。

1)ChatGPT固有的挑战

ChatGPT在大规模预训练模型的当前阶段存在固有缺陷。这些问题包括信息生成准确性和及时性的挑战,以及倾向于重复或过于冗长的输出和潜在的指导误导实例。同样,还有模型版本迭代和可解释性问题。

生成能力。根据我们的研究,当ChatGPT被赋予生成特定功能的任务时,它有一定概率“制造”不存在的类或第三方包。由于描述不准确,它可能生成逻辑上明显矛盾的功能。有时,ChatGPT甚至会生成一些毫无意义的功能操作。

图13。PHPWord操作代码生成结果。

图14。GPT-3.5在数组排序和连接功能上的代码生成结果。

例如,在一个使用PHPWord执行Word文档操作的任务中,展示了特定的代码片段,如图13所示。可以观察到ChatGPT生成了一个名为generateLineChart的函数,旨在生成线形图表图像并将其插入Word文档中。然而,检查实际代码实现后,发现没有有意义的操作。

版本迭代。如今,GPT-4被广泛使用,它似乎比GPT-3.5更高效。尽管我们基于GPT-3.5开发了我们的工具,但我们使用了一个示例来比较两个GPT版本之间代码生成的输出。

任务描述如下:编写Java代码,分别连接长度为5和8的两个int数组,然后按升序对组合数组进行排序。GPT-3.5的生成结果显示在图14中。

GPT-4的生成结果显示在图15中。就代码风格而言,GPT-4的响应展示了一种更加标准化和清晰的编码风格。例如,它利用一个名为ConcatenateAndSort的单独函数来实现数组连接和排序的功能,提高了代码的可读性和可维护性。相比之下,GPT-3.5的响应直接将整个功能集成到Main函数中。关于输出格式,GPT-4的响应使用foreach循环逐个输出排序后的元素,因此使得结果更容易阅读。另一方面,GPT-3.5的回应利用Arrays.toString方法将结果数组的所有元素连接成一个字符串以供输出。

总之,GPT-4在代码组合和技术问题阐述方面展示了优势。然而,

图15。GPT-4在数组排序和连接功能上的代码生成结果。

考虑到OpenAI API调用的当前定价结构,广泛使用GPT-4 API必然会带来巨大的成本开销。尽管如此,随着版本更新和迭代带来的性能预期提升,未来的研究工作预计将逐渐过渡到GPT-4。此外,尽管版本可能会进行迭代,我们的工具将集成ChatGPT的不同版本,并为用户提供相应的接口以访问。当前的用户界面也提供了相关接口,允许用户配置独立的API密钥,在设置标签中选择OpenAI模型的不同版本。

可解释性。可解释性涉及理解模型的行为。本文主要关注探索ChatGPT的代码生成能力以及提示工程如何增强其生成性能。然而,可解释性的重要性在于我们如何通过解释来培养对模型的信任,从而促进更安全、可靠的应用的创建。尽管如此,仅分析生成的序列仍然不能确定代码生成模型有效或无效的原因。主要的挑战源于通过代码生成模型预测新代码序列的基础知识仍然大部分未知。在这种情况下,刘等人[40]深入探讨了自动化代码生成方法的可靠性和可解释性。

此外,由于ChatGPT的生成依赖于统计模型和概率,这意味着通过机器驱动的匹配生成相当数量的非事实性结果。这在应用中引入了伦理和信息风险。此外,该模型确保传输信息保密性的能力不足可能会引发关于数据隐私保护的问题。在我们的工具中,当用户在软件开发过程中使用该工具生成源代码时,我们将向用户提供一些安全风险警告。然而,这还不够,未来我们还将整合现有研究来调查ChatGPT生成模型的可靠性和可解释性方面。例如,我们可以将相应的算法开发成模块,并将其集成到工具中,利用可解释性和可靠性分析作为反馈机制来促进更好的代码生成。

2) 提示的定义标准

本研究对提示的结构提出了重大要求,这是由高质量代码生成的必要性所驱动的。在实现代码生成以满足这项研究的需求中,已经采用了多种提示优化技术。最有洞察力的观察是围绕提示的标准化。如果描述本质上是模糊或不精确的,即使实现了符合期望的结果,也会变得更加具有挑战性。然而,由于人类语言的基本不精确性和机器对人类语音理解的当前局限性,因此需要采用PE等技术。PE依赖于高质量提示,结合明确的场景、清晰的描述和全面的指导,以增强特定任务的执行。在我们的实验中,我们设计了提示构建器组件,以帮助用户降低学习成本,并使他们能够在使用过程中专注于任务本身。

从长期角度来看,提示可能代表了自然语言编程演变的过渡阶段。未来可能会见证更多用户友好的交互格式或AI产品的出现,这些产品具有增强的理解能力。尽管如此,在当前情况下,PE仍然是增强ChatGPT模型性能的最直接有效方法。表5中的消融实验结果也表明,设计良好的提示可以显著提高ChatGPT的生成输出。

3) 单轮和多轮对话

代码生成本质上复杂,提供了产生简洁代码片段、完成实用函数或通过生成大量代码文件来解决复杂场景的可能性。基于表5中的消融实验结果,很明显单轮生成结果的准确性仍然相当有限。此外,在这一点上,提示已经显著扩展了规模。在处理复杂场景时,多轮对话的不可避免性变得明显。图11和图12的结果表明,多轮提问后的生成结果令人满意。然而,开发者必须在每轮之后审查生成结果,并相应地进行下一轮提问,这不可避免地会花费相当多的时间。

基于我们的发现,ChatGPT在上下文理解、生成内容的连贯性、复杂对话的理解以及错误纠正等方面都有很大的改进空间。此外,单轮对话和多轮对话之间存在固有的矛盾。为了提高生成速度,更可取的是在单轮内最大化内容输出,尽管这可能会使需求描述变得更加复杂。相反,通过多轮对话优化生成性能可能会引入挑战,如内容生成碎片化和处理速度慢。在长期内实现两者的平衡可能需要持续探索。

回答RQ3:使用ChatGPT进行代码生成存在三个缺点,包括固有的局限性、PE标准中的矛盾以及单轮与多轮生成之间的冲突。未来的探索可能会在OpenAI的官方计划中找到指导[39]。例如,高级代码生成任务涉及在线代码编辑、代码调试以及利用视觉用户界面设计图。我们的代码生成服务还将集成ChatGPT本身或其他模型的更新迭代,支持直接生成代码文件,并考虑与IDE工具的集成。此外,我们将进一步考虑自动代码生成的可靠性和可解释性。然而,首要目标仍然是持续提高代码生成的质量和效率。

VI. 结论

我们使用ChatGPT和PE开发了一个在线代码生成服务,通过调试和优化提高了模型的生成性能。我们从多个角度对生成的代码进行了全面分析和评估,证实了这种方法的优势。

我们的研究确认,在高质量提示的帮助下,ChatGPT可以熟练地生成源代码,为研究人员和开发者提供宝贵的解决方案。然而,在结果方面,ChatGPT和生成式AI仍然是辅助工具,能够帮助用户完成任务,但有效性仍然严重依赖于人类输入。盲目依赖大型模型是不明智的。相反,将专业知识和智慧与现有模型集成是释放它们全部潜力的关键。

致谢

(李月佳和石建军是共同第一作者。)

参考文献

[1] 张峰, 高国栋, 唐天, 袁大东, 张飞, 王刚, 肖波, 秦宝清, 刘涛, 江东, 周明,“CodeBERT:一个用于编程和自然语言的预训练模型”,2020年,arXiv:2002.08155。

[2] W. U. Ahmad, S. Chakraborty, B. Ray, K.-W.张,“统一预训练用于程序理解和生成”,2021年,arXiv:2103.06333。

[3] L. Phan, H. Tran, D. Le, H. Nguyen, J. Anibal, A. Peltekian, 和 Y. Ye,“CoTexT:使用代码-文本变换器的多任务学习”,2021年,arXiv:2105.08645。

[4] P.Maddigan 和 T. Susnjak,“Chat2VIS:通过自然语言使用ChatGPT、法典和GPT-3大型语言模型生成数据可视化”,IEEE Access,第11卷,第45181-45193页,2023年。

[5] M. Al-Hawawreh, A. Aljuhani, 和 Y. Jararweh,“Chatgpt用于网络安全:实际应用、挑战和未来方向”,Cluster Comput.,第26卷,第6期,第3421-3436页,2023年12月。

[6] M.Remountakis, K. Kotis, B. Kourtzis, 和 G.E. Tsekouras,“使用ChatGPT和说服技术进行酒店升级个性化推荐消息”,Information,第14卷,第9期,第504页,2023年6月。

[7] H.Du, S.Teng, H.Chen, J.Ma, X.Wang, C.Gou, B.Li, S.Ma, Q.Miao, X.Na, P.Ye, H.Zhang, G.Luo, 和 F.-Y.Wang,“智能车辆上的Chat与ChatGPT:IEEE TIV视角”,IEEE Trans. Intell.Vehicles,第8卷,第3期,第2020-2026页,2023年3月。

[8] M. Chen 等人,“评估在代码上训练的大型语言模型”,2021年,arXiv:2107.03374。

[9] K. Papineni, S. Roukos, T. Ward, 和 W.-J. Zhu,“BLEU:一种自动评估机器翻译的方法”,在Proc.40th Annual Meeting of Assoc. Comput. Linguistics, 2002年,第311-318页。

[10] S.Ren, D.Guo, S.Lu, L.Zhou, S.Liu, D.Tang, N.Sundaresan, M.Zhou, A. Blanco, 和 S. Ma,“CodeBLEU:一种自动评估代码合成的方法”,2020年,arXiv:2009.10297。

[11] B. Yang, N. Zhang, S.-P. Li, 和 X.抱歉,您提供的文本中包含了一些无法识别的字符和乱码,我无法根据这些信息提供准确的翻译服务。如果您能提供更多的上下文信息或者明确的问题,我会很乐意帮助您。普拉瑟,“机器人来了:探索OpenAI语典对入门编程的影响”,发表于第24届澳大利亚计算机教育会议论文集,2022年,第10-19页。

[22] J. A. 帕伦纳和 R. 鲁布斯,“使用OpenAI语典的自动程序修复:评估QuixBugs”,2021年,arXiv:2111.03922。

[23] B.T.H. 费尔、B.Ahmad、R.Karri 和 B.Dolan-Gavitt,“OpenAI语典和其他大型语言模型能否帮助我们修复安全漏洞”,2021年,arXiv:2112.02125。

[24] I. 杰克逊和 M. 耶稣·萨森斯,“从自然语言到模拟:应用GPT-3语典自动化物流系统的模拟建模”,2022年,arXiv:2202.12107。

[25] OpenAI。(2022)。ChatGPT:优化对话中的语言模型。[在线]。可获取:https://openai.com/blog/chatgpt

[26] OpenAI。(2023)。介绍ChatGPT Plus。[在线]。可获取:https://openai.com/blog/chatgpt-plus

[27] Y. 王、S. 沙瓦雅耶、N. 李、W. 戴、D. 苏、B. 维利、H. 莫伦尼亚、Z. 吴、T. 叶、W. 郑、Q. V. 东、Y. 徐 和 P. 方,“对ChatGPT在推理、幻觉和互动方面的多任务、多语言、多模态评估”,2023年,arXiv:2302.04023。

[28] OPENAI。(2023)。GPT-4是OpenAI最先进的系统,产生更安全、更有用的回应。[在线]。可获取:https://openai.com/gpt-4

[29] L. 戈,“使用元认知提示增强自我调节学习和学习成果:基于计算机学习环境的实验研究的荟萃分析”,《计算辅助学习杂志》,第38卷,第3期,第811-832页,2022年6月。

[30] C. 秦、A. 张、Z. 张、J. 陈、M. 安山、D. 杨,“ChatGPT是一个通用自然语言处理任务求解器吗?”2023年,arXiv:2302.06476。

[31] DAIR. AI.(2023). 提示工程指南。[在线]. 可获取:https://www.promptingguide.ai/

[32]陈X, 林M, 舒拉尼N, 周D,“教授大型语言模型自我调试”,2023年,arXiv:2304.05128。

[33]尹P, 尼古贝G,“TRANX:一种基于转换的神经抽象语法解析器,用于语义解析和代码生成”,2018年,arXiv:1810.02720。

[34]孙Z, 朱Q, 孙Y, 孙Y, 穆L, 张L,“TreeGen:一种基于树的变压器架构,用于代码生成”,收录于《AAAI Conf.Artif.Intell.》会议论文集,2020年,第34卷,第5期,第8984-8991页。

[35]詹D, 陈B, 杨D, 林Z, 金M, 关B, 王Y, 陈W, 卢J.-G,“CERT:针对面向库的代码生成的持续预训练”,2022年,arXiv:2206.06888。

[36]李J, 李Y, 李G, 金Z, 郝Y, 胡X,“SkCoder:一种基于草图的自动代码生成方法”,2023年,arXiv:2302.06144。

[37]李Z, 江Y, 张X, 徐H,“自动代码生成的度量标准”,收录于《Comput. Sci.》会议论文集,第166卷,第279-286页,2020年。

[38]纳拉斯米汉A, 罗A.P.K.A.,“CGEMs:一种使用GPT-3的自动代码生成度量模型”,2021年,arXiv:2108.10168。

[39]彭A, 吴M, 扎尔德J, 克拉克P, 何德勒S。(2023)GPT-3.5 Turbo Fine-Tuning and API Updates。[在线]. 可获取:https://openai.com/blog/gpt-3-5-turbo-fine-tuning-and-api-updates

[40]刘Y, 特纳西姆塔万C, 刘Y, 李L,“关于程序生成的语言模型的可靠性和可解释性”,2023年,arXiv:2302.09587。

余晓佳毕业于安徽合肥中国科学技术大学计算机科学硕士学位,目前是中国科学院紫金山实验室的项目负责人。他在软件工程领域拥有丰富的行业经验,并且最近专注于解决实际问题。

猜你喜欢

转载自blog.csdn.net/sinat_37574187/article/details/143471690