论文:A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT翻译笔记(一个用来增强与ChatGPT的提示工程的提示模式)


在这里插入图片描述

论文标题:一个用来增强与ChatGPT的提示工程的提示模式目录

论文链接:https://arxiv.org/abs/2302.11382
arXiv:2302.11382v1 [cs.SE] 21 Feb 2023

摘要

提示工程是一种越来越重要的技能,用于有效地与大型语言模型(如ChatGPT)进行对话。提示是给大型语言模型的指令,以强制执行规则、自动化流程以及确保生成输出的具体质量和数量。提示也是一种编程形式,可以自定义与大型语言模型的交互和输出。

本文描述了一种以模式形式呈现的即时工程技巧目录,这些技巧已被应用于解决与LLMs交流时常见的问题。提示模式是一种类似于软件模式的知识传递方法,因为它们为在特定上下文中(即,在与LLMs合作时的输出生成和交互)面临的常见问题提供了可重用的解决方案。

本文对使用LLMs(大型语言模型)自动化软件开发任务的提示工程研究提供了以下贡献。首先,它提供了一个框架,用于记录一系列问题的提示结构模式,以便将其适应于不同领域。其次,它提供了一些建立成功提高LLM对话输出的模式目录。第三,它解释了如何从多个模式构建提示,并说明与其他提示模式结合有益的提示模式。

1 介绍

对话式大型语言模型(LLM)[1],如ChatGPT[2],在各个领域中引起了广泛关注,适用于从回答医学执照考试问题[3]到生成代码片段等各种任务。本文关注于增强LLMs在多个领域的应用,例如帮助开发人员有效地使用不熟悉的API进行编码,或者让学生掌握新的编程技能和技巧。

大型语言模型(LLM)在人类和AI工具共同作为可信赖合作者的领域中特别有前途,可以更快、更可靠地推进软件依赖系统的发展[4]。例如,LLM正在被直接集成到软件工具中,如Github的Co-Pilot[5-7],并包含在集成开发环境中(IDE),如IntelliJ[8]和Visual Studio Code,从而使软件团队可以直接从他们喜欢的IDE访问这些工具。

**一个提示[9]是一组提供给LLM的指令,通过定制和/或增强或完善其能力来编程LLM。**提示可以通过提供特定规则和指导方针来影响与LLM的后续互动和生成的输出,为LLM对话设置一组初始规则。特别是,提示设置了对话的上下文,并告诉LLM什么信息是重要的,期望的输出形式和内容应该是什么。

例如,提示可以指定一个LLM应该只生成符合某种编码风格或编程范式的代码。同样,它也可以指定LLM在生成的文档中标记某些关键词或短语,并提供与这些关键词相关的额外信息。通过引入这些指南,提示有助于生成更结构化和细致的输出,以帮助各种软件工程任务在LLM的上下文中进行。

**提示工程是通过提示来编程LLMs的方法。**为了展示提示工程的强大功能,我们提供以下提示: 提示:从现在开始,我希望你问我一些问题,以便在AWS上部署一个Python应用程序。当你收集到足够的信息以部署应用程序时,请创建一个Python脚本来自动化部署。

这个示例提示使ChatGPT开始询问用户有关他们的软件应用程序的问题。ChatGPT将在提问过程中驱动,直到它获得足够的信息来生成一个自动化部署的Python脚本。这个例子展示了提示在编程方面的潜力,超越了传统的“生成一个实现X的方法”的风格提示或“回答这个问题”。

此外,通过设计合适的提示,可以编程LLM(大型语言模型)完成比简单地指定输出类型或过滤提供给模型的信息更多的任务。有了正确的提示,我们可以创建全新的交互范式,例如让LLM生成并给出一个与软件工程概念或工具相关的测验,甚至模拟Linux终端窗口。此外,提示还具有自我适应的潜力,可以提出其他提示以收集更多信息或生成相关文物。这些提示的高级功能突显了它们在提供超越简单文本或代码生成的价值方面的重要性。

**提示模式对于有效的提示工程至关重要。**本文的一个主要贡献是引入提示模式,以文档形式记录在与对话式LLM合作时,实现不同输出和交互目标的成功方法。我们主要关注工程领域无关的提示模式,并引入了一组解决各种问题的基本提示模式,这些问题包括从生成可视化和代码工件到自动化输出步骤,以帮助事实检查输出。

本文的其余部分组织如下:第二节介绍了提示模式,并将这些模式与知名的软件模式[10]进行了比较;第三节描述了16个已应用于解决对话式LLM交互和输出生成中常见问题的提示模式,以便自动化软件开发任务;第四节讨论了相关工作;第五节提出了结论性意见和所学到的经验教训。

2 比较软件模式与提示模式

对话式LLM的输出质量与用户提供的提示质量直接相关。如第一部分所述,给定对话式LLM的提示可以用于编程用户和LLM之间的交互,以更好地解决各种问题。本文的一个贡献是提供了记录结构化提示模式的框架,以解决一系列软件任务,这些任务可以适应不同领域。

