Prompts Are Programs Too! Understanding How Developers Build Software Containing Prompts

📄 arXiv: 2409.12447v2 📥 PDF

作者: Jenny T. Liang, Melissa Lin, Nikitha Rao, Brad A. Myers

分类: cs.SE, cs.AI, cs.HC

发布日期: 2024-09-19 (更新: 2025-04-25)

备注: Accepted to FSE'25


💡 一句话要点

揭示Prompt编程特性:通过开发者访谈理解Prompt驱动软件的构建过程

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: Prompt编程 生成式模型 软件开发 扎根理论 开发者访谈

📋 核心要点

  1. 现有研究对Prompt驱动软件的开发过程及其与传统编程的差异缺乏深入理解。
  2. 该研究通过访谈开发者,揭示Prompt编程的独特性质,并将其视为一种新的编程范式。
  3. 研究发现Prompt程序员的心智模型构建方式与传统程序员不同,并强调了Prompt编程工具的必要性。

📝 摘要(中文)

生成式预训练模型驱动着数百万用户使用的智能软件功能,这些功能由开发者编写的自然语言Prompt控制。尽管Prompt驱动的软件影响巨大,但人们对其开发过程及其与编程的关系知之甚少。本文认为,某些Prompt也是程序,并且Prompt的开发是编程中一种独特的现象,称为“Prompt编程”。通过对20位从事各种背景、模型、领域和Prompt结构的Prompt开发的开发者进行访谈,使用Straussian扎根理论,我们对Prompt编程有了初步的理解,并总结了15个观察结果。例如,Prompt程序员不是构建代码的心智模型,而是通过与基础模型(FM)交互来构建FM在Prompt上的行为的心智模型。虽然先前的研究表明专家具有完善的心智模型,但我们发现,开发了数十个Prompt的Prompt程序员仍然难以开发可靠的心智模型。我们的观察表明,Prompt编程不同于传统的软件开发,这促使人们创建Prompt编程工具,并为软件工程利益相关者提供启示。

🔬 方法详解

问题定义:论文旨在理解Prompt编程的开发过程,并将其与传统的软件开发进行对比。现有方法缺乏对Prompt编程实践的深入研究,未能充分认识到Prompt作为一种新型编程范式的独特性质。开发者在构建Prompt时,对基础模型行为的心智模型构建方式与传统代码的心智模型构建方式存在差异,这给Prompt的调试和优化带来了挑战。

核心思路:论文的核心思路是通过对实际从事Prompt开发的开发者进行访谈,运用Straussian扎根理论,从实践中提炼出Prompt编程的特点和规律。通过分析开发者的经验,揭示Prompt编程与传统编程的不同之处,并为Prompt编程工具的开发提供理论基础。

技术框架:该研究采用Straussian扎根理论,这是一种质性研究方法,旨在从数据中归纳出理论。研究团队对20位开发者进行了访谈,这些开发者来自不同的背景,使用不同的模型和Prompt结构。访谈数据经过编码和分析,最终形成了15个关于Prompt编程实践的观察结果。

关键创新:该研究的关键创新在于首次将Prompt的开发视为一种独立的编程范式,即“Prompt编程”。通过对开发者实践的深入分析,揭示了Prompt编程与传统编程在心智模型构建、调试方法和工具需求等方面的差异。

关键设计:研究的关键设计在于访谈对象的选择,确保了样本的多样性和代表性。此外,研究团队采用了Straussian扎根理论,这使得研究能够从数据中自下而上地构建理论,避免了先入为主的假设。研究没有涉及具体的参数设置或损失函数,因为其重点在于理解Prompt编程的开发过程和特点。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

研究通过对20位开发者的访谈,总结了15个关于Prompt编程实践的观察结果。其中一个重要的发现是,Prompt程序员在构建Prompt时,需要构建基础模型行为的心智模型,这与传统程序员构建代码的心智模型不同。研究还发现,即使是经验丰富的Prompt程序员,也难以构建可靠的心智模型,这表明Prompt编程具有一定的挑战性。

🎯 应用场景

该研究成果可应用于Prompt编程工具的开发,例如Prompt调试器、Prompt优化器和Prompt版本控制系统。此外,该研究还可以帮助软件工程教育者更好地教授Prompt编程,并为软件工程管理者提供关于如何管理Prompt驱动软件项目的指导。

📄 摘要(原文)

Generative pre-trained models power intelligent software features used by millions of users controlled by developer-written natural language prompts. Despite the impact of prompt-powered software, little is known about its development process and its relationship to programming. In this work, we argue that some prompts are programs and that the development of prompts is a distinct phenomenon in programming known as "prompt programming". We develop an understanding of prompt programming using Straussian grounded theory through interviews with 20 developers engaged in prompt development across a variety of contexts, models, domains, and prompt structures. We contribute 15 observations to form a preliminary understanding of current prompt programming practices. For example, rather than building mental models of code, prompt programmers develop mental models of the foundation model (FM)'s behavior on the prompt by interacting with the FM. While prior research shows that experts have well-formed mental models, we find that prompt programmers who have developed dozens of prompts still struggle to develop reliable mental models. Our observations show that prompt programming differs from traditional software development, motivating the creation of prompt programming tools and providing implications for software engineering stakeholders.