提示工程
出自 MBA智库百科(https://wiki.mbalib.com/)
提示工程(Prompt Engineering)
目录 |
什么是提示工程[1]
提示工程(Prompt Engineering)是一种针对预训练语言模型(如 GPT),通过设计、实验和优化输入提示词来引导模型生成高质量,准确和有针对性的输出的技术。
提示工程本质上来说,也是一种人机交互的方式,提示词就是我们发给大模型的输入(指令),大模型根据指令,结合自身预训练的 " 知识 ",输出指令相关的内容。而大模型输出结果的好坏,和我们输入的指令息息相关。
我们把经过无数书籍预训练的大模型,看作是一位饱读天下诗书的智者,那么如何通过高质量的提问,引导大模型生成我们想要的输出,就成为一件非常有意义的事情。
提示工程的分类[2]
从不同的视角, 可以对Prompt 进行不同的分类。在这里,尝试根据可解释性、交互方式和应用领域三个方面对Prompt 进行分类。
1、可解释性分类:硬提示和软提示
硬提示(hard prompt )是手工制作的、预定义的带有离散输入标记的文本,或者文本模板。静态提示可以合并到程序中用于编程、存储和重用,基于大模型的应用程序可以有多个提示模板供其使用。
尽管模板带来了一定程度的灵活性,但是提示语仍然需要被设置得很好才行,换句话说,静态提示一种硬编码的提示。
建立在LangChain 之上的基于大模型的 很多应用程序,其提示模板在很大程度上是静态的,它指示代理执行哪些操作。一般来说,模板包括: 定义了可以访问哪些工具,何时应该调用这些工具,以及一般的用户输入。
软提示(soft prompt )是在提示调优过程中创建的。与hard prompt 不同,软提示不能在文本中查看和编辑,包含一个嵌入或一串数字,代表从大模型中获得知识。软提示缺乏软可解释性。人工智能发现与特定任务相关的软提示,但不能解释为什么它。与深度学习模型本身一样,软提示也是不透明的。软提示可以替代额外的训练数据,一个好的语言分类器软提示有几百到几千个额外的数据点。
提示微调包括了在使用 LLM 之前使用一个小的可训练模型。小模型用于对文本提示进行编码并生成特定于任务的虚拟令牌。这些虚拟令牌被预先追加到Prompt上并传递给 LLM。调优过程完成后,这些虚拟令牌将存储在一个查找表中,并在推断期间使用,从而替换原来的小模型。当提供上下文时,LLM 的表现要好得多,而且提示微调是一种快速有效的方法,能够以动态地创建急需的上下文。
2、交互方式分类:在线提示和离线提示
"online" 和 "offline" 是一种方式来区分模型互动中 prompt 的使用方式。这两种分类表示了 prompt 在与大模型互动的时间和方式上的不同。
在线提示(Online prompt) 是在与模型的实时互动中提供的提示,通常用于即时的交互式应用。这种提示在用户与模型进行实际对话时提供,用户可以逐步输入、编辑或更改提示,在在线聊天、语音助手、实时问题回答等应用中常见。
离线提示(Offline prompt )是预先准备好的提示,通常在用户与模型的实际互动之前创建。这种提示在没有用户互动时预先设计和输入,然后整批输入模型进行批量处理。在离线文本生成、文章写作、大规模数据处理等应用中常见。
对提示分类为 "online" 或 "offline" ,可帮助确定如何有效地使用提示,以满足不同应用的需求。在线提示通常用于需要实时交互和即时反馈的情况,而 离线提示则适用于需要大规模处理或预生成文本的情况。根据具体应用和使用情境,您可以选择适当的提示类型。
3、应用领域分类
用途分类可以帮助确定 prompt 的主要目标,以便更有效地使用它们。以下是一些常见的 prompt 类别:
Information Retrieval (信息检索):这些 prompt 用于从模型中检索特定信息,如回答问题、提供事实或解释概念。用途包括问答、信息检索、事实核实等。
Text Generation (文本生成):这些 prompt 用于指导模型生成文本,可能是文章、故事、评论等。用途包括创意写作、内容生成、自动摘要等。
Translation (翻译):这些 prompt 用于将文本从一种语言翻译成另一种语言。用途包括机器翻译应用。
Sentiment Analysis (情感分析):这些 prompt 用于评估文本的情感倾向,如正面、负面或中性。用途包括社交媒体监测、情感分析应用。
Programming and Code Generation (编程和代码生成):这些 prompt 用于生成计算机程序代码或解决编程问题。用途包括编程辅助、自动化代码生成等。
Conversation (对话):这些 prompt 用于模拟对话或聊天,并回应用户提出的问题或评论。用途包括聊天机器人、虚拟助手等。
Task-Specific (特定任务):这些 prompt 针对特定应用或任务,如制定旅行计划、编写营销文案、生成报告等。用途因任务而异。
Custom Applications (自定义应用):这些 prompt 针对特定领域或自定义应用,具体用途由用户定义。用途根据用户需求而定。
通过将 prompt 分类为不同的用途,可以更好地理解模型如何应用于各种任务和情境。这有助于选择合适的提示类型,并设计它们以满足特定需求。
提示工程中的提示词[1]
提示词一般有以下要素组成:
角色:给大模型定义一个匹配目标任务的角色。用一句话就可以明确它的角色(比如 " 你是一位淘宝客服 "),从而有效的收窄问题域,减少二义性,让 " 通用 " 瞬间变得 " 专业 "。
指示:对具体任务进行详细描述。
上下文:给出与任务相关的其它背景信息(如历史对话、情境等)。
例子:举例很重要,就像是师傅教学之后,需要给徒弟(大模型)演示一下如何操作,这个手把手的操作,是大模型生成输出时的一个重要参考,对输出结果有很大帮助。
输入:任务的输入信息,最好在提示词中有明确的 " 输入 " 标识。
输出:输出的格式描述,比如用郭德纲的语气、输出不超过十个字、以 JSON 格式返回结果等。
而高质量的提示词一般是具体的、丰富的、少歧义的,也就是说,我们虽然要把大模型当人来交流,但是尽量少用 " 口语 " 的方式来沟通,而要用 " 写信 " 的方式,因为口语大多是即兴的、碎片化的短语,而写信则需要描述背景、避免歧义、短话长说,很符合优秀提示词的特点。
大家可以将以下两句提示词输入到大模型中,对比一下输出的效果:
1、请帮我提供每天的菜单
2、你是一名营养家,请为我提供每天三顿饭的中式菜单建议,一人份,包括早餐、午餐和晚餐。请确保每道菜都是偏辣口味,并尽量使用新鲜的食材。在健康营养方面,请确保每餐都包含适当的蛋白质、碳水化合物、脂肪以及维生素和矿物质。同时,请确保菜单中的菜品易于制作,烹饪时间不要过长。


