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

《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. 百度地图API 循环添加信息窗口问题

    百度地图API循环添加信息窗口,会出现所有消息只显示在第一个窗口的位置的问题.并且信息内容相同 解决方法1 转载自 https://blog.csdn.net/zz_mm/article/detail ...

  2. bugly进阶01-集成bugly时的相关参数

    bugly进阶01-集成bugly时的相关参数 个人github CSDN博客 前言 bugly的集成十分的简单,在代码中只需要简单的一个语句就可以轻松集成: - (BOOL)application: ...

  3. Python图像暗水印添加

    推荐使用库:   blind-watermark pip install blind-watermark https://github.com/guofei9987/blind_watermark

  4. 【资料分享】全志科技T507工业核心板硬件说明书(上)

    目    录 前言 1硬件资源 1.1CPU 1.2ROM 1.3RAM 1.4时钟系统 1.5电源 1.6LED 1.7外设资源 2引脚说明 2.1引脚排列 2.2引脚定义 2.3内部引脚使用说明 ...

  5. 五个节点的hadoop集群--主要配置文件

    五个节点:配置文件解析:hadoop01               NameNode .DataNode.NodeManagerhadoop02 ResourceManager hadoop03 D ...

  6. PaddleNLP UIE -- 药品说明书信息抽取(名称、规格、用法、用量)

    目录 创建项目 环境配置 上传代码 训练定制 代码结构 数据标注 准备语料库 数据标注 导出数据 数据转换 doccano Label Studio 模型微调 模型评估 定制模型--预测 效果 Pad ...

  7. LSTM实现文本情感分类demo

    import torch import torch.optim as optim import torch.nn as nn import numpy as np import torch.nn.fu ...

  8. 存储器与CPU的连接

    存储器与CPU连接分主要看前五步 1.首先根据给出的地址范围写出二进制码 2.确定芯片的类型和数量 3.确定地址线 4.确定片选信号 要注意MREQ是低电平有效,要连到138译码器的低电平

  9. webpack4.15.1 学习笔记(二) — 配置及开发环境构建

    目录 基本安装 配置文件 管理资源 管理输出 构建一个开发环境 使用 source map 选择一个开发工具 观察模式 webpack-dev-server webpack-dev-middlewar ...

  10. MySql创建事件、计划、定时运行

    CREATE EVENT IF NOT EXISTS check_timeout_eventON SCHEDULE EVERY 30 MINUTEDOBEGIN UPDATE safetyApp_in ...