参考资料:《AI提示工程:基础 · 应用 · 实例》万欣
主要内容:
该文章是对《AI提示工程:基础 · 应用· 实例》这本书的浓缩整理,旨在让读者快速的了解AI提示工程的概念和设计原则、策略和技巧、部分应用案例。并结合笔者自身的实际使用案例来验证相关的方法和技巧。
告读者:
本篇文章因篇幅问题,书中的很多案例并未列出。若是对提示工程感兴趣的友友们可以去读一下这本书,里面的有很多的案例可以有助于对提示工程的理解和使用。在大模型发展势如破竹的今天,人与AI协作的趋势已不可逆转,转变思路,学习并使用工具迎接挑战。
目录
1.什么是提示工程?
2.提示信息的设计原则
3.提示信息的框架
4.提示工程的策略和技巧
4.1 典型的策略
4.1.1 零样本提示
4.1.2 单样本提示
4.1.3 少样本提示
4.1.4 链式思维提示
4.1.5 生成知识提示
4.2 提升一致性的策略
4.2.1 自我一致性提示
4.2.2 思维树提示
4.3 反向提示工程
4.4 协作技巧
5.案例
案例1.生成图片
案例2.生成文本
案例3.生成方案
关注我,躺不平就一起卷吧
1.什么是提示工程?
提示工程(Prompt Engineering)是一门旨在开发和优化“提示信息”以有效地利用语言模型(LM)进行各种应用和主题研究的学科。它的核心概念是在生成任务中引入明确的提示信息,以指导模型的输出。
提示信息是人类与大语言模型交互的一种方式,被视为一种基于人工智能的“编程技能”,被视为一种基于自然语言的编程语言。它可以帮助大语言模型理解人类的意图,并生成符合人类要求的输出。通过精心设计的提示信息,可以提高大语言模型的性能,使其生成更准确、更相关的输出,从而增强大语言模型的表达能力和应用效果。同时,提示信息可以拓展大语言模型的应用范围,使其能够适用于新的领域和任务,进一步发挥其潜力和价值。此外,通过研究提示信息的效果,我们可以更好地理解大语言模型的工作原理,并改进大语言模型的设计和性能。
学习提示工程对于不同角色的人群都具有重要的意义和价值。
一般读者可以通过了解提示工程,更好地与大语言模型进行交互,并获得更符合自身需求的输出结果。
学生利用提示工程,可以提高学习效率,通过有针对性的指导和引导,帮助学生更快速地理解概念、解决问题,优化学习过程,提升学业成绩和自信心。
研究人员利用提示工程,可以获得研究方向的引导、实验设计的指导和结果分析的支持,从而提升研究效率,加速实验进展,提供更准确和有价值的研究成果。
开发人员利用提示工程,可以进行代码的自动编写和补全、错误检测并给出建议,从而提高开发效率,减少潜在错误,并提供更高质量的代码编写体验。
总而言之,提示工程是一门新兴的学科,具有重要的研究价值和应用价值。提示工程可以有效帮助模型克服数据偏差的问题,可以显著提高生成结果的一致性和可控性,可以在很大程度上提高模型生成结果的可解释性和可理解性。
学习提示工程可以帮助我们更好地理解大语言模型,并利用大语言模型来解决实际问题。了解和学习提示工程可以拓宽读者视野,并为其职业发展提供机遇。
2.提示信息的设计原则
在设计提示信息时需要遵循一些原则和采用适当的方法,以确保生成结果的质量和可控性。
①明确性原则。提示信息应具备明确性,即提供清晰明确的指导信息,确保生成结果符合预期。明确性可以通过以下方式实现。
确定任务要求:明确定义生成任务的要求和目标,包括期望的输出类型、内容、格式等。
使用具体语言:提示信息中的语言应具体明确,避免模糊和歧义的表达,以便模型准确理解和执行。
②可解释性原则。提示信息应具备可解释性,使用户能够理解模型生成结果的基础和逻辑。可以通过以下方式提高提示信息的可解释性。
提供背景信息:提示信息可以包含任务相关的背景信息,帮助模型了解任务上下文和预期结果。
明确生成逻辑:提示信息可以明确指导模型的生成逻辑,包括所需的步骤、关键要素等。
解释生成结果:提示信息可以包含对生成结果的解释说明,帮助用户理解结果的含义和产生方式。
③灵活性原则。提示信息应具备一定的灵活性,以适应不同任务和场景的需求。灵活性可以通过以下方式实现。
支持参数化设计:提示信息可以包含参数,并支持用户根据具体需求进行自定义和调整。
提供可选项:提示信息可以提供多个可选项,以满足不同用户的需求和偏好。
可扩展性:提示信息应具备可扩展性,允许在需要时引入新的提示信息或修改现有提示信息。
④多样性原则。提示信息应考虑生成结果的多样性,以允许模型生成不同风格、内容或形式的输出。可以通过以下方式提高多样性。
引入随机性:提示信息中可以引入一定程度的随机性,使模型在生成结果时具有一定的多样性。
提供变体选项:提示信息可以提供不同的变体选项,允许用户根据需求选择不同的生成方式或特性。
结合其他技术:提示信息可以结合其他生成技术,如温度调节、采样策略等,以增加生成结果的多样性。
3.提示信息的框架
提示框架是对提示信息的结构化包装,通过输入中引入结构化的提示信息,以指导模型产生于提示信息相关的输出。通过提示框架的应用,生成模型可以更好地理解任务的上下文和目标,并生成与之相适应的文本。
提示框架的关键在于提供明确而具体的任务提示,以引导生成模型生成符合任务要求的文本。这种框架可以广泛应用于各种生成任务,包括对话系统、文本生成和问答系统等。通过精心设计和调试,可以提高生成模型的质量和生成结果的准确性。
以CREATE框架为例说明如何使用提示框架来确保所得到的答案满足预期的要求。
CREATE(Character,Request,Examples,Adjustmen,Type of Output,Extras)框架:角色、请求、示例、调整、输出类型、附加功能。
● 角色(Character):明确定义大语言模型扮演的角色。角色可以是一个专家、顾问、教练或任何指定的角色。为角色提供必要的背景信息,以便模型理解其在特定领域或情景中的经验和知识。
● 请求(Request):详细说明需要什么类型的回答或帮助。确保请求清晰明确,避免模棱两可的描述。如果需要特定的信息、解释、建议或创意,就确保在请求中明确提及。
● 示例(Example):给出类似的问题或情景示例,或者提供一些语句或关键词来指导模型的生成。示例有助于模型更好地理解你的意图并生成更准确的回答。
● 调整(Adjustment):如果在生成的回答中发现有不符合预期的地方,就要进行调整。调整包括修改请求的明确性、调整示例的特定内容或格式,或者向模型提供更明确的指导。在调整时,尽量提供具体的说明,以便模型能更好地满足需求。
● 输出类型(Type of Output):明确描述期望的回答的输出格式或类型。输出的类型可以是一篇文章、一个段落、一个列表、一份建议或任何适合需求的形式。确保在请求中明确指定所需的输出类型,以便模型生成符合期望的答案。
● 附加功能(Extras):如果对生成的回答有特定的格式要求、需要使用特定的术语或希望突出某些信息,那么可以在附加功能中提及。例如,使用粗体、斜体、引用、编号列表等。这些额外的说明可以帮助模型更好地满足要求。
使用CREATE框架,可以更有针对性地引导大语言模型,以获得更准确、有用和满足需求的答案。确保在每个步骤中提供明确和具体的指导,以便模型理解意图并生成符合预期的回答,同时根据需要进行调整和优化,以获得更满意的结果。
下面是一个详细且具体的使用CREATE框架的提示信息示例。
常用的提示框架还包括APE、CARE、TRACE、TAG、SAGE、ROSES、RTF、SPAR、SCOPE等(如下图所示)。需要注意的是,提示框架并非万能解决方案,不同的任务和模型需要不同的调整和技巧。同时,生成模型的结果也受限于其训练数据和模型架构的限制。因此,在使用提示框架时,需要进行实验和评估,确保生成模型的输出符合预期,并满足任务的要求。
提示框架揭示了提示工程是以目标和结果为导向的自动生成工程。提示信息要特别关注结果、目标、任务的准确描述,再加入角色、示例等细节,大语言模型就会“自动”执行命令,生成结果。
也就是说,提示信息只管分配“任务”和提出“目标”,具体工作交给大语言模型去执行并完成,这是一种典型的智力外包行为。
大语言模型执行的结果,既依赖于其固有的训练水平,又表现为任务分配者运用提示技能的展现。因此,提示技能完全可以被认为是一种基于自然语言的编程能力,具体表现为特定角色制定目标和分配任务,并对结果进行评估和控制的能力。
4.提示工程的策略和技巧
策略和技巧将帮助我们优化大语言模型的提示生成能力,提高其在实际应用中的效果和适应性。提示工程的策略和技巧主要通过提供更丰富的上下文信息,帮助模型更好地理解需求。
4.1 典型的策略
典型的策略包括零样本提示、单样本提示、少样本提示、链式思维提示、生成知识提示等。提供更多上下文信息可以减少歧义,让模型生成更符合预期的输出。
4.1.1 零样本提示
零样本提示是在不依赖具体训练示例的情况下,仅利用自然语言描述的提示信息来指导语言模型完成特定任务。该方法的主要思想是通过构造包含任务描述的提示信息,直接引导语言模型生成所需的响应,而无须额外的训练示例来微调模型。
零样本提示的优势主要体现在以下几个方面:
● 它避免了人工数据标注的高成本,使得模型可以在少量甚至无数据的情况下应用于各种任务;
● 零样本提示能够更好地保留预训练模型所获得的知识,提供更高的泛化能力和灵活性;
● 零样本提示的构造相对容易迭代和实验,能够快速优化和调试,对于低资源语言尤其友好。
然而,零样本提示也存在一些限制。生成的效果很大程度上依赖于提示工程的质量,需要仔细设计和优化提示信息以获得理想的结果。零样本提示对预训练模型的要求较高,需要具备丰富的语言理解和生成能力。
4.1.2 单样本提示
单样本提示允许模型在一次提示(如一个示例句子)的情况下生成高质量的文本。其目标是在仅有的提示信息下,使模型产生与给定主题或场景相关的连贯、合理和准确的输出。
单样本提示与传统的多样本学习方法相比具有以下优势。
● 计算效率高。传统的多样本学习方法通常需要大量数据进行训练,而单样本提示只需要一个示例即可,在训练大型模型时大幅降低了计算成本。
● 泛化能力强。由于单样本提示依赖于强大的预训练模型,这些模型已经从海量数据中学习了丰富的知识,因此单样本提示可以在不同场景下产生良好且多样化的输出,提高模型的泛化能力。
● 灵活性强。单样本提示允许用户根据需 要为模型提供不同的提示信息,从而生成多样化的文本。这为自然语言生成任务提供了更高的灵活性和可定制性。
下面是一个基于单样本提示的示例。
上例表明,单样本提示也存在一定的挑战,如如何确保生成文本的质量和准确性、如何平衡多样性和连贯性等。例如,女孩名字的第三个方案和男孩名字的第二个方案,并不能严格执行给定的取名原则.
4.1.3 少样本提示
少样本提示在零样本提示的基础上提供了极少量的训练示例来辅助模型完成特定任务。少样本提示的特点包括使用1~10个训练示例,结合自然语言描述的提示信息,直接引导模型生成新的响应,无须额外微调。示例的主要作用是减少提示信息的歧义,提高模型对任务理解的准确度。同时,该方法仍保留了预训练模型的知识,避免过拟合于少量示例。
文本摘要任务的提示信息示例如下。
相较于零样本提示,少样本提示具有以下几个优势。
● 少样本提示减少了对提示信息质量的依赖,因为样本能够提供更具体、更直接的任务指导信息,使得模型更容易捕捉任务要求。
● 少样本提示使得模型更易于推广到样本范围之外,因为样本的引入提供了更多的任务背景和上下文。
● 少样本提示还提供了更直观的指导方式,使模型能够更准确地理解任务并生成相应的输出。
少样本提示仍需仔细设计样本,以避免引入数据偏差或噪声对模型性能产生负面影响。样本数量的选择也很关键,过少的样本可能无法提供足够的信息,过多的样本则可能导致模型过度依赖示例而忽略了预训练模型所学到的知识。
标准的少样本提示在许多任务中表现良好,但在处理更复杂的推理任务时,少样本提示仍然不是一种完美的技术。(比如任务类型设计了更多的推理步骤)
4.1.4 链式思维提示
链式思维提示是提示工程领域中的一种应用广泛的技术,其核心思想是通过多步骤的提示,引导模型进行逻辑推理和链式思维,从而生成符合逻辑的响应。链式思维提示的主要特点包括将任务分解为多个子任务或思维步骤,形成提示信息序列;每个提示信息关注一个具体的思维环节,形成完整的逻辑链;模型根据提示信息的顺序逐步展开思考,输出符合逻辑的结果;它可以显式地引导模型进行复杂推理,而不仅仅是预测;同时,需要精心设计提示步骤,确保逻辑关系清晰且正确。
多步阅读理解示例:
数学计算和逻辑推理示例:
相较于其他提示方法,链式思维提示具有以下几个优点。
● 链式思维提示可以引导模型进行复杂推理,使模型能够在逻辑链的引导下进行多步骤的推理过程,而不仅仅进行简单的预测。
● 使用链式思维提示生成的输出更符合逻辑,具有更好的连贯性和一致性,使得模型的响应更加合理和可信。
● 链式思维提示的过程具有更高的可解释性和可检验性,因为每个步骤都可以被分析和评估,从而增加了模型的可靠性。
● 链式思维提示可以融合不同的思维技能,使得模型能够在多个维度上进行推理和思考,有效提高了模型的综合能力。
链式思维提示更加依赖于精心的提示信息设计,需要确保每个步骤之间的逻辑关联及整体的正确性。如果提示信息序列中的逻辑关系有误或存在错误,将会导致模型的推理过程出现错误。因此,在使用链式思维提示时,需要仔细考虑每个步骤的设计,确保提示信息序列能够正确引导模型进行逻辑推理,并生成准确的输出。
4.1.5 生成知识提示
生成知识提示的方法包括使用大语言模型生成有用的知识,并将该知识与问题连接作为输入。为了适应不同的设置,可以从通用大语言模型中以少量示例的方式提取知识。研究的实验结果显示,生成知识提示的方法在数值常识、通用常识和科学常识等多个常识推理任务上改善了零样本和微调模型的性能,并在其中三个数据集上取得了最新的最佳结果。
4.2 提升一致性的策略
提示工程策略和技巧的不同运用方法可以让模型生成更一致和连贯的响应,如自我一致性提示、思维树提示等。一致性是合理的连续对话和叙述所必需的。
4.2.1 自我一致性提示
自我一致性提示用于改进大语言模型在复杂推理任务中的表现。该策略用于替代链式思维提示中常用的贪婪解码方法。自我一致性提示利用了一种直觉,即复杂的推理问题通常会采用多种不同的思维方式来得出其独特的正确答案。自我一致性提示通过从少量思维链提示推导出的各种推理路径进行采样,然后利用一致性评价标准选择最符合逻辑的答案。通过少样本链式思维提示采样多个多样化的推理路径,并利用生成结果选择最一致的答案,有助于提升在涉及算术和常识推理的任务中的链式思维提示性能。
算术的示例如下
计算最终答案涉及几个步骤,我们可以看到已经出现了多数答案,因此它将成为最终答案。
以上示例表明,使用自我一致性提示策略,可以有效引导大语言模型进行多样化的推理,并通过比较选择最一致的答案作为最终结果。
4.2.2 思维树提示
思维树提示利用树状结构组织多级提示,引导模型产生逻辑自洽的响应。
思维树提示的主要特点:
● 使用树图来组织多级提示,其中不同的分支表示不同的思维方向;
● 根节点是最高级的任务描述,而分支则表示详细的子任务或要点;
● 模型根据树状结构逐步展开思考,以保持一致的上下文;
● 该方法既可以表示任务的分解结构,也可以表示层级的逻辑推理;
● 通过树状结构,明确了思维的组织与发展方向;
● 相较于链式思维提示,思维树提示更具广度,可以表示并行的思考路径。
以下是一个思维树提示在多角度作文中的示例。
根据以上思维树提示,模型可以逐步组织思路,先从正面角度讨论手机对社交的帮助,然后谈到过度使用手机的负面影响,最后表明自己的观点,从而写出一个多角度讨论且内容连贯的文章。
上例展示了如何利用思维树提示引导模型进行多维度的思考,并逐级展开每个方向的思路,保持逻辑自洽。这可以帮助模型生成细致的、结构性强的长文本。
思维树提示相比于其他提示策略具有几个优势。
● 思维树提示能够引导模型进行结构性的思考,树状结构的组织方式可以帮助模型更好地理解任务的复杂性和层次结构。
● 思维树提示使模型的推理过程具备较高的可检验性和可解释性,因为每个分支和节点都可以被分析和评估,增加了模型推理过程的可靠性。
● 思维树提示可以表示更丰富的思维路径,允许模型在不同的分支上进行并行思考,使其更全面和多角度地完成任务。
● 使用思维树提示生成的输出更符合逻辑,前后具有一致性,使模型的响应更加合理和连贯。
使用思维树提示需要精心设计树状结构,以确保提示信息的组织合理且意图清晰。合理的树状结构可以帮助模型更好地理解任务的复杂性和层次结构,并引导模型进行准确的推理。因此,在使用思维树提示时,需要仔细考虑树的组织方式,确保每个节点和分支的信息传递清晰,避免模型产生错误的推理结果。思维树提示尤其适用于需要深入思考的复杂任务场景,可以帮助模型在大量信息和多个层次的逻辑推理中更好地进行决策和生成响应。
4.3 反向提示工程
在提示工程领域,反向提示工程是一项具有重要意义的研究。它类似于观看魔术表演时询问魔术师是如何将玫瑰花从手绢里变出来的。通过理解这些“魔术技巧”,我们可以大幅提升文本生成模型的性能。反向提示工程是一项具有潜力改变文本生成模型未来发展的技术。随着技术的进一步发展,反向提示工程有望成为一种强大的工具,用于创造出更准确、更有影响力的文本。
反向提示工程是指从输出文本反向生成提示信息。通过反向提示工程,我们可以揭示提示信息与生成文本之间的复杂关系,从而提高文本生成模型的性能。反向提示工程首先使用大语言模型生成与输出文本相匹配的文本,然后使用反向传播算法来更新提示信息,使其生成的文本更加接近于输出文本。
假设一家名为“Star Coffee”的奶茶咖啡公司,注意到竞争对手“RX”有非常吸引人的产品描述,且推动了销售。“Star Coffee”想模仿“RX”的风格,但是还要避免重复“RX”的内容。“RX”的网站上的产品描述为“咖啡没有故事,有故事的,只是喝咖啡的人。苦,但是清醒,热爱从不降温。”“Star Coffee”对其进行反向提示工程。
下面,展示反向提示工程的两个步骤。
①步骤1:模型预热。
②步骤2:提供内容。
反向提示工程并不局限于特定的背景或内容类型。它可以应用于从生成博客文章到生成代码片段的各种场景。
(1)生成博客文章
作为博主或内容创作者,反向提示工程可能会改变游戏规则。内容创作者可以借鉴一篇写得很好的博客文章,并对其进行反向提示工程以生成提示信息。然后,这个提示信息可以用来生成类似的博客文章。例如,如果针对一篇以“瑜伽的好处”为主题的博客文章,可以通过反向提示工程,得到以下提示信息:“写一篇关于[活动]的信息性博客文章,语气应该是[语气],写作风格应该是[写作风格]”。
(2)生成代码片段
对于开发人员来说,反向提示工程可以用来生成代码片段。你可以借鉴一段代码,并对其进行反向提示工程。生成的提示信息可以用来生成类似的代码片段。例如,如果有一个用于对列表进行排序的Python代码片段,可以对其进行反向提示工程,得到以下提示信息:“写一个[语言]的代码片段,用于[任务]。然后,解释代码的功能和工作原理”。
(3)生成产品描述
对于从事市场营销或销售工作的人员,反向提示工程可以用来生成产品描述。例如,可以借鉴一份优质的产品描述样本,进行反向提示工程。生成的提示信息可以用来生成类似的产品描述。例如,针对一份关于智能手机的产品描述,可以通过反向提示工程,得到以下提示信息:“为[产品]写一个引人注目的产品描述。突出其关键特点和优势”。
无论是新媒体内容创作者、代码开发者还是市场营销从业者,反向提示工程都可以帮助他们提升内容创作水平。通过积极探索反向提示工程,可以充分发挥其潜力。
4.4 协作技巧
将ChatGPT等大语言模型视为一种多功能助手是最佳方式,它可以充当研究助手、编码助手、问题解决助手或满足您其他需求的助手。意识到并培养这种合作氛围可以给用户带来更大的成功。以下是可以更好地提升大语言模型的能力从而促进合作的高级技巧。
(1)利用反向提示工程
为了获得更多的提示信息,可以使用以下问题激发大语言模型的创造力:
“请提供一些关于如何提高研究论文写作质量的提示信息。”
“有哪些可以优化编码效率的提示信息?”
“请给出解决复杂问题的提示信息和策略。”
大语言模型将生成有用的提示信息,您可以使用这些提示信息来进一步增强其回答。
(2)引导大语言模型进行深入分析
大语言模型可以进行推理和解释,以提供更加专业的回答。可以通过询问的方式引导ChatGPT等大语言模型进行推理和详细解释,以扩展其回答的内容,如可以使用以下问题来实现扩展其回答内容的目的:
“请解释一下这个概念背后的原理和相关的学术研究。”
“能否提供一个具体案例来支持您的观点?”
“是否有相关的统计数据或研究结果来支持您的说法?”
大语言模型将努力提供更深入的分析和相关信息,使回答更具学术性和专业性。
(3)引用来自可信的来源和研究领域的知识
大语言模型可以提供背景知识和引用研究,以支持其回答的可信度和专业性。您可以要求大语言模型提供相关研究领域的知名学者或经典论文的引用,以增加回答的学术性。例如,可以通过以下问题实现上述目的:
“您能提供一些已发表的研究论文来支持您的观点吗?”
“请引用一位在这个领域有影响力的专家的观点。”
“是否有权威机构发布的报告或调查数据可以支持您的说法?”
通过采用以上高级技巧,可以更好地利用ChatGPT等大语言模型的能力,使其回答更加学术化、专业化,并提供更有深度和可靠性的信息。掌握有效的协作技巧可以为工作、研究和学术探索打造更强大的“智能助手”。
5.案例
案例1.生成图片
因为笔者是一个业余的军事爱好者,在一些军事UP主视频的评论下面经常会出现"白象",而实际是隐晦的指代"熊猫",有些网友也po出了比较可爱的图片如下图:
通过AI尝试绘制出类似的图片。
备注:图片生成任务不需要复杂的逻辑,因此不使用提示框架,按照设计提示信息的原则,描述清楚即可。
讯飞星火:
即梦AI
直接自然语言描述引导大模型生成图片
在自然语言描述的基础上添加了一个示例
结论:零样本提示对预训练模型的要求较高,需要具备丰富的语言理解和生成能力,否则就需要人为仔细设计和优化提示信息以获得理想的结果。从图片生成上看,即梦AI要明显优于讯飞星火。
案例2.生成文本
笔者读完了《急救,比医生快一步》,并整理文案录制了分享音频上传到喜马拉雅的"斯斯讲书"频道,同时笔者也希望能在抖音平台做知识分享。但是抖音平台属于短视频平台,其用户习惯于快准狠的视频节奏,对于长视频并不偏好。如果需要在抖音平台做知识分享,则需要修改文案,使其符合抖音用户的观看习惯。
尝试使用反向提示工程策略对已有文案进行修改以符合抖音平台风格。
豆包
备注:因原文案内容过长省略
案例3.生成方案
笔者最近新开了一个DIY专辑,计划做一个带4G摄像头的电子狗链。对于摄像头方案笔者做了一些调研并完成了方案选择。
《DIY项目之“一只眼狗链”》:视频方案-CSDN博客
借此机会利用AI工具,看看它能提供什么样的方案。
尝试使用提示框架、链式思维或思维树等策略使用AI做摄像头方案。
小结:因篇幅问题,并没有做更多的尝试了。总体上来讲,如果使用AI的人本身思路清晰,结合熟练的使用提示信息原则和策略,得到的内容基本是能满足任务要求的。更复杂(类似做项目方案,考虑的方方面面比较多)的任务需要很精细的设计提示信息,但肯定是可以从AI给出的回应中能得到一些启发的。
关注我,躺不平就一起卷吧
顺便厚颜的打个广告,♥关注我♥,发布的文章专辑涉及到嵌入式开发、AI知识、日常调试bug记录、AI工具使用记录等。当然,也可以关注公众号IT搬砖客,部分专辑源码免费下载。