这个观点在卡内基梅隆大学与谷歌研究人员合作文章

《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助手的效果,在网络浏览器中直接搜索网页的效果,以及在两者之间测量任务完成率和代码理解程度来进行量化对比。此外,我们通过定性研究参与者如何使用这两个工具,以及他们对这一新型交互模式的总体满意度来深入探讨。

具体来说,我们回答了以下三个研究问题:

  1. GILT在面对陌生代码时,对开发者理解程度、任务完成时间以及任务完成率的影响有多大?
  2. 开发人员如何与GILT进行互动,不同参与者之间有何差异?
  3. 开发人员如何看待GILT的有用性?

我们的结果证实,在使用GILT(Generation-based Information-support with LLM Technology)来完成任务时,相较于进行网页搜索,我们确实取得了统计意义上显著的优势,显示了这种资讯支援的实用性。然而,我们并未在时间效率及理解深度上发现同样的提升,这为我们未来改进留下了空间。我们还发现,这种效益的幅度在学生和专业人士之间有所差异,并对此进行了探讨。

结论

我们进行了一项用户研究,旨在调查使用大型语言模型(LLMs)进行生成式信息支持以帮助开发者理解代码的有效性。借助我们的内嵌IDE原型工具GILT,我们展示了这种方法显著增强了开发者完成任务的能力,与传统的基于搜索的信息获取相比。同时,我们也发现在学生和专业人士之间,开发者可以从工具中获得的好处程度不同,他们与工具的交互方式也基于自己的学习风格和对其他AI工具的熟悉度不同。

与LLMs进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向的更多相关文章

  1. Quick-Cocos2d3.2RC1在Code IDE中实现代码提示

    之前写Lua最痛苦的就是代码提示问题,如今官方给了IDE很好用.以下说Quick使用IDE加入代码提示问题. 第一步:制作api提示压缩包. 须要使用控制台实现方法例如以下: 1.找到framewor ...

  2. Delphi 提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。

    对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...

  3. 方案:在Eclipse IDE 中搭建Python开发环境

    Eclipse是一款功能强大的IDE,Python是一种功能强大的计算机语言,但是Python的IDE环境确实很缺乏,如果在强大的Eclipse中添加Python开发环境,那样就很完美了. 在这里,我 ...

  4. 2018-02-02-解决IDE中无法忽略的非代码文件

    layout: post title: 2018-02-02-解决IDE中无法忽略的非代码文件 key: 20180202 tags: GIT 版本管理 modify_date: 2018-02-02 ...

  5. VS IDE 中Visual C++ 中的项目属性配置

    VS IDE 中Visual C++ 中的项目属性配置 一. Visual C++ 项目系统基于 MSBuild. 虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 VS IDE ...

  6. AppCan IDE中有时格式化代码后,代码就运行不了了。

    AppCan IDE中有时格式化代码后,代码就运行不了了.

  7. Java实现图形界面的三部曲及IDE中的窗口设计

    设计和实现图形用户界面的工作主要有以下几点: • (1)创建组件(Component) • 创建组成界面的各种元素,如按钮.文本框等.• (2)指定布局(Layout) • 根据具体需要排列它们的位置 ...

  8. 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符“A”的个数,并将结果显示在屏幕上。

    问题 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符"A"的个数,并将结果显示在屏幕上. 代码 data ...

  9. 在IDE中添加widfly依赖

    动机:在IDE中添加widfly依赖 原由:widfly实现了servlet接口,有我们对外交互时所需求的jar包 步骤: 第一步: 找到module依赖的地方 第二步:点击左侧的添加按钮,点击Lib ...

  10. 安全运维中基线检查的自动化之ansible工具巧用

    i春秋作家:yanzm 原文来自:安全运维中基线检查的自动化之ansible工具巧用 前几周斗哥分享了基线检查获取数据的脚本,但是在面对上百台的服务器,每台服务器上都跑一遍脚本那工作量可想而知,而且都 ...

随机推荐

  1. FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"2.1.1  音视频编码的发展历程"介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频 ...

  2. 鸿蒙生态伙伴SDK市场正式发布,驱动千行百业鸿蒙原生应用开发

    6月21-23日,华为开发者大会(HDC 2024)在东莞举办.在22日举办的[鸿蒙生态伙伴SDK]论坛中,正式发布了[鸿蒙生态伙伴SDK市场](以下简称:伙伴SDK市场),伙伴SDK市场是为开发者提 ...

  3. Java JVM——11. 执行引擎

    1.概述 执行引擎属于JVM的下层,里面包括:解释器.即时编译器.垃圾回收器. 执行引擎是Java虚拟机核心的组成部分之一."虚拟机"是一个相对于"物理机"的概 ...

  4. QEMU + Vscode + Arm Arch's Linux调试小记

    QEMU + Vscode + Arm Arch's Linux调试小记 ​ 前几天看到了一篇讲授如何调试ARM Linux内核的文章,这里现在记录一下调试ARM Linux内核的办法 下载QEMU ...

  5. package-lock.json 文件

    今天有同事找到我说,本地js 编译不过,编译不过的代码如下 const host = window?.location?.host || 'localhost'; 是option chaining, ...

  6. 韦东山freeRTOS系列教程之【第九章】任务通知(Task Notifications)

    目录 系列教程总目录 概述 9.1 任务通知的特性 9.1.1 优势及限制 9.1.2 通知状态和通知值 9.2 任务通知的使用 9.2.1 两类函数 9.2.2 xTaskNotifyGive/ul ...

  7. Vue3 如何接入 i18n 实现国际化多语言

    1. 基本方法 在 Vue.js 3 中实现网页的国际化多语言,最常用的包是 vue-i18n,通常我们会与 vue-i18n-routing 一起使用. vue-i18n 负责根据当前页面的语言渲染 ...

  8. SpringCloud连接远程nacos报错,一直提示连接本地的localhost:8848

    application.properties spring.cloud.nacos.discovery.server-addr=xxx.xxx.xxx.xxx:8848 spring.applicat ...

  9. react-devtools安装以及使用中的问题

    使用react框架开发的小伙伴肯定都想使用想vue-devtools开发工具一样,可以看见组件的状态,和当前组件里的props,data等等. 当然react也有一个开发者工具,现在废话少说,开始安装 ...

  10. 解决方案 | cvxpy成功安装过程及其使用攻略

    背景:  由于需要研究KKT条件下的最优化问题,需要安装一个python的包cvxpy. 过程: 1.正常pip install cvxpy 不可取(不会成功,中间有报错): 2.主要错误在于:其依赖 ...