这个框架很有用,因为它关注的是将模式编纂起来,以便在各种情境下帮助用户更好地与对话式大型语言模型互动,而不仅仅是讨论有趣的例子或特定领域的提示。以模式形式编码这些知识可以提高在其他情境和领域中的重复使用和可迁移性,因为用户可能会遇到类似但不完全相同的问题。

知识传递的主题在软件模式文献[10]、[11]中已经得到了广泛的研究,涵盖了多个层次,例如设计、架构和分析。本文将一种变体的常见模式形式作为我们提示工程方法的基础。由于提示是一种编程形式,很自然地需要以模式形式记录它们。

A 软件模式概述

软件模式为在特定上下文中出现的重复问题提供了一种可重用的解决方案[10]。简洁地记录软件模式可以将针对具体问题的解决方法进行总结和泛化,从而识别出成功解决方案中需要解决和/或考虑的重要因素和/或需求。

模式形式还包括关于如何实现该模式的指导,以及在实施模式时需要考虑的权衡和注意事项。此外,通常还会提供示例应用程序来进一步展示模式在实际应用中的实用性。软件模式通常以格式化的方式记录,以便于使用和理解,例如:

  • 名称和分类。每个模式都有一个名称,用于识别该模式并应一致使用。分类将模式分组成广泛类别,如创建型、结构型或行为型。

  • 意图 简洁地传达了该模式旨在实现的目的。

  • 动机 文档记录了该模式旨在解决的潜在问题以及问题的重要性。

  • 结构和参与者。描述不同的模式参与者(如类和对象)以及它们如何协作形成一个通用解决方案。

  • 示例代码 将模式具体映射到一些底层编程语言,并帮助开发人员更好地了解如何有效地应用该模式。

  • 后果 总结在实际应用中使用该模式的优缺点。

B. 快速提示模式概述

快速提示模式与软件模式类似,它们都为特定问题提供了可重用的解决方案。然而,快速提示模式更专注于在大规模语言模型(如ChatGPT)输出生成的上下文中解决问题。就像软件模式提供了解决常见软件开发挑战的规范化方法一样,快速提示模式也提供了一种规范化的自定义大规模语言模型输出和交互的方法。

通过记录和利用提示模式来自动化软件开发任务,个人用户和团队可以对生成的输出施加约束,确保包含相关信息,并改变与LLM互动的格式以更好地解决他们面临的问题。提示模式可以看作是通用软件模式的一个补充,只是将其适应于LLM输出生成的更具体上下文。

提示模式遵循与经典软件模式类似的格式,稍作修改以匹配使用大型语言模型生成输出的上下文。本文中使用的每个提示模式形式的相应部分总结如下:

  • 名称和分类。提示模式名称唯一地标识该模式,并理想情况下表明要解决的问题。对于分类,我们已经开发了一系列初始的模式类型分类,如表I中所总结,包括输出自定义、错误识别、提示改进、交互和上下文控制。
  • 意图和上下文描述了提示模式解决的问题以及实现的目标。问题应该理想情况下独立于任何领域,尽管特定领域的模式也可以通过适当讨论其适用范围来进行记录。
  • 动机提供了问题的理论依据,并解释为什么解决这个问题很重要。动机在用户与对话式大型语言模型互动的背景下进行解释,以及它如何在一种或多种情况下改进用户非正式地提示LLM。具体改善预期的情况已记录下来。
  • 结构和关键思想。该结构描述了一系列关键思想,这些思想构成了提示模式提供给LLM的基本语境信息。这些思想类似于软件模式中的“参与者”。语境信息可以通过不同的措辞进行传达(就像软件模式在代码中实现时可以有变化一样),但应该具有形成模式核心元素的基本信息。
  • 示例实现演示了提示模式在实际中的表述方式。
  • 后果总结了应用该模式的优缺点,并可能提供关于如何根据不同上下文调整提示的指导。

C. 评估定义提示模式结构和思想的方法

在软件模式中,结构和参与者通常是以UML图的形式定义的,如结构图和/或交互图。这些UML图解释了模式中的参与者是什么以及他们如何相互作用来解决问题。在提示模式中,需要某种类似的东西,尽管UML可能不是一种合适的结构化文档方法,因为它旨在描述软件结构,而不是用于在提示中交流的想法。

可以使用几种可能的方法,从图表到为提示语言定义语法。尽管语法因其形式化特性而显得有吸引力,但它们也会带来以下挑战:

  • 提示的目标是将以清晰简洁的方式与可能不是计算机科学家或程序员的对话LLM用户交流知识。作为一个社区,我们应该努力创建一种易于接近的格式,以清晰地向多元化的目标受众传达知识。
  • 可以以多种不同的方式表达提示。 然而,要定义一个准确且完全表达所有细微差别的语法规则,来描述提示的各个组成部分在文本或符号中的表达方式是困难的。
  • 提示本质上是向对话式语言模型传达思想,而不仅仅是输入标记的生成。特别是,构建在提示模式中的一个思想可以通过多种方式表达,并且其表达应该处于比表示该思想的底层标记更高的层次。
  • 可以编程使LLM引入新颖的语义,为陈述和词汇创造新的沟通方式。然而,语法可能无法轻易表达通过全新符号或语言来传达的想法,这些符号或语言是语法设计者未曾了解的。

