这个观点在卡内基梅隆大学与谷歌研究人员合作文章
《Using an LLM to Help With Code Understanding》
中提出。
论文地址:https://dl.acm.org/doi/abs/10.1145/3597503.3639187
摘要
理解代码非常具有挑战性,尤其是在新且复杂的开发环境中。代码注释和文档可以帮助,但通常资源不足或难以导航。大型语言模型(LLMs)正在彻底改变编写代码的过程。它们是否能同样助力于理解代码?
本研究提供了LLM为基础的对话型用户界面的首次研究,该界面直接嵌入IDE(集成开发环境)中,旨在促进代码的理解。
我们的IDE插件使用OpenAI的GPT-3.5-turbo模型查询四项高级请求,用户无需编写明确的提示即可完成这些请求:解释高亮代码段、提供代码中使用的API详情、解释特定领域的术语以及提供API的使用示例。
该插件还支持开放式提示,这些提示会自动根据正在编辑的程序对LLM进行上下文化。
我们将这个系统在32位参与者中进行用户研究评价,结果显示使用我们的插件可以比网页搜索更加促进任务的完成。
我们还详细分析了开发人员如何使用我们的系统,以及他们认为系统有用的方式。其中发现,学生和专业人员使用系统及从中获得的利益有所不同。
我们总结指出,与大型语言模型进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向。
介绍
构建和维护软件系统需要对代码库有深刻的理解。因此,开发人员要花费大量的时间来搜索和搜集他们所需的信息,并组织和消化他们找到的所需要的信息。
理解代码是一项艰巨的任务,开发人员需要吸收大量的有关代码语义、使用的API细微之处以及相关领域的专业知识的信息。
这些信息通常散落在多个来源中,对于开发者,尤其是初学者或那些与不熟悉的API协同工作的开发者来说,要找到需要的信息会变得非常困难。此外,大部分相关的信息大多未得到充分的文档化,或者散布在不同的格式和介质中,最终导致信息过时。
随着大型语言模型(LLM)驱动的代码生成工具的兴起,对代码理解的信息支持的需求显然也在增加。
这些工具能够自动生成代码,即使是那些编程技巧有限或者对特定领域知识了解不多的开发者也能获得有效的结果。然而,这种便利性往往伴随着代价------开发者可能会得到完全不懂的代码。
的确,对LLM代码生成工具的早期研究发现,开发人员在调试由LLM生成的代码时会遇到困难,并且很容易感到沮丧。
幸运的是,LLMs(大型语言模型)在这个领域也提供了一个机会,即通过提供面向开发者的即需即用的基于代码生成的信息支持,帮助他们处理遇到的不熟悉代码问题。
与一般的网络搜索查询相比,LLM(大型语言模型)提示可以让开发者提供更多的上下文信息。这实际上能够使他们获取到更加精确地符合自己具体需求的信息。相较于从网络上获取大量信息然后再筛选出符合特定需求的内容,使用LLM提示在时间投入上可能更加节省。
开发人员确实开始大规模使用像ChatGPT这样的基于网络的会话LLM工具来获取编程支持,但这种设置需要他们在切换上下文时再将相关上下文从集成开发环境中复制到聊天系统中以获得支持。
为了探究生成式信息支持直接在开发者的编程环境中的应用潜力,我们开发了一个名为GILT(Generation-based Information-support with LLM Technology)的原型工具。
GILT能够生成个性化的、即时的信息,并将其与用户的本地编码环境相结合。我们通过在提供给后台语言模型(LLM)的提示中融入这些信息,将这种方法与LLM的交互变得更为自然。这种方式还引入了一种全新的交互方式,无需提供提示。这一设计旨在减轻那些对特定领域或编程知识了解有限的开发人员在编写提示时所承受的认知负担。
鉴于利用大型语言模型(LLM)提供信息支持(而非仅代码生成)的最佳实践知识尚不充分,我们进行了一项探索性用户研究,共有32名参与者被分配任务:理解并扩展涉及新领域概念以及Python数据可视化和3D渲染API的陌生代码这段充满挑战性的任务。我们的研究通过比较在一个代码编辑器内部使用带有LLM助手的效果,在网络浏览器中直接搜索网页的效果,以及在两者之间测量任务完成率和代码理解程度来进行量化对比。此外,我们通过定性研究参与者如何使用这两个工具,以及他们对这一新型交互模式的总体满意度来深入探讨。
具体来说,我们回答了以下三个研究问题:
- GILT在面对陌生代码时,对开发者理解程度、任务完成时间以及任务完成率的影响有多大?
- 开发人员如何与GILT进行互动,不同参与者之间有何差异?
- 开发人员如何看待GILT的有用性?
我们的结果证实,在使用GILT(Generation-based Information-support with LLM Technology)来完成任务时,相较于进行网页搜索,我们确实取得了统计意义上显著的优势,显示了这种资讯支援的实用性。然而,我们并未在时间效率及理解深度上发现同样的提升,这为我们未来改进留下了空间。我们还发现,这种效益的幅度在学生和专业人士之间有所差异,并对此进行了探讨。
结论
我们进行了一项用户研究,旨在调查使用大型语言模型(LLMs)进行生成式信息支持以帮助开发者理解代码的有效性。借助我们的内嵌IDE原型工具GILT,我们展示了这种方法显著增强了开发者完成任务的能力,与传统的基于搜索的信息获取相比。同时,我们也发现在学生和专业人士之间,开发者可以从工具中获得的好处程度不同,他们与工具的交互方式也基于自己的学习风格和对其他AI工具的熟悉度不同。