Prompt Quality and Pull Request Outcomes: A Stage-Based Empirical Study of LLM-Assisted Development
本研究通过对开源拉取请求中 265 次开发者与 ChatGPT 交互行为的实证分析,旨在证明特定的提示词特征——上下文(Context)、明确性(Specificity)和验证(Verification)——对 AI 辅助软件开发结果具有截然不同的、阶段性的影响,其中明确性与上下文驱动可执行的代码生成,验证预测代码采纳情况,而上下文则决定集成深度。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你是一位大厨(开发者),正试图烹饪一道复杂的菜肴,而你的副厨(AI)虽然非常有才华,但有时会过于刻板。你不能只喊一声“做晚饭!”就指望得到一顿米其林水准的餐点。你必须给出具体的指令。
这篇论文研究了你向副厨寻求帮助的方式是如何影响整个烹饪过程的——从第一种食材到最后呈献给顾客的成品。
研究人员分析了 265 个真实世界的案例,这些案例中,开发者在软件项目中与 AI(ChatGPT)进行了对话。他们想看看“食谱请求”(提示词/Prompt)的质量是否决定了 AI 生成的代码是否有用、是否被接受,以及是否真正被用于最终产品中。
以下是他们的研究结果,使用了简单的类比:
1. 一个优质请求的三种成分
研究人员将每一个请求分解为三个部分,就像检查食谱卡片一样:
- 上下文(背景设定): 开发者是否解释了这段代码的用途?(例如:“这是用于我们银行应用登录界面的。”)
- 具体性(细节描述): 开发者是否明确说明了想要什么?(例如:“把按钮变成蓝色且圆润的形状”,而不是仅仅说“让它看起来好看点。”)
- 验证(味觉测试): 开发者是否说明了如何检查结果是否正确?(例如:“如果我点击这个,它应该能让我成功登录且不报错。”)
2. 厨房工作流的三个阶段
研究发现,随着烹饪阶段的不同,“完美”的请求要求也会随之改变。它并非千篇一律。
第一阶段:获取初稿(代码生成)
- 最重要的因素: 上下文和具体性。
- 类比: 如果你想让 AI 真正写出一份食谱,你需要告诉它你在做什么菜,并给出清晰的步骤。
- 研究发现: 如果请求过于模糊或缺乏背景信息,AI 通常只会给出一个通用的解释,而不是实际的代码。但如果开发者给出了明确的目标和一些背景信息,AI 几乎总能生成可用的代码。
- 此时并不重要的因素: 是否包含“味觉测试”(验证)并不会阻止 AI 编写代码。
第二阶段:决定是否使用草稿(代码采纳)
- 最重要的因素: 验证。
- 类比: 现在 AI 已经写好了一份食谱。开发者必须决定:“我能信任它吗?”如果开发者包含了检查结果的方法(例如“它必须通过这项特定的测试”),开发者就更有可能说:“是的,使用它!”
- 研究发现: 即使代码写得很好,如果开发者没有提供验证其正确性的方法,他们往往会拒绝使用。 “味觉测试”是让代码被接受的关键。
- 此时不太重要的因素: 到达这个阶段时,拥有极其具体的目标或额外的背景信息已不再是决定性因素;能够证明其有效性的能力才是关键。
第三阶段:将其混入最终成品(集成深度)
- 最重要的因素: 又是上下文。
- 类比: 代码已被接受,但现在需要将其混入现有软件的大锅中。如果 AI 的代码在编写时没有考虑到整体菜肴的“风味特征”,它可能会味道奇怪,从而需要大量的重写。
- 研究发现: 开发者提供的背景信息(上下文)越多,AI 的代码就越能完美融入现有的项目中。如果 AI 需要猜测自己的位置,开发者之后就必须花费大量时间进行修复。
- 教训: 为了获得能够无缝衔接的代码,你必须告诉 AI 它在宏观图景中的确切位置。
3. “机器人 vs 人类”检查器
研究人员还尝试观察是否可以使用 AI 来自动对这些请求进行评分。
- 结果: 结果喜忧参半。AI 在识别“具体性”(清晰的指令)方面表现尚可,但在识别“上下文”(它经常遗漏背景信息)和“验证”(它难以判断是否包含了测试)方面表现较差。
- 启示: 你不能仅仅依靠机器人来给这些请求打分。你需要人类来复核那些棘手的部分,尤其是背景上下文。
4. 最终结果(Pull Request 是否被合并?)
有趣的是,提示词的质量并没有显著改变项目经理决定合并或关闭请求的速度。这似乎更多取决于请求的大小以及项目的通用规则,而非提示词本身。
总结
把在软件开发中使用 AI 想象成一场接力赛:
- 起点: 你需要上下文和具体性来让接力棒(代码)跑起来。
- 中间: 你需要验证来证明跑步者正处于正确的轨道上,以便下一个人接过接力棒。
- 终点: 你再次需要上下文,以确保跑步者在正确的跑道内冲过终点线,而不会撞到其他跑步者。
该论文得出结论:编写一个好的提示词不仅仅是为了获取代码,更是为了为整个工作流的成功奠定基础。如果你跳过了“上下文”或“验证”步骤,代码或许会被写出来,但它可能会被拒绝,或者在后期需要大量的额外工作来进行修复。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。