关于AI编程的理解:
1. 如何将意图明确的告知LLM是非常关键的,可以通过流程化(任务分解,、分治、结构化)的方式进行子意图聚焦;
2. 可以在多个层次进行代码提效, 目标、意图、提示、伪代码和生成代码;
3. 在当前情况下,使用AI Agent协助编程,基本上等同于使用AI Agent 能懂得形式进行编程;优势:不受限于某种编程语言,劣势:需要懂得LLM的核心原理;
4. 对于LLM生成的回答或者代码,好不好是相对的;对于一个编程小白,生成出来有UI能快速用起来就是好东西;对于高工以上,需要保障代码的稳定性、是否符合业务预期等才是更重要的,这个的代码生成难度就更高;
5. CoLadder:提供的一个相对体系化的方式进行AI编程提效;以下是CoLadder论文的部分翻译;
6. 其他,想到再说;
CoLadder: Supporting Programmers with Hierarchical Code Generation in Multi-Level Abstraction
https://arxiv.org/pdf/2310.08699
程序员越来越多地依赖大语言模型(LLMs)进行代码生成。然而,程序员的目标与生成代码之间的不一致性使得代码评估过程变得复杂,并需要在提示编写和代码评估之间频繁切换。然而,当前基于 LLM 的代码助手缺乏足够的支持,无法帮助程序员从其总体目标中明确意图,而这是将这些意图转化为自然语言提示的关键步骤。为了解决这一问题,我们采用了迭代设计过程,深入研究了程序员在使用 LLM 进行编程时的策略。基于这些发现,我们开发了 CoLadder,这是一个支持程序员的系统,通过促进分层任务分解、直接代码片段操作以及在提示编写过程中的结果评估来提供帮助。一项针对 12 名经验丰富的程序员的用户研究表明,CoLadder 能够有效帮助程序员灵活地外化其问题解决意图,并提升他们在从目标到最终代码实现的不同抽象层次中评估和修改代码的能力。
large language model, code generation, LLM-driven system, prompt engineering, cognitive engineering
近年来,大语言模型(LLMs)的进展推动了 AI 驱动的代码助手的显著发展 15, 29, 48,并改变了程序员的工作流程 41, 58, 77。这些基于 LLM 的代码助手已将其功能从代码补全扩展到根据自然语言(NL)提示生成高质量的代码建议。程序员现在可以将高层次目标转化为 NL 提示,而无需处理底层代码的复杂性。尽管这一独特能力可能提高编程效率,但最近关于程序员与 LLM 驱动的代码助手交互的研究揭示了他们在评估其意图与生成代码之间一致性时面临的挑战 52, 58, 71, 77。这种意图不一致进一步要求程序员迭代优化提示,增加了他们的工作量和认知负担 26, 53, 74, 86。
这一评估挑战的出现源于将程序员目标转化为生成代码的模糊过程(图 2 中的“执行鸿沟”)。为了克服这一挑战,有必要弥合总体目标与实现该目标所需的具体意图之间的差距(图 2 中的“目标-意图”),以及这些意图与代码生成所需的自然语言提示之间的差距(图 2 中的“意图-代码”)。第一个差距涉及意图形成和意图外化过程。在这一阶段,程序员必须通过规划和目标分解来明确其意图,随后将这些意图转化为 NL 提示。第二个差距通常被称为抽象鸿沟(图 2.G),导致了抽象匹配的挑战。程序员必须不断优化其提示,以确保其包含足够的细节,使模型能够生成准确的代码。由于抽象鸿沟的存在,程序员的提示往往缺乏 LLM 准确将其意图转化为生成代码所需的关键具体性和精确性。例如,程序员可能希望在点击提交按钮时验证电子邮件地址,并在提示中表达为“提交表单时验证电子邮件”。然而,生成的代码可能实现的是在调用 API 时触发的验证机制,偏离了在用户界面点击提交按钮时立即验证电子邮件的原始意图。
研究人员提出了多种技术来支持第二个差距——程序员明确意图与 NL 提示之间的抽象鸿沟。例如,Liu 等人提出了基于抽象匹配的接地技术,该技术涉及将代码翻译回可预测的 NL 表达式 52。另一种主要方法是将复杂提示分解为预定义抽象层次的子提示 13, 38, 68, 85, 86。具体而言,编程任务被划分为更小、更易管理的子任务,每个子任务都处于设定的复杂性或细节水平。
然而,先前的研究并未在程序员使用 LLM 驱动的代码助手的背景下解决第一个差距——意图形成和外化过程(图 2.E, F),即总体目标与程序员具体意图之间的差距——尽管这是成功解决编程任务的关键因素 36, 44。意图形成过程涉及程序员从高层次目标到具体意图的认知思考过程,可能包括确定需要做什么或如何实现目标。意图外化过程则涉及进一步将这些意图转化为可执行的 NL 提示。继续以电子邮件验证为例,程序员通常从一个更高层次的目标开始,例如“创建一个登录页面”。程序员必须进一步将该目标分解为子目标,详细说明如何或采取什么行动,例如添加输入字段或在用户输入时更新值。目标分解和意图形成过程是程序员解决问题以及 LLM 生成与程序员意图一致的代码的关键步骤。
因此,本研究的目标是探索支持程序员在意图形成过程及随后的外化过程中的设计机会。我们与六位经常使用 LLM 驱动的代码助手的经验丰富的程序员进行了一项形成性研究。研究结果表明,程序员因缺乏信息化的提示组织以及无法直接控制和操作生成的代码片段而受到阻碍。基于这些发现,我们提出了 CoLadder,这是一个帮助程序员外化分层提示结构以生成与其意图一致的代码的系统。CoLadder 引入了分层生成的概念,帮助程序员将目标分解为子任务(图 1 A),创建外化其意图的任务结构(图 1 B),并生成相应的代码(图 1 C)。CoLadder 中的每个提示都是一个与代码片段链接的模块化块,允许在分层任务结构中进行精确修改。此外,CoLadder 通过在多个抽象层次(包括目标、意图、提示、伪代码和生成代码)提供支持,实现了在提示编写过程中的评估。
我们进一步对 12 位经常使用 LLM 驱动的代码助手的经验丰富的程序员进行了用户研究,以评估 CoLadder 的实用性。结果验证了 CoLadder 能够帮助程序员形成和外化其意图。通过在多个抽象层次直接操作提示块以修改相应代码,程序员能够更好地控制其意图到代码的转化。在支持性框架的帮助下,CoLadder 避免了程序员在提示编写和代码评估之间进行破坏性的认知切换。这些发现表明,分层生成的概念可以作为未来交互式 LLM 代码助手开发的设计考虑因素。总结来说,我们的贡献包括以下三点:
在实现编程任务目标的过程中,程序员必须培养清晰的意图 35, 36, 44。这些意图从对程序预期实现内容的理解(陈述性知识)以及实现该目标所涉及的过程(程序性知识)中得以明确 16, 27。这一意图形成过程包括将总体目标分解为更小、可管理的子目标,然后以不同的深度和范围外化程序的各个元素(图 2 E)27, 34, 40, 69, 72。将分层的意图外化为具体的行动至关重要(图 2 F),尤其是在 LLM 驱动的系统中,由于 LLM 能够从各种格式的 NL 提示生成结果,执行鸿沟可能变得模糊。这些提示随后将程序员的结构化意图带入 LLM 生成过程。先前的研究致力于弥合抽象鸿沟(图 2 G)——即提示背后的人类意图与 LLM 生成的代码之间的差距 52, 71。相比之下,我们的研究强调支持意图形成(图 2 A)及其后续的外化过程,使程序员能够以可控性精确指导代码生成(图 2 B)。此外,我们的工作还结合了减少评估鸿沟 61(图 2 D)的功能,增强了程序员在无需频繁在提示编写和代码评估之间切换的情况下感知、解释和评估 LLM 输出的能力(图 2 C)。
我们回顾了与程序员-LLM 交互中的挑战、现有解决方案以及意图形成过程相关的理论研究。
尽管程序员与 AI 的交互已在多种背景下被探讨,但我们的关注点在于大语言模型驱动的代码生成工具。与之前的深度学习模型相比,LLM 的最新进展标志着代码生成领域的重大突破。先前的研究进行了多项以用户为中心的研究,以了解程序员如何与基于 LLM 的代码助手交互以及他们对这些工具的看法 7, 19, 50, 58, 60, 66, 71, 75, 77, 88。研究表明,随着最先进的 LLM 的出现,代码助手的准确性显著提高 15, 65,从而提升了程序员感知的生产力 48, 91,尤其是在需要重复编写简单代码片段的任务中 7, 71。
评估的挑战。然而,程序员现在需要投入大量时间来评估 AI 生成的代码建议 7, 58。过度的评估需求可能导致多种问题 70, 78, 82。程序员常常因代码验证所需的巨大工作量而感到畏惧,并跳过评估步骤。这导致了诸如过度依赖生成建议 7, 15, 88 和对程序失去控制 77 等问题,从而在代码修改过程中引入了挑战 1, 13。程序员还因在编程和调试任务之间切换而承受额外的认知负担 8, 24, 55, 77。
抽象匹配问题。Sarkar 等人 71 观察到,程序员经常通过迭代评估和提示优化来理解 LLM 驱动的代码助手如何解释其提示并生成所需代码,这一过程被称为抽象匹配。程序员需要掌握模型的能力和局限性,以理解生成符合其意图的代码所需的自然语言表达。这一问题根源于执行鸿沟的概念 39。由于 LLM 能够在不同抽象层次生成代码,从高层次的概念描述到低层次的类似伪代码的详细语句,涵盖了无数自然语言表达的组合 52, 86,抽象匹配问题在 LLM 中变得更加显著。我们的研究将抽象匹配的关注点从提示-代码扩展到目标-代码,同时考虑到为程序员提供意图形成过程支持的必要性。
与提示工程和少样本学习等技术方法相比,已有多种设计解决方案和系统被提出,以增强与 LLM 驱动的代码助手的交互。这些策略涵盖了多种技术,例如引入新的编程语言 9, 38、自动化提示重述 25, 83、采用通过演示编程技术 18, 51 以及支持任务分解 68, 86。然而,确定“正确”的抽象层次仍然是一个挑战,因为过于详细的提示分解可能导致使用 LLM 的编程过程类似于使用“一种极其低效的编程语言” 71。因此,先前关于自然语言界面的研究表明,通过用户交互和干预来管理期望并逐步揭示系统能力具有显著优势 52, 54, 70, 78。
注意到这一问题,先前的研究提出了多种方法。Liu 等人提出了基于抽象匹配的接地技术 52,该方法提供了一个分解的代码示例,用户可以修改并将其作为指令提交给 LLM,从而帮助意图不明确的程序员并减少抽象匹配问题。AI Chains 通过将问题分解为子任务来增强程序员的控制和反馈 86。每个子任务对应一个带有 NL 提示的特定步骤,前一步骤的结果为后续任务的提示提供信息。这种链式方法在多个任务上使用同一模型时提高了成功率 85, 86。
尽管上述依赖任务分解的方法帮助程序员将其意图与代码联系起来,但它们并未强调为程序员提供解决编程任务时的意图形成过程支持。此外,它们主要关注局部提示-代码的对应关系,而并未检查整体结构的匹配,尤其是从任务结构到代码结构的匹配。相比之下,CoLadder 基于任务分解的概念,为程序员提供了更高的灵活性和可控性,不仅能够制作有效的提示,还能更深入地理解其编程任务如何逻辑化地结构化。
在编程的语境中,意图涵盖了程序员对代码的理解和解释、底层编程任务以及他们正在处理的程序整体结构的心智模型 4, 20, 89。有多种理论描述了这些意图的形成过程 21, 79。一些理论建议采用自下而上的方法,从理解代码语法开始以推导语义,而另一些理论则提倡自上而下的策略,即从代码功能的初始假设开始,然后通过语法分析进行评估 80。程序员必须在不同的抽象层次上形成意图 5, 89,这些意图既包括具体的代码语句,也包括更大的程序结构。为了支持程序员与 LLM 在解决编程任务时的有效交互和协作,为这些意图提供支持框架至关重要 26, 52, 71。在我们的工作中,我们主要关注支持程序员形成解决编程任务的意图,并将这些意图外化为能够生成与其目标一致的代码的提示。
我们通过以用户为中心的迭代设计方法开发了 CoLadder,这是一个帮助程序员基于其意图分解任务并生成相应代码的界面。设计过程包括三个阶段:
在本节中,我们描述了设计过程的第一阶段,并报告了所获得的策略和设计目标,这些策略和目标指导了 CoLadder 的设计与开发(表 1)。
我们通过目的性抽样 [23] 招募了六名参与者(5 名男性,1 名女性;年龄 25−27 岁,𝑀=25.8,𝑆𝐷=0.98)。在招募过程中,我们寻找在编程和使用 LLM 驱动的代码生成工具方面均有经验的参与者。资格筛选包括一项预测试调查,评估参与者的编程经验(采用 5 分制 [1:非常不熟练;5:非常熟练])、编程经验年限以及自我报告的对 LLM 驱动的代码生成工具的熟悉程度。所有招募的参与者均拥有超过五年的编程经验(𝑀=6.67,𝑆𝐷=1.75 年),熟悉编程(得分 𝑀=4.33,𝑆𝐷=0.52),熟悉 LLM 代码生成工具(得分 𝑀=4.5,𝑆𝐷=0.55),并定期使用 LLM 代码生成工具(𝑀=8,𝑆𝐷=2.56 次/周)。详细信息见附录 B。
参与者签署了同意书,并在完成 45 分钟的研究后获得 20 加元的报酬。在研究开始前,我们要求每位参与者分享至少三个最近使用 ChatGPT [63] 生成代码的示例,以促使他们反思自己如何使用 LLM 代码生成工具。在研究过程中,我们通过访谈评估他们在形成和外化意图、将其转化为代码时面临的挑战、他们应对这些挑战的策略以及他们的需求。所有访谈均被录音并随后转录为文字。我们使用主题分析 [10] 对访谈进行分析,结合了归纳和演绎方法。在访谈了六名参与者后,前两位作者共同进行了初步分析。我们识别并分类了与参与者应对挑战的策略及其相应需求相关的代码和主题。任何分歧均通过讨论解决,并在第二次迭代后最终确定了主题。
总体而言,参与者使用 LLM 代码助手处理多种编程语言(如 Python、JavaScript 和 Bash)中的各种任务,例如生成不熟悉的代码、实现算法和代码重构(附录 B)。
我们观察到,参与者在提示 LLM 代码助手解决编程任务时,意图的形成涉及两个关键方面。首先,程序员需要形成解决编程任务的明确意图,这对于“验证生成的代码是否正确”至关重要(P3);其次,他们必须探索如何有效地构建提示,以将这些意图转化为生成的代码。然而,参与者遇到了提示的线性表示(例如一句注释)带来的困难,这阻碍了他们外化意图并在编写提示后理解其内容的能力(C1)。例如,P1 表示:“经过几次迭代后,它(提示)变得毫无意义,因为提示不是为人类编写的,而是为了让 LLM 理解我。”每位参与者都采用了类似的策略来减轻形成意图时的认知负担——将任务分解为更小的子任务(S1)。大多数参与者(5/6)进一步通过分层结构化任务来外化其意图(S2)。大多数参与者(4/6)使用项目符号来结构化提示,“在编写提示时我会使用缩进;这种层次结构帮助我思考详细步骤。”(P6)
尽管参与者努力使提示更加全面,但 LLM 根据整个提示生成整个代码库的行为加剧了评估的困难。这一问题导致了对代码生成过程的控制感丧失和“恐惧”(C2),参与者表达了“逐段生成程序”的愿望(P2)。一些参与者(3/6)提到了长期维护程序的困难,“我希望几个月后还能回到我的代码并调试它。”(P6)因此,参与者通常更倾向于逐行接受生成的代码,类似于使用自动补全功能(S3),而不是一次性生成整个代码库。参与者经常使用另一种策略(S4)来控制生成代码的长度,即在提示之间插入换行符,从而选择性地在特定提示之间生成代码,而不是生成包含所有提示的长代码。然而,实施这一策略导致了结构化提示与代码结构之间的不一致,这使得参与者难以确定“在哪里插入新生成的代码”(P2)。因此,参与者(4/6)报告了另一种策略,即独立生成自包含的代码段,然后将它们合并到现有代码库中(S5)。P5 解释说:“我会自己合并它(生成的代码),因为我不知道它之前会是什么样子。”另一种常见策略是选择一段现有代码并用新生成的代码替换它(S6),从而在不影响其他部分的情况下操作目标代码段。然而,P3 描述了这种保留和合并现有代码与新生成代码的繁琐过程:“有时如果生成的代码部分准确,我需要先接受它,复制一份,撤销更改,最后将复制的代码粘贴到我的原始代码下方。”
所有参与者都对当前工具不断建议结果的行为表示沮丧,这导致他们在提示编写和代码评估之间不断切换(C3)。他们指出,尽管这种上下文切换看似微不足道,但它严重干扰了他们的整体编程流程。P6 提到:“有时我知道它(生成的代码)不会正确,但我仍然会查看它。”P4 解释说:“也许这次生成的代码是正确的,谁知道呢?”然而,我们观察到,参与者更频繁地接受自动补全的提示,使用它们快速“验证系统是否准确捕捉了我的意图”(P3,S7)。一些参与者(P1、P2、P5)故意等待代码助手自动补全他们的提示,这进一步“减少了验证生成代码所需的时间”(P2)。
参与者通常需要多次迭代提示,这使得随着提示变得越来越长,定位需要修改的部分变得具有挑战性。因此,所有参与者都报告了在提示和生成的代码段之间来回导航的困难,发现“很难找到提示的哪一部分导致了需要修改的错误”(P1,C4)。一些程序员(4/6)将代码语法融入提示中,通过更容易定位关键字来促进代码评估(S8)。例如,P2 提到使用类似伪代码的提示作为“控制生成”的策略,并减少评估过程中的认知负担。一些参与者(2/6)还提到,他们宁愿重写整个代码段,而不是尝试编辑和调试它。“生成代码后,我需要花费大量时间找到导致错误的代码以及导致此结果的提示,我宁愿重新开始。”(P1)参与者通常重视生成的注释(自然语言),并将其作为匹配提示段与代码的锚点(S9)。P4 提到:“生成的注释对于逐步检查生成的代码是否符合我的指令非常有用。”
为了支持程序员为克服所遇到的挑战(C1-C4)而采用的策略(S1-S9),我们制定了四项设计指南(DGs)。主要设计目标是提供分层生成功能,使程序员能够将抽象意图形成并外化为生成的代码,同时确保一致性。
缺乏结构化的提示阻碍了程序员形成并外化解决编程任务的意图(C1)。系统应支持提示分解(S1),并通过提示结构的层次化表示来外化程序员心中的任务结构(S2)。先前的研究通过预定义允许的抽象级别来采用提示分解 [9, 38, 68, 86],但这可能并不一定反映程序员自己对任务分解的直觉 [14, 87]。参与者采用了更灵活的提示结构,该结构根据任务的性质和复杂性而变化。因此,系统应使参与者能够定义抽象级别以外化其意图。
程序员在评估和修改大量生成的代码时,常常会感到控制感的丧失(C2)。这一问题凸显了为程序员提供对提示编写过程的控制的需求。这种支持应包括能够轻松识别和选择修改范围(S6)、插入新提示(S4)以及重新组织提示结构(S5)。系统必须支持在不同抽象级别上进行修改,使程序员能够在不意外修改无关代码段的情况下进行必要的更改。系统还应逐步生成结果(S3),而不是一次性生成整个代码,从而避免让程序员感到不知所措。
在提示的迭代优化过程中,程序员常常由于代码评估和提示编写之间的上下文切换而感到认知过载(C3)。研究结果表明,可以在提示编写过程中帮助程序员评估生成的结果,而无需额外的上下文切换。系统应以非侵入性的方式提供反馈,并提供上下文以反映系统对任务的理解。这种方法有助于程序员了解系统是否准确捕捉了他们的意图(S7)。
为了促进从用户意图到最终生成代码的各个抽象级别之间的导航和修改(C4),系统必须确保提示与代码之间的对应关系,包括整体任务与代码结构之间的匹配。系统还应提供视觉线索,根据提示结构突出显示生成的代码段(S9),以便程序员导航和修改所需的代码段。此外,系统应使程序员能够编写包含代码语法的提示(S8),以帮助他们高效地定位相应的代码。
Casey 是一位数据科学家,她希望在一个葡萄酒质量数据集上构建一个回归模型。尽管她精通 Python,但她希望通过利用 LLM 驱动的代码助手来加快开发过程,因此她启动了 CoLadder。Casey 首先通过概述主要目标来考虑完成此任务的主要步骤,例如划分数据集、构建和评估回归模型以及绘制结果。
Casey 将她的意图转化为一组高级提示,例如“训练回归模型”(图 3 A),以将她设想的代码结构外化。接下来,她进一步深入,并通过 [添加子任务] 按钮在高级提示下添加一些子任务,根据需要调整细节层次(图 3 B)。例如,在“训练回归模型”下,她添加了“划分数据集”等子任务。Casey 采用这种广度优先的方法,逐步通过 [添加同级] 按钮详细描述每个高级任务。随着 Casey 添加每个提示块,代码会根据整体任务结构实时更新。然而,代码编辑器仅显示现有提示块的代码,其余代码段保持折叠状态。当 Casey 编写这些提示时,她利用提示 [自动补全] 功能快速制定更详细的提示(图 3 C)。在某些情况下,她使用代码语法表达式,例如 for epoch in range(1, 31): 或 load_boston(),而无需将代码语句翻译为自然语言(图 3 D)。为了在每个子任务下定义更细粒度的步骤,Casey 有时会手动添加子提示块,有时会使用 [列出步骤] 功能,该功能会自动建议生成代码的逐步指导。例如,在 for epoch in range(1, 31) 下,列出的步骤建议诸如“在训练和测试数据上进行预测”等操作,这些操作是从与模型预测相关的代码片段中总结出来的(图 3 E),帮助她评估意图与代码的一致性。
Casey 然后通过上下箭头键在层次结构中导航,并评估与特定提示块对应的突出显示的代码段。[语义高亮] 功能帮助她将提示中的短语与代码段关联起来(图 3 F)。例如,她的提示提到“在训练和测试数据上进行预测”会导致代码段中的 .predict() 和提示块中的短语(例如“训练回归模型”)以较低的不透明度突出显示,表示较低的相关性。Casey 现在确认 LLM 根据树结构准确解释了她的意图。
当 Casey 在提示中导航时,她识别出需要调整的代码段。在“训练回归模型”块中,她通过 [补充] 功能修改提示,指定使用 L2 正则化,并将代码从 LinearRegression() 更改为 Ridge(alpha=0.5)(图 3 G)。此外,她使用 [拖放] 功能将“绘制损失曲线”块移动到 for epoch in range(1, 31) 块下,从而为每个训练周期生成一个图(图 3 H)。最后,Casey 编译并运行她的代码,观察到系统成功输出了 30 个显示损失曲线的图表,这些图表与她的意图一致。
CoLadder 由两个主要的用户界面组件组成:
接下来,我们基于 DG1-4 详细讨论 CoLadder 的功能和设计。我们还邀请了参与我们访谈研究的六位经验丰富的程序员,在迭代设计过程中参与认知走查实验。在走查过程中,实验员展示了 Figma 原型,口头解释了交互流程,并指导参与者执行特定操作。在系统走查之后,我们进行了半结构化访谈,以收集对功能详细设计、其有效性以及未来改进可能性的反馈。
为了帮助程序员分层结构化他们的提示以外化他们的意图(DG1),我们提供了一个基于树的提示编辑器,使程序员能够构建反映任务和代码结构的提示。此外,我们在多个抽象级别上将任务分解为更小的子任务。这种方法使程序员能够基于层次结构直接操作他们的意图到代码(DG2)。
基于树的可视化帮助程序员按照自上而下的心理编程模型组织任务。该树编辑器允许程序员通过子任务的水平缩进来传达任务结构,同时仍然在垂直方向上保持程序结构。例如,如果程序员添加了一个任务“从网页中提取引文”,他们可以通过在下方缩进添加一个子任务“查找所有 class=quote”来表示层次任务结构和代码的执行顺序。CoLadder 不是自动分解任务,而是允许程序员灵活地构建符合他们意图的提示。根据专家走查的建议,我们实现了一个可折叠的提示树,与可折叠的代码编辑器保持一致。这对于较长的程序非常有用,消除了不断滚动的需要。
树节点中的每个分解任务被称为提示块,程序员可以在其中以混合模式编写提示(图 4 C)。程序员可以灵活地输入自然语言(NL)和代码语法,符合他们偶尔使用代码语法表达想法的偏好。例如,参与者通常选择像“for i in...”这样的语句,而不是“遍历...”这样的自然语言表达。每个块都充当一个微型代码编辑器,具有代码语法和提示的语义高亮。一些参与者(4/6)希望提示块有修订历史,以帮助回忆特定提示背后的推理。CoLadder 记录了提示块的迭代,可视化提示和生成代码的差异,使程序员能够根据需要高效地导航和恢复特定的迭代(图 5 右)。
CoLadder 支持通过提供多种提示块操作来直接操作提示结构,这些操作通过按钮或快捷键激活。每个基于块的操作都会更新相应的代码,并根据需要将更改传播到其余代码中。
CoLadder 提供多样化的信息反馈,以帮助程序员评估系统是否准确理解他们的意图(DG3)。此功能使程序员能够专注于编写提示,而不会在提示编写和代码评估之间经历破坏性的认知切换。
为了帮助程序员有效评估生成的代码,我们支持列出步骤操作,使程序员能够理解模型如何为当前提示块生成代码(图 6 列出步骤)。此功能对生成的代码进行语义分段,并提供这些分段的逐步总结,然后将其添加为新的子提示块。它作为脚手架,帮助程序员理解生成代码的较低级别细节。
形成性研究的参与者重视内联自动补全,并将其视为评估结果的一步。CoLadder 在编辑提示块时支持两种类型的自动补全:
在添加新提示块后,CoLadder 向程序员提供多个可能的下一步(图 7 C)。这些推荐的提示按模型建议的相关性分数顺序显示在当前提示块下方。程序员可以选择其中一个添加到下方。此功能帮助程序员逐步完成目标,并通过成功推荐适当的下一步来评估 CoLadder 是否正确理解他们的意图。
[编译] 操作允许程序员独立执行每个块以显示中间结果(图 7 D)。CoLadder 包装来自提示树的代码并编译代码以显示结果。程序员可以评估中间结果以确定下一步。
CoLadder 提供了功能,使程序员能够在不同抽象级别之间导航,以定位和修改目标提示块(DG4)。
参与者发现,评估单个代码段通常已经足够。为此,CoLadder 的代码编辑器视图在程序员选择相应提示块时仅突出显示相关代码,同时折叠其他代码段。不同的代码编辑器符号装饰显示了提示在提示树中的当前位置。对于更精细的调整,程序员可以直接在代码编辑器中修改代码,这些更改将传播回相应的提示块。
CoLadder 为提示块提供了两种语法高亮:语义高亮用于区分混合模式编辑中的代码和自然语言(NL);其次,高亮 NL 短语以帮助理解不同级别提示块之间的依赖关系。当程序员在代码中使用不同术语(例如 df、data、table,它们都指代同一个数据框)时,这非常有用。程序员可以选择提示中的短语,CoLadder 将在整个树中显示语义相关的短语,不同实体类型以不同颜色显示,不透明度由相关性分数决定(图 8)。相关代码段在代码编辑器中高亮显示,便于程序员通过提示中的相应短语进行识别。
CoLadder 提供了键盘快捷键,使程序员能够访问功能并有效地在块之间导航。箭头键(↓/↑)可以在不同级别的提示块之间移动,并在代码编辑器中高亮显示相应的代码段。程序员还可以使用 Enter 开始编辑,Esc 记录编辑,Alt + ↓/↑ 创建同级/子级块,Alt + Enter 激活列出步骤功能。
CoLadder 基于 Next.js 框架构建,支持服务器端渲染以进行 API 调用,包括用于分层代码生成的 OpenAI GPT-4 API [64]。用户界面集成了 Monaco Editor [57],在提示块和主代码编辑器视图中提供直观的编码体验。为了执行和编译来自 LLM 的结果,CoLadder 使用了 Pyodide [67],这是一个强大的 Python Web 编译器。日志记录通过 Firebase 的实时数据库管理,按唯一用户和条件 ID 对交互和响应进行分类。整个 CoLadder 平台构建并部署在 Vercel 上,可通过公共域名 URL 访问。
对于所有代码生成功能,我们将提示树结构化为基于文本的树结构,其中包含索引和深度以指定每个提示块的位置 [43]。我们整合了一组从访谈研究中识别的分层提示用例中提取的少样本示例,以促进模型对树结构的上下文学习 [12]。我们进一步开发了一个输出解析器,将 LLM 响应组织为树格式,其中节点包含唯一索引、提示和代码。此外,我们采用了 LangChain [45] 的思维链提示技术 [47, 81],通过引导 LLM 首先生成自然语言的中间推理步骤,形成逻辑序列,最终输出代码。这种方法有助于将复杂任务分解为可管理的步骤,确保逻辑一致性和编程实践的遵循。对于所有基于块的操作、推荐或自动补全,解析后的提示树作为上下文,结合特定的提示模板。这些模板和示例根据操作的不同而变化,以实现与预期操作一致的针对性代码生成(附录 A)。我们使用 OpenAI 的 GPT-4 开发和测试了提示模板,这是迄今为止最先进的公开可用的 LLM。
在 [添加] 操作中,我们指示 LLM 采用自底向上的方法,从最低缩进级别开始,逐步将子节点的代码与其父节点集成。对于 [编辑] 操作,LLM 生成与特定提示块对应的代码,并将每个提示迭代的历史记录作为上下文的一部分。此历史记录充当缓冲存储器,通过捕获变体之间的差异并辨别程序员的意图,帮助进行语义搜索以重新生成相关结果。请注意,当提示块被编辑时,CoLadder 会自动记录提示迭代历史。
在代码生成后,实现了错误预防和纠正机制,以确保在整个代码库中应用必要的更改(例如变量调整)。在执行提示块操作后,建立了一个顺序链,将前一个操作的输出作为后续操作的输入。如果需要更改,系统使用 Myers diff 算法解析生成的文本,仅更新适用更改的段。对于程序员编辑代码的场景,相应的提示块(包括包含该代码段的所有子树中的块)都会更新,以确保后续操作考虑手动修改的代码。
除了基于块的操作外,语义高亮功能遵循一个过程,首先对语句进行分段并将其与相应的代码段配对。随后,它提示 LLM 评估所选语句和代码段与其他语句和代码对之间的相似性(附录 ??)。基于文本嵌入的余弦相似性确定相关性分数,并使用预定义实体集(例如数据集、预处理和变量)通过命名实体识别进一步分类。
我们进行了一项研究,涉及 12 位经验丰富且频繁使用基于 LLM 的代码助手的程序员,以评估 CoLadder 在解决以下研究问题(与图 2 中的 A-D 对齐)中的有效性:
...
我们的研究结果突显了 CoLadder 在帮助程序员灵活分解任务,并通过分层生成将他们的意图转化为多层级抽象代码方面的实用性。我们针对四个设计指南和研究问题,提供了详细的定性分析和系统日志数据。
...
我们的主要局限性在于评估的编程任务多样性以及提示编程的约束。一些开放式编程任务,特别是那些侧重于快速迭代的任务(例如,探索性编程、探索性数据分析)[42, 76],往往更注重快速迭代想法而非代码质量。程序员通常需要快速进行小的更改,例如调整参数和变量 [73, 90]。在这些情况下,基于自然语言(NL)的编程可能效果不佳,因为程序员可以快速修改代码的特定部分,而无需等待代码生成。尽管 CoLadder 提供了直接修改代码的选项,但参与者主要专注于提示编写,并错误地认为“总是需要通过优化提示来更改代码”(P6)。一些参与者(3/12)忘记了双向编辑功能,表示希望在 CoLadder 中能够直接修改代码,因为他们想“直接调整一些低级别的代码细节”(P10)。这一发现表明,虽然 CoLadder 支持双向编辑,但当前设计在指示双向编辑是否生效方面缺乏清晰性。未来的设计改进应加入视觉提示,以告知参与者更改是否已被记录。
CoLadder 的另一个局限性是提示树结构可能并不总是与实际代码结构一致。例如,在程序员的意图中,“绘制损失曲线”可能被视为“模型评估”下的子任务,但在生成的代码中,它可能存在于全局函数范围内。虽然我们最初在设计提示编辑器和代码编辑器的用户界面分离时考虑了这一问题,但两位参与者提到,在某些编程语言或场景中(例如,面向对象编程 [20] 或具有多个文件的复杂项目),我们的系统可能效果较差,因为任务和代码结构可能显著偏离。我们认为,尽管提示和代码之间的对应关系可能不那么明显,但对应高亮(DG4)和分层生成仍然可能有益。这与基线系统形成对比,在基线系统中,程序员需要定位生成的代码并手动将其映射到提示。
我们承认仅使用脚本语言测试 CoLadder 的局限性,并认识到某些编程语言,特别是编译语言,可能面临现有功能的挑战,例如编译错误。然而,CoLadder 的设计主要强调对意图形成和外化阶段的支持,认为分层心理表征(DG1)在各种编程场景和语言中广泛适用 [27, 36, 44]。在不同编程环境中,提供可控性的意图脚手架(DG2)和减少认知切换(DG3)的需求也是先前工作中提出的常见挑战 [49]。总体而言,虽然 CoLadder 主要设计用于解决基于自然语言编程中的一般性挑战,但我们承认未来需要针对特定编程任务和语言进行更量身定制的设计。例如,探索集成类图等可视化工具,以更好地传达程序结构以及类或组件之间的关系 [32]。
我们讨论了 CoLadder 如何帮助程序员形成编程任务的意图,区分程序中的可控性与与大型语言模型(LLM)的交互,缓解过度依赖问题,以及其在熟悉和不熟悉编程任务中的潜在适用性。
我们的研究结果表明,CoLadder 有效地支持了多抽象层次的代码生成,从而帮助程序员构建他们的意图。这与现有文献中关于理解语言模型驱动代码生成系统能力和局限性的挑战,以及需要清晰和自然的输入以生成符合程序员意图的特定代码的需求相一致 [26, 52, 86]。
此外,我们的发现与先前研究相呼应,强调了程序员在不同抽象层次上形成代码意图的重要性 [71],从特定的代码语句到更大的程序结构 [5, 89]。这凸显了构建有用意图的必要性,以促进程序员与 LLM 在解决编程任务中的交互和协作。在我们的工作中,我们特别强调帮助程序员形成这些意图,以编写有效的提示,生成符合其意图的代码 [14, 87]。
我们的研究还突出了 CoLadder 在帮助程序员在问题解决过程中发展意图方面的作用 [56]。通过提供分层的提示结构和基于块的操作,CoLadder 使程序员能够随着对编程任务的深入理解,轻松调整和优化他们的任务表示。这与敏捷开发原则相一致,促进了问题解决方法的动态调整 [35]。
在与 AI 助手编程的背景下,我们区分了对结果程序的可控性与对程序员意图构建过程的可控性之间的微妙差异。前者涉及直接手动编辑代码的能力,而后者涉及将分解的意图转化为提示和生成的代码。三位参与者发现,在没有视觉提示的情况下,在 CoLadder 中编辑代码不够直观。这一发现表明,尽管 CoLadder 有效地增强了对意图构建过程的控制(RQ2),但它可能并未显著提高对程序本身的控制。然而,我们观察到,使用 CoLadder 的参与者在早期阶段需要更少的代码编辑。这种减少归因于参与者通过基于块的操作,能够轻松修改生成的代码段。虽然这些操作可能并未增强对程序的控制,但它们确实有助于外化意图和进行直观的修改。未来的研究应探索程序员在两个方面所需的关键可控性:与 AI 交互的可控性 [3, 37, 62] 和对程序本身的可控性 [31, 59]。
在我们的研究中,我们观察到一种趋势,即程序员经常接受基线代码助手的建议,随后修改生成的代码。这一观察与先前的研究一致,这些研究表明程序员可能对 LLM 驱动的代码助手产生过度依赖 [7, 15, 88]。然而,在使用 CoLadder 的背景下,参与者逐步精心构建他们的程序,表现出对整体编程结构的更深入理解。这种方法在回忆测试中显示出优势,因为参与者表现出更强的理解他们构建的程序的能力 [56]。
这一发现引发了关于未来维护任务潜在影响的有趣问题。它促使进一步探讨,CoLadder 促进的逐步精心构建程序是否可能导致更可维护的代码库,或在需要长期代码理解和修改的场景中提供优势 [2]。未来研究探索这些方面,可以揭示 CoLadder 在解决人机交互中常见的过度依赖问题方面的有效性和可持续性 [3]。
我们设计并研究了 CoLadder 与经验丰富的程序员的使用,因为他们在处理编程任务时能够形成更明确的意图,相比之下,新手则较难做到 [17, 27, 35, 89]。然而,我们也对任务熟悉度是否会导致经验丰富的程序员之间的差异感兴趣。根据我们的预研究问卷,所有参与者都报告熟悉 Python 中的基本机器学习(𝑀=4.17,𝑆𝐷=1.19)和基本数据可视化(𝑀=4.25,𝑆𝐷=0.75)任务。我们计算了自我感知熟悉度(5 点李克特量表)与 NASA-TLX 和自定义问卷回答之间的 Spearman 相关性。除了 NASA-TLX 中的“表现”(𝑟=−0.348)和自定义问卷中的“对系统工作原理的理解”(𝑟=−0.447)和“对建议的满意度”(𝑟=−0.327)具有中等相关性外,其他项目的相关性较弱。
这些发现表明,尽管参与者对特定编程任务的先前熟悉度可能对其感知有一定影响,但并非主导因素。未来的研究可以探讨不同任务熟悉度对使用 CoLadder 时工作流程的影响。在本研究中,我们关注整体编程经验的重要性,因为形成有效意图的能力在转化为具有可控性的提示以及确定评估哪些方面时至关重要。
在本文中,我们介绍了 CoLadder,这是一个交互式系统,旨在帮助程序员进行代码生成和评估。该系统通过提供分层任务分解、基于模块的代码生成以及在提示编写过程中的结果评估来实现这一目标。我们的迭代设计过程揭示了程序员在外化意图并将其转化为自然语言(NL)提示以生成代码时的策略和需求。一项针对 12 名经验丰富的程序员的用户研究进一步验证了 CoLadder 的有效性,展示了其能够增强程序员在不同抽象层次(从初始目标到最终代码实现)中导航和编辑代码的能力。我们的工作为未来基于大语言模型(LLM)驱动的系统提供了关于分层生成概念的宝贵设计见解。
[1] Naser Al Madi. 2022. How readable is model-generated code? examining readability and visual inspection of GitHub copilot. In Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering. 1–5.
[2] Nedhal A Al-Saiyd. 2017. Source code comprehension analysis in software maintenance. In 2017 2nd International Conference on Computer and Communication Systems (ICCCS). IEEE, 1–5.
[3] Saleema Amershi, Dan Weld, Mihaela Vorvoreanu, Adam Fourney, Besmira Nushi, Penny Collisson, Jina Suh, Shamsi Iqbal, Paul N Bennett, Kori Inkpen, et al. 2019. Guidelines for human-AI interaction. In Proceedings of the 2019 chi conference on human factors in computing systems. 1–13.
[4] VenuGopal Balijepally, Sridhar Nerur, and RadhaKanta Mahapatra. 2012. Effect of task mental models on software developer’s performance: An experimental investigation. In 2012 45th Hawaii International Conference on System Sciences. IEEE, 5442–5451.
[5] Moritz Balz, Michael Striewe, and Michael Goedicke. 2010. Continuous maintenance of multiple abstraction levels in program code. In International Workshop on Future Trends of Model-Driven Development, Vol. 2. SCITEPRESS, 68–79.
[6] Aaron Bangor, Philip T. Kortum, and James T. Miller. 2008. An Empirical Evaluation of the System Usability Scale. International Journal of Human–Computer Interaction 24, 6 (2008), 574–594. https://doi.org/10.1080/10447310802205776 arXiv:https://doi.org/10.1080/10447310802205776
[7] Shraddha Barke, Michael B James, and Nadia Polikarpova. 2023. Grounded copilot: How programmers interact with code-generating models. Proceedings of the ACM on Programming Languages 7, OOPSLA1 (2023), 85–111.
[8] Ashish Bastola, Hao Wang, Judsen Hembree, Pooja Yadav, Nathan McNeese, and Abolfazl Razi. 2023. LLM-based Smart Reply (LSR): Enhancing Collaborative Performance with ChatGPT-mediated Smart Reply System (ACM)(Draft) LLM-based Smart Reply (LSR): Enhancing Collaborative Performance with ChatGPT-mediated Smart Reply System. arXiv preprint arXiv:2306.11980 (2023).
[9] Luca Beurer-Kellner, Marc Fischer, and Martin Vechev. 2023. Prompting is programming: A query language for large language models. Proceedings of the ACM on Programming Languages 7, PLDI (2023), 1946–1969.
[10] Virginia Braun and Victoria Clarke. 2012. Thematic analysis. American Psychological Association.
[11] Virginia Braun and Victoria Clarke. 2019. Reflecting on reflexive thematic analysis. Qualitative research in sport, exercise and health 11, 4 (2019), 589–597.
[12] Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, and Dario Amodei. 2020. Language Models are Few-Shot Learners. arXiv:2005.14165 [cs.CL]
[13] Yuzhe Cai, Shaoguang Mao, Wenshan Wu, Zehua Wang, Yaobo Liang, Tao Ge, Chenfei Wu, Wang You, Ting Song, Yan Xia, et al. 2023. Low-code LLM: Visual Programming over LLMs. arXiv preprint arXiv:2304.08103 (2023).
[14] John M Carroll and Judith Reitman Olson. 1988. Mental models in human-computer interaction. Handbook of human-computer interaction (1988), 45–65.
[15] Mark Chen, Jerry Tworek, Heewoo Jun, Qiming Yuan, Henrique Ponde de Oliveira Pinto, Jared Kaplan, Harri Edwards, Yuri Burda, Nicholas Joseph, Greg Brockman, et al. 2021. Evaluating large language models trained on code. arXiv preprint arXiv:2107.03374 (2021).
[16] Richard E Clark, David F Feldon, Jeroen JG Van Merrienboer, Kenneth A Yates, and Sean Early. 2008. Cognitive task analysis. In Handbook of research on educational communications and technology. Routledge, 577–593.
[17] Cynthia L Corritore and Susan Wiedenbeck. 1991. What do novices learn during program comprehension? International Journal of Human-Computer Interaction 3, 2 (1991), 199–222.
[18] Allen Cypher and Daniel Conrad Halbert. 1993. Watch what I do: programming by demonstration. MIT press.
[19] Arghavan Moradi Dakhel, Vahid Majdinasab, Amin Nikanjam, Foutse Khomh, Michel C Desmarais, and Zhen Ming Jack Jiang. 2023. Github copilot ai pair programmer: Asset or liability? Journal of Systems and Software 203 (2023), 111734.
[20] Linda Dawson. 2013. Cognitive processes in object-oriented requirements engineering practice: analogical reasoning and mental modelling. In Information Systems Development: Reflections, Challenges and New Directions. Springer, 115–128.
[21] Françoise Détienne. 2001. Software design–cognitive aspect. Springer Science & Business Media.
[22] Alastair Dunsmore and Marc Roper. 2000. A comparative evaluation of program comprehension measures. The Journal of Systems and Software 52, 3 (2000), 121–129.
[23] Ilker Etikan, Sulaiman Abubakar Musa, Rukayya Sunusi Alkassim, et al. 2016. Comparison of convenience sampling and purposive sampling. American journal of theoretical and applied statistics 5, 1 (2016), 1–4.
[24] Kasra Ferdowsi, Michael B James, Nadia Polikarpova, Sorin Lerner, et al. 2023. Live Exploration of AI-Generated Programs. arXiv preprint arXiv:2306.09541 (2023).
[25] Chrisantha Fernando, Dylan Banarse, Henryk Michalewski, Simon Osindero, and Tim Rocktäschel. 2023. Promptbreeder: Self-referential self-improvement via prompt evolution. arXiv preprint arXiv:2309.16797 (2023).
[26] Alexander J Fiannaca, Chinmay Kulkarni, Carrie J Cai, and Michael Terry. 2023. Programming without a Programming Language: Challenges and Opportunities for Designing Developer Tools for Prompt Programming. In Extended Abstracts of the 2023 CHI Conference on Human Factors in Computing Systems. 1–7.
[27] Vikki Fix, Susan Wiedenbeck, and Jean Scholtz. 1993. Mental representations of programs by novices and experts. In Proceedings of the INTERACT’93 and CHI’93 conference on Human factors in computing systems. 74–79.
[28] Marsha E Fonteyn, Benjamin Kuipers, and Susan J Grobe. 1993. A description of think aloud method and protocol analysis. Qualitative health research 3, 4 (1993), 430–441.
[29] Nat Friedman. 2021. Introducing GitHub Copilot: your AI pair programmer. https://github.blog/2021-06-29-introducing-github-copilot-ai-pair-programmer/
[30] Github. 2023. Github Copilot, Your AI pair programmer. https://github.com/features/copilot
[31] Thomas R. G. Green and Marian Petre. 1996. Usability analysis of visual programming environments: a ‘cognitive dimensions’ framework. Journal of Visual Languages & Computing 7, 2 (1996), 131–174.
[32] Carsten Gutwenger, Michael Jünger, Karsten Klein, Joachim Kupke, Sebastian Leipert, and Petra Mutzel. 2003. A new approach for visualizing UML class diagrams. In Proceedings of the 2003 ACM symposium on Software visualization. 179–188.
[33] Sandra G Hart and Lowell E Staveland. 1988. Development of NASA-TLX (Task Load Index): Results of empirical and theoretical research. In Advances in psychology. Vol. 52. Elsevier, 139–183.
[34] John R Hayes. 2013. A new framework for understanding cognition and affect in writing. In The science of writing. Routledge, 1–27.
[35] Ava Heinonen, Bettina Lehtelä, Arto Hellas, and Fabian Fagerholm. 2023. Synthesizing research on programmers’ mental models of programs, tasks and concepts—A systematic literature review. Information and Software Technology (2023), 107300.
[36] J-M Hoc. 1977. Role of mental representation in learning a programming language. International Journal of Man-Machine Studies 9, 1 (1977), 87–105.
[37] Kristina Höök. 2000. Steps to take before intelligent user interfaces become real. Interacting with computers 12, 4 (2000), 409–426.
[38] Di Huang, Ziyuan Nan, Xing Hu, Pengwei Jin, Shaohui Peng, Yuanbo Wen, Rui Zhang, Zidong Du, Qi Guo, Yewen Pu, et al. 2023. ANPL: Compiling Natural Programs with Interactive Decomposition. arXiv preprint arXiv:2305.18498 (2023).
[39] Edwin L Hutchins, James D Hollan, and Donald A Norman. 1985. Direct manipulation interfaces. Human–computer interaction 1, 4 (1985), 311–338.
[40] Robin Jeffries. 2022. A comparison of the debugging behavior of expert and novice programmers. In Proceedings of AERA annual meeting. 1–17.
[41] Ellen Jiang, Edwin Toh, Alejandra Molina, Kristen Olson, Claire Kayacik, Aaron Donsbach, Carrie J Cai, and Michael Terry. 2022. Discovering the syntax and strategies of natural language programming with generative language models. In Proceedings of the 2022 CHI Conference on Human Factors in Computing Systems. 1–19.
[42] Mary Beth Kery and Brad A Myers. 2017. Exploring exploratory programming. In 2017 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC). IEEE, 25–29.
[43] Tushar Khot, Harsh Trivedi, Matthew Finlayson, Yao Fu, Kyle Richardson, Peter Clark, and Ashish Sabharwal. 2022. Decomposed prompting: A modular approach for solving complex tasks. arXiv preprint arXiv:2210.02406 (2022).
[44] Jinwoo Kim, F Javier Lerch, and Herbert A Simon. 1995. Internal representation and rule development in object-oriented design. ACM Transactions on Computer-Human Interaction (TOCHI) 2, 4 (1995), 357–390.
[45] LangChain. 2023. https://www.langchain.com/
[46] James R. Lewis, Brian S. Utesch, and Deborah E. Maher. 2013. UMUX-LITE: When There’s No Time for the SUS. In Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (Paris, France) (CHI ’13). Association for Computing Machinery, New York, NY, USA, 2099–2102. https://doi.org/10.1145/2470654.2481287
[47] Chengshu Li, Jacky Liang, Fei Xia, Andy Zeng, Sergey Levine, Dorsa Sadigh, Karol Hausman, Xinyun Chen, Li Fei-Fei, et al. 2023. Chain of Code: Reasoning with a Language Model-Augmented Code Interpreter. In NeurIPS 2023 Foundation Models for Decision Making Workshop.
[48] Yujia Li, David Choi, Junyoung Chung, Nate Kushman, Julian Schrittwieser, Rémi Leblond, Tom Eccles, James Keeling, Felix Gimeno, Agustin Dal Lago, et al. 2022. Competition-level code generation with alphacode. Science 378, 6624 (2022), 1092–1097.
[49] Jenny T Liang, Chenyang Yang, and Brad A Myers. 2023. A Large-Scale Survey on the Usability of AI Programming Assistants: Successes and Challenges. In 2024 IEEE/ACM 46th International Conference on Software Engineering (ICSE). IEEE Computer Society, 605–617.
[50] Jenny T Liang, Chenyang Yang, and Brad A Myers. 2023. Understanding the Usability of AI Programming Assistants. arXiv preprint arXiv:2303.17125 (2023).
[51] Henry Lieberman. 2001. Your wish is my command: Programming by example. Morgan Kaufmann.
[52] Michael Xieyang Liu, Advait Sarkar, Carina Negreanu, Benjamin Zorn, Jack Williams, Neil Toronto, and Andrew D Gordon. 2023. “What It Wants Me To Say”: Bridging the Abstraction Gap Between End-User Programmers and Code-Generating Large Language Models. In Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems. 1–31.
[53] Pengfei Liu, Weizhe Yuan, Jinlan Fu, Zhengbao Jiang, Hiroaki Hayashi, and Graham Neubig. 2023. Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing. Comput. Surveys 55, 9 (2023), 1–35.
[54] Ewa Luger and Abigail Sellen. 2016. " Like Having a Really Bad PA" The Gulf between User Expectation and Experience of Conversational Agents. In Proceedings of the 2016 CHI conference on human factors in computing systems. 5286–5297.
[55] Pingchuan Ma, Rui Ding, Shuai Wang, Shi Han, and Dongmei Zhang. 2023. Demonstration of InsightPilot: An LLM-Empowered Automated Data Exploration System. arXiv preprint arXiv:2304.00477 (2023).
[56] Walid Maalej, Rebecca Tiarks, Tobias Roehm, and Rainer Koschke. 2014. On the comprehension of program comprehension. ACM Transactions on Software Engineering and Methodology (TOSEM) 23, 4 (2014), 1–37.
[57] Microsoft. 2023. The Editor of the Web. https://microsoft.github.io/monaco-editor
[58] Hussein Mozannar, Gagan Bansal, Adam Fourney, and Eric Horvitz. 2022. Reading between the lines: Modeling user behaviour and costs in AI-assisted programming. arXiv preprint arXiv:2210.14306 (2022).
[59] Raquel Navarro-Prieto and Jose J Canas. 2001. Are visual programming languages better? The role of imagery in program comprehension. International Journal of Human-Computer Studies 54, 6 (2001), 799–829.
[60] Nhan Nguyen and Sarah Nadi. 2022. An empirical evaluation of GitHub copilot’s code suggestions. In Proceedings of the 19th International Conference on Mining Software Repositories. 1–5.
[61] Donald A Norman. 1986. Cognitive engineering. User centered system design 31, 61 (1986), 2.
[62] Donald A Norman. 1994. How might people interact with agents. Commun. ACM 37, 7 (1994), 68–71.
[63] OpenAI. 2023. ChatGPT (Feb 13 version) [Large language model]. https://chat.openai.com
[64] OpenAI. 2023. GPT-4 Technical Report. arXiv:2303.08774 [cs.CL]
[65] Hammond Pearce, Benjamin Tan, Baleegh Ahmad, Ramesh Karri, and Brendan Dolan-Gavitt. 2023. Examining zero-shot vulnerability repair with large language models. In 2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2339–2356.
[66] Rohith Pudari and Neil A Ernst. 2023. From Copilot to Pilot: Towards AI Supported Software Development. arXiv preprint arXiv:2303.04142 (2023).
[67] Pyodide. 2023. Pyodide is a Python distribution for the browser and Node.js based on WebAssembly. https://github.com/pyodide/pyodide
[68] Nico Ritschel, Felipe Fronchetti, Reid Holmes, Ronald Garcia, and David C Shepherd. 2022. Can guided decomposition help end-users write larger block-based programs? a mobile robot experiment. Proceedings of the ACM on Programming Languages 6, OOPSLA2 (2022), 233–258.
[69] Pablo Romero. 2001. Focal structures and information types in Prolog. International Journal of Human-Computer Studies 54, 2 (2001), 211–236.
[70] Steven I Ross, Fernando Martinez, Stephanie Houde, Michael Muller, and Justin D Weisz. 2023. The programmer’s assistant: Conversational interaction with a large language model for software development. In Proceedings of the 28th International Conference on Intelligent User Interfaces. 491–514.
[71] Advait Sarkar, Andrew D Gordon, Carina Negreanu, Christian Poelitz, Sruti Srinivasa Ragavan, and Ben Zorn. 2022. What is it like to program with artificial intelligence? arXiv preprint arXiv:2208.06213 (2022).
[72] Amal Shargabi, Syed Ahmad Aljunid, Muthukkaruppanan Annamalai, Shuhaida Mohamed Shuhidan, and Abdullah Mohd Zin. 2015. Program comprehension levels of abstraction for novices. In 2015 International Conference on Computer, Communications, and Control Technology (I4CT). IEEE, 211–215.
[73] Jasper Snoek, Hugo Larochelle, and Ryan P Adams. 2022. Practical bayesian optimization of machine learning algorithms. Advances in neural information processing systems 25 (2012).
[74] Hendrik Strobelt, Albert Webson, Victor Sanh, Benjamin Hoover, Johanna Beyer, Hanspeter Pfister, and Alexander M Rush. 2022. Interactive and visual prompt engineering for ad-hoc task adaptation with large language models. IEEE transactions on visualization and computer graphics 29, 1 (2022), 1146–1156.
[75] Ningzhi Tang, Meng Chen, Zheng Ning, Aakash Bansal, Yu Huang, Collin McMillan, and Toby Jia-Jun Li. 2023. An Empirical Study of Developer Behaviors for Validating and Repairing AI-Generated Code. Plateau Workshop.
[76] [77] John W Tukey et al. 1977. Exploratory data analysis. Vol. 2. Reading, MA. Priyan Vaithilingam, Tianyi Zhang, and Elena L Glassman. 2022. Expectation vs. experience: Evaluating the usability of code generation tools powered by large language models. In Chi conference on human factors in computing systems extended abstracts. 1–7.
[78] Helena Vasconcelos, Gagan Bansal, Adam Fourney, Q Vera Liao, and Jennifer Wortman Vaughan. 2023. Generation probabilities are not enough: Exploring the effectiveness of uncertainty highlighting in AI-powered code completions. arXiv preprint arXiv:2302.07248 (2023).
[79] Anneliese von Mayrhauser and A Marie Vans. 1995. Industrial experience with an integrated code comprehension model. Software Engineering Journal 10, 5 (1995), 171–182.
[80] Anneliese Von Mayrhauser and A Marie Vans. 1995. Program comprehension during software maintenance and evolution. Computer 28, 8 (1995), 44–55.
[81] Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed Chi, Quoc Le, and Denny Zhou. 2023. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903 [cs.CL]
[82] Justin D Weisz, Michael Muller, Stephanie Houde, John Richards, Steven I Ross, Fernando Martinez, Mayank Agarwal, and Kartik Talamadupula. 2021. Perfection not required? Human-AI partnerships in code translation. In 26th International Conference on Intelligent User Interfaces. 402–412.
[83] Jules White, Quchen Fu, Sam Hays, Michael Sandborn, Carlos Olea, Henry Gilbert, Ashraf Elnashar, Jesse Spencer-Smith, and Douglas C Schmidt. 2023. A prompt pattern catalog to enhance prompt engineering with chatgpt. arXiv preprint arXiv:2302.11382 (2023).
[84] Susan Wiedenbeck, Vikki Fix, and Jean Scholtz. 1993. Characteristics of the mental representations of novice and expert programmers: an empirical study. International Journal of Man-Machine Studies 39, 5 (1993), 793–812.
[85] Tongshuang Wu, Ellen Jiang, Aaron Donsbach, Jeff Gray, Alejandra Molina, Michael Terry, and Carrie J Cai. 2022. Promptchainer: Chaining large language model prompts through visual programming. In CHI Conference on Human Factors in Computing Systems Extended Abstracts. 1–10.
[86] Tongshuang Wu, Michael Terry, and Carrie Jun Cai. 2022. Ai chains: Transparent and controllable human-ai interaction by chaining large language model prompts. In Proceedings of the 2022 CHI conference on human factors in computing systems. 1–22.
[87] Bingjun Xie, Jia Zhou, Huilin Wang, et al. 2017. How influential are mental models on interaction performance? exploring the gap between users’ and designers’ mental models through a new quantitative method. Advances in Human-Computer Interaction 2017 (2017).
[88] Frank F Xu, Bogdan Vasilescu, and Graham Neubig. 2022. In-ide code generation from natural language: Promise and challenges. ACM Transactions on Software Engineering and Methodology (TOSEM) 31, 2 (2022), 1–47.
[89] Nong Ye and Gavriel Salvendy. 1996. Expert-novice knowledge of computer programming at different levels of abstraction. Ergonomics 39, 3 (1996), 461–481.
[90] Young Seok Yoon and Brad A Myers. 2014. A longitudinal study of programmers’ backtracking. In 2014 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC). IEEE, 101–108.
[91] Albert Ziegler, Eirini Kalliamvakou, X Alice Li, Andrew Rice, Devon Rifkin, Shawn Simister, Ganesh Sittampalam, and Edward Aftandilian. 2022. Productivity assessment of neural code completion. In Proceedings of the 6th ACM SIGPLAN International Symposium on Machine Programming. 21–29.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。