在本周的文章中,我们将讨论“提示工程”(prompt engineering)以及一些可以用来从 ChatGPT 等大型语言模型(LLMs)中获得更好结果的技术和“神奇短语”。
无论你是一个强大的用户、研究人员,还是建立新的人工智能业务的企业家,“提示工程”都是你需要掌握的一个主题,以获得最佳效果。这篇文章将给你一个坚实的基础,并为你指引更多的资源。
如果你曾经与 ChatGPT 或任何其他大型语言模型(LLM)进行过交互,那么你可能会遇到过这样的情况,即回答并不完全是你所期望的,或者说,确实不符合要求。
您可能得到了不正确的,或者在某些情况下是编造的信息,正如我在以前的文章中详细讨论过的那样,甚至偶然发现了一些 ChatGPT 无法重现的神秘的“不可言说的标记”。
其中一个问题是,LLMs 已经变得如此复杂,而通过它们得出答案的“黑匣子”神经网络是如此不透明,以至于用户仍然在摸索如何从它们那里获得最佳结果。
在像 ChatGPT 这样的 LLM 中输入你的问题或查询,也被称为“提示”(prompting),仅仅通过改变你的提示措辞,就可以给你带来非常不同的结果。
比如:
还记得我在上一篇文章中向 ChatGPT 提出的这个简单问题吗,它的回答是错的。
那么,你可以在你的提示词中添加什么“神奇文字”来使它做出正确的回答?下面就来看看如何通过一点“零样本思维链”(zero-shot chain of thought)的提示工程,每次都得到准确的结果(并不像听起来那么复杂,真的!)。
由于 LLM 结果的可变性,如 ChatGPT,人工智能行业最近出现了一个新的专家角色,即“提示工程师”,他的工作就是从人工智能模型中提取最大价值。
这个角色通常从具有“黑客思维”的人中招聘,包括构建精心措辞的提示,向人工智能模型解释他们想要什么。
这个职位现在非常抢手,一些人工智能公司在现金充裕的情况下可为具有正确技能或能力的人支付数十万美元。
人工智能安全公司 Anthropic 公布的“提示工程师”的工作
我们很容易想象,提示工程师的工作就是整天对着电脑向 ChatGPT 打谜语,看它是否能解决这些问题,然后调整模型以获得最佳结果。
虽然大多数人工智能公司都有团队负责测试预先训练好的模型,并实施安全措施以减少偏见结果,但这个过程通常发生在人工智能模型向公众提供之前。
另一方面,提示工程是一个更加动态的过程,包括有时在逐个提示的基础上对模型进行更有力的指导(即“少样本学习”,后文会有更多介绍),或者通过从文件中上传专门的学习“提示 - 完成对”来创建一个微调的模型(同样,后文会有更多介绍)。
虽然 ChatGPT 是基于自然语言生成模型,不需要具体的提示,但当你提供更多的背景和具体的例子时,它确实表现得更好。
事实上,你提供的信息越多,ChatGPT 和其他 LLM 模型就越能理解你所问的问题,并能提供更准确的回答。
在 OpenAI 开发的语言模型中,有两种主要技术用于激活其庞大的知识库,并提高对提示的反应的准确性。
这些技术被称为“少样本学习”(few-shot learning)和“微调”(fine-tuning)。
接下来让我们来看看它们。
命名为“少量样本”的学习是指为模型提供一些明确的例子,这些例子被用来有力地指导模型的生成,以输出所需任务的答案,如识别和分类一个新物体或概念。
通常情况下,使用的例子少于 10 个,但数量可能有所不同。对于只有一个例子的学习,你也可能听到它被称为“单次”学习(one-shot learning)。
OpenAI 模型中的单次学习可以在 ChatGPT 提示下实现,也可以通过调用 OpenAI API(应用编程接口)的“completion”端点以编程方式实现。
例如,在 ChatGPT 中使用基于提示的少样本学习来对电影类型进行分类,你可以简单地在提示中加入一些例子:
提供这些例子作为背景,可以帮助 ChatGPT 正确地将新的电影描述,“一群宇航员执行任务,通过殖民一个新的星球来拯救人类的灭绝。”,归类为“科幻/冒险”类型。
当然,仅仅为了得到一个答案而把所有这些都打出来是没有多大意义的,但是使用 ChatGPT 的对话界面,您可以继续向它提问,直到它,呃……垮掉!
然而,提供少量样本学习实例的一个更常见的方法是将它们编码在对 OpenAI 的“completion API”的调用中,如上所述,它允许你为各种用例调整提示,从成为一个友好的聊天机器人到一个将葡萄酒与食物配对的葡萄酒专家(后一种用例真的会让侍酒师感到害怕)。
OpenAI 的人工智能战略家 Jessica Shieh 在学习提示工程时推荐了一种方法,称为“房间里的天才”心理模型。
该模型假设人工智能模型(天才)对你一无所知,除了你写在纸上并通过门缝递进去的东西(提示)。
一旦你想象到了这一点,你就会对像 ChatGPT 这样的 LLM 的能力以及它需要什么来回复一个准确的结果有一个更现实的看法。
很明显,通过这种思维模式,你为“天才”提供的背景越多,你从中得到的答案就越好。在为 AI 模型编写提示时也是如此。
Jessica 推荐了在构建提示时的三个最佳做法,以便从 ChatGPT 中提取最相关的答案,具体如下:
你可能还会听到人们谈论“零样本”学习,即一个模型能够对它以前没有遇到过的新概念或物体进行分类。
例如,如果一个人工智能模型被预先训练成能够识别马这个动物,那么在被给予一幅斑马的图像时,它仍然能够将斑马识别为一种条纹马,尽管之前从未见过。
在所有情况下,“x 样本”(无论是“零”、“一”,还是“少量”)的目标都是为了从有限的数据中学习,并对新的、未见过的例子做出准确的预判。
在 ChatGPT 中,有人指出,为了获得更准确的答案,你可以使用一种令人难以置信的简单技术,甚至是一种黑客,被称为零样本思维链。
要使用这种技巧,你只需要在在你的提示末尾加一句话:
“让我们一步一步地思考”(let’s think step by step),或“放声思考”(thinking aloud)
就像变魔术一样,通过简单地在提示中添加这些额外的文字,ChatGPT 就能获得上下文,帮助它提取更准确的答案(后文有相关例子)。
与上面提到的“x 样本”学习技术不同的是,微调只根据有限的示例来指导模型,它涉及到在一个更大的数据集上训练你的模型,但缺点是它确实需要一些编码/命令行技能来实现。
这种额外的训练通常可以使模型在更广泛的特定任务上表现得更好,并取得比原始的,或少量的训练模型更好的准确性。
OpenAI 的模型正在为越来越多的大牌应用提供支持
微调通常用于调整预先训练好的基础模型,如 OpenAI 强大的 davinci 模型,以适应特定的用例,例如数字营销、合同法或其他一些领域。微调后的模型可以在内部使用,也可以作为人工智能服务出售给客户或作为更大的 SaaS 产品的一部分。
一旦你微调了你的模型,你就不必再担心在提示中提供示例。这不仅节省了成本(因为每次查询都要根据使用的 token 数量来付费),而且还使模型更有效率,减少了请求的延迟时间。该模型对你/你的公司来说也是私有的,只有拥有秘密 API token 的人才能访问。
为了从微调中获得最佳结果,必须以 JSONL 文本文件格式提供高质量示例的坚实基础。你提供的例子越多,你的模型就会表现得越好。
你的起点应该至少有几百个示例,为了获得更好的结果,这些示例应该由领域专家进行评审和批准。
好消息是,当您添加更多的示例时,OpenAI 声称您将看到相应的性能线性增长。因此,如果希望最大限度地利用微调工作,那么提供的示例越多越好(请注意,最大微调文件大小在 80-100 MB 之间)。
现在,回到我们失败的 ChatGPT 难题上:“I am not what I am”这句话中的第四个词是什么?
通过使用上面提到的零样本思维链,并简单地在提示中加上“让我们一步一步地思考”,你猜结果是什么?
Bingo!
就像魔术一般,现在我们每次都能得到正确的结果。当然,你也可以自己试试。
(注意:如果你在尝试这个方法之前用不同的提示组合进行实验,请确保你每次都开始一个新的聊天,以免影响下一次尝试,因为你之前与 ChatGPT 的对话可能会改变结果)。
提示工程是 LLMs 中一个快速变化和发展的领域。今天在模型中不好用的东西,比如数学和逻辑,明天很可能就能用了!
为了从 LLM 中获得最佳效果,就像 OpenAI 提供的那些,特别是如果你正在开发你自己的人工智能驱动的应用程序,无论是内部使用还是客户使用,你都需要通过少样本学习或微调技术进一步引导 LLM 模型。
然而,我在这里所涉及的只是 Prompt Engineering 的冰山一角,如果你有兴趣,我鼓励你探索更多。
谁知道呢,有一天它可能会导致一个新的,但收入很高的职业。然而,目前我还不清楚这个新职业会持续多久?
随着 LLMs 的能力和复杂性的提高,有人说会打破摩尔定律,从每两年翻一番到每 6 个月翻一番。当然,在某个时候,它们也许就变得十分智能,能够预测我们的需求,但不需要所有的提示工程黑客?
只有时间会告诉我们答案!