大模型的目标是理解和生成人类语言。给定一些词语,语言模型可以预测下一个词语可能是什么,或者给定的一些词语生层对应内容。
那么如何引导它们产生期望的输出,或者说如何提问,就成为了一个关键的问题。这就引入了一个重要的概念,即"Prompt Engineering",也就是提示工程。
什么是提示词(Prompt)?
如何向大语言模型提问,或者更好的提问,就是指提示词(Prompt);提示词是给LLM(大语言模型)的指令,它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。LLM会基于 prompt 所提供的信息,生成对应的内容从而获得符合预期的结果。
什么是提示工程(Prompt Engineering):
Prompt Engineering 是一种人工智能(AI)技术,它通过设计和改进 AI 的 prompt 来提高 AI 的表现。通俗而言,是指如何在不更新模型权重的情况下与 LLM 进行沟通,以引导LLM的输出得到更有意义结果的方法。Prompt Engineering 的目标是创建高度有效和可控的 AI 系统,使其能够准确、可靠地执行特定任务。但是我们要知道,我们发给大模型的 prompt,不会改变大模型的参数。和大模型对话,不会让 ta 变聪明,或变笨。但对话历史数据,可能会被用去训练大模型。
学会提示工程,就像学用鼠标、键盘一样,是 AGI 时代的基本技能。
- 「Prompt」 是 AGI 时代的「编程语言」
- 「Prompt 工程」是 AGI 时代的「软件工程」
- 「提示工程师」是 AGI时代的「程序员」
想让机器很好地理解人类说的话,还需要一个过程,因为人类的语言从根本上说是不精确的,这个过程可能3年,可能5年,但不会太长。即使过程不会太长,但提示工程依然是需要我们掌握的。
Prompt 的典型构成
角色:给 AI 定义一个最匹配任务的角色,比如:「你是一位软件工程师」「你是一位小学老师」
指示:对任务进行描述
上下文:给出与任务相关的其它背景信息(尤其在多轮交互中)
例子:必要时给出举例,学术中称为 one-shot learning, few-shot learning 或 in-context learning;实践证明其对输出正确性有很大帮助
输入:任务的输入信息;在提示词中明确的标识出输入
输出:输出的格式描述,以便后继模块自动解析模型的输出结果,比如(JSON、XML)
类似下边例子,可以指定角色,给定描述,然后提出问题:
提示工程种类
随着提示工程的进步,可以分为三类:
- Zero-shot:仅使用当前任务的自然语言描述,不进行任何梯度更新;
- One-shot:当前任务的自然语言描述,加上一个简单的输入输出样例,不进行任何梯度更新;
- Few-shot:当前任务的自然语言描述,加上几个简单的输入输出样例,不进行任何梯度更新;
chatGPT 的发展史,就是从 zero-shot 到 few-shot。
Zero-shot Learning
Zero-shot learning(零样本学习),零样本学习是指该模型可通过从未见过的类别进行分类,使机器具有推理能力,实现真正的智能。
从原理上来说,ZSL 就是让计算机模拟人类的推理方式,来识别从未见过的新事物。之所以独立出来,是因为它解决问题的思路不同于传统的机器学习方法。
首先通过一个例子来引入zero-shot的概念。假设小明和爸爸,到了动物园,看到了马,然后爸爸告诉他,这就是马;之后,又看到了老虎,告诉他:“看,这种身上有条纹的动物就是老虎。”;最后,又带他去看了熊猫,对他说:“你看这熊猫是黑白色的。”然后,爸爸给小明安排了一个任务,让他在动物园里找一种他从没见过的动物,叫斑马,并告诉了小明有关于斑马的信息:“斑马有着马的轮廓,身上有像老虎一样的条纹,而且它像熊猫一样是黑白色的。”最后,小明根据爸爸的提示,在动物园里找到了斑马。
上述例子中包含了一个人类的推理过程,就是利用过去的知识(马,老虎,熊猫和斑马的描述),在脑海中推理出新对象的具体形态,从而能对新对象进行辨认。(如图1所示)ZSL就是希望能够模仿人类的这个推理过程,使得计算机具有识别新事物的能力。
ZSL就是希望我们的模型能够对其从没见过的类别进行分类,让机器具有推理能力,实现真正的智能。其中零次(Zero-shot)是指对于要分类的类别对象,一次也不学习。
One-Shot Learning
一次样本学习(One-Shot Learning)是一种只需要一个样本就能学习新类别的方法。这种方法试图通过学习样本之间的相似性来进行分类。例如,当我们只有一张狮子的照片时,一次样本学习可以帮助我们将新的狮子图像正确分类。
Few-Shot Learning
少样本学习(Few-Shot Learning)是介于零样本学习和一次样本学习之间的方法。它允许模型在有限数量的示例下学习新的类别。相比于零样本学习,少样本学习提供了更多的训练数据,但仍然相对较少。这使得模型能够从少量示例中学习新的类别,并在面对新的输入时进行准确分类。
Prompt 调优
找到好的 prompt 是个持续迭代的过程,需要不断调优。比如按照模型友好的格式提供prompt,更有利于得到我们想要的答案。
- OpenAI GPT 对 Markdown 格式友好
- OpenAI 官方出了 Prompt Engineering 教程,并提供了一些示例
- Claude 对 XML 友好。
另外高质量 prompt 核心要点是:具体、丰富、少歧义。
最有效的方式就是多试,「试」是常用方法,有时一字之差,对生成概率的影响都可能是很大的。