D. 前进的道路:基本上下文陈述

因此,一个开放的研究问题是:哪种方法比形式文法更有效地描述提示模式结构和思想?我们提出了基本上下文陈述的概念,这些概念是向LLM提供提示时需要传达的重要思想的书面描述。根据用户需求和体验,一个观点可以以任意方式重写和表达。然而,要传达的关键思想是以一系列简单但基本的陈述形式呈现给用户的。

采用并应用基本语境陈述方法的一个好处是,这种方法对用户来说是有意为之的直觉。特别是,我们期望用户能够理解如何在他们的领域中以适当的语境方式表达和调整这些陈述。此外,由于提示的基本思想被捕捉到,用户可以使用不同的符号或措辞来表达这些相同的想法,这些符号或措辞是通过模式引入LLM的,例如在第三节B部分介绍的元语言创建模式。

我们的最终目标是通过提供一个设计提示的框架来增强即时工程,该框架可以重复使用和/或适应其他LLMs,就像软件模式可以在不同的编程语言和平台上实现一样。然而,为了本论文的目的,所有提示都使用ChatGPT[12]在ChatGPT+服务上进行了测试。 我们在这篇论文中使用ChatGPT作为所有示例的LLM(大型语言模型),因为其广泛可用和受欢迎。这些示例是通过探索互联网上社区发布的提示文本来记录的,并结合我们使用ChatGPT进行自动化软件开发任务的经验来创建独立的提示。

3 对话式LLM的提示模式目录

本节介绍了我们的一系列提示模式,这些模式已应用于解决对话式LLM交互和输出生成领域的常见问题,以实现自动化软件任务。每个提示模式都配有具体的实现示例以及有无提示的实例。

A. 提示模式目录总结

提示模式的分类是记录这些模式的重要考虑因素。表1概述了我们迄今为止在与ChatGPT合作中所确定的提示模式目录的初始分类。
在这里插入图片描述

表1:分类提示模式

如表中所示,我们的分类框架中有五种提示模式类别:输入语义、输出定制、错误识别、提示改进和交互。每个类别如下总结。

输入语义类别涉及LLM如何理解输入以及如何将输入转换为可以用来生成输出的内容。这个类别包括元语言创建模式,该模式专注于为LLM创建自定义语言以理解。当默认输入语言不适合表达用户想要传达给LLM的想法时,这种模式非常有用。

输出自定义类别关注于限制或调整LLM生成的输出类型、格式、结构或其他属性。这个类别的提示模式包括输出自动化器、个人化、可视化生成器、食谱和模板模式。输出自动化器模式允许用户创建脚本,以便根据LLM输出建议自动执行任何任务。角色模式为LLM在生成输出时提供了一个角色或身份。可视化生成器模式允许用户通过生成可以输入到其他工具(如基于AI的图像生成器DALL-E[13])的文本输出来创建可视化。配方(Recipe)模式允许用户获取一系列步骤或操作,以实现明确的最终结果,可能包含部分已知信息或约束条件。模板(Template)模式允许用户指定输出的模板,由LVM填充内容。

错误识别类别专注于识别和解决LLM输出中的错误。此类别包括事实检查列表和反思模式。 事实检查列表模式要求LLM生成一个事实列表,该列表依赖于应进行事实核实的输出。反思模式要求LLM对其输出进行自省,并识别任何错误。

提示词改进类别专注于提高输入和输出的质量。这个类别包括问题细化、替代方法、认知验证器和拒绝破译模式。问题细化模式确保LLM总是能提出一个比用户问题更好的版本。替代方法模式需要LLM提出完成用户指定任务的替代方式。认知验证器模式指示LLM在综合回答子问题并针对整体问题生成答案之前,自动为用户建议一系列子问题。拒绝打破者模式要求LLM在拒绝产生答案时自动重新表述用户的问题。

交互类别关注用户与LLM之间的互动。这个类别包括翻转交互、游戏玩法和无限生成模式。翻转交互模式要求LLM提问而不是生成输出。游戏玩法模式要求LLM以游戏形式生成输出。无限生成模式要求LLM在用户不必每次都重新输入生成器提示的情况下无限制地生成输出。

最后,Context Control类别关注控制LLM运行的上下文信息。这个类别包括Context Manager模式,它允许用户为LLM的输出指定上下文。

本节剩余部分将使用第II-B节讨论的模式形式描述这些提示模式。

B. 元语言创建模式

  1. 目的和上下文:在与大型语言模型(LLM)的对话中,用户希望使用另一种语言来创建提示,例如用于图形的文本缩写符号、状态机的状态和状态转换的描述、用于提示自动化的命令集等。该模式的目的是向LLM解释这种替代语言的语义,以便用户可以使用这种新语言及其语义编写未来的提示。

2)动机:许多在提示中传达的问题、结构或其他想法可能用英语(或用于与LLM交互的其他常规人类语言)以外的语言更简洁、明确或清晰地表达。为了根据另一种语言生成输出,然而,LLM需要理解该语言的语义。

  1. 结构和关键思想:基本上下文陈述:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值