使用 Prompt Engineering 提升你的 GPT

作者:Luis Quintanilla - Program Manager, Developer Division
翻译:Alan Wang
排版:Alan Wang

欢迎回来,继续查看有关 OpenAI 和 .NET 的博客系列!

如果您是新来的,请查看我们的第一篇文章,我们在其中介绍了系列内容,并向您展示如何在 .NET 中开始使用 OpenAI。

本文的重点是 Prompt Engineering,以及如何改进您提供给 OpenAI 模型的输入,以产生更加贴切的响应。让我们开始吧!

什么是 Prompt?

Prompt 是提供给模型以生成 Completion 的用户输入。Prompt 是指导模型生成称为 Completion 的响应的东西。

想要了解更多有关 Prompt 和 Completion 的详细信息,请参阅使用 .NET 开始 OpenAI Completions

提示的结构

一条 Prompt 至少由两个部分组成:

  • 上下文
  • 任务/提问

给定以下 Prompt:

为二年级学生总结:

木星是距离太阳第五近的行星,也是太阳系中最大的行星。它是一个气态巨大行星,其质量是太阳的千分之一,却是太阳系其他所有行星质量总和的2.5倍。在夜空中,肉眼可见的最亮物体之一就是木星,早在有记载的历史以前就已被古代文明所知晓。木星得名于罗马神话中的主神朱庇特[19]。从地球上观察,木星足够明亮,以至于它反射的光可以投射出可见的阴影[20],通常是夜空中继月亮和金星之后第三亮的自然天体。

它可以拆分为:

  • 背景:木星是距离太阳第五近的行星,也是太阳系中最大的行星。它是一个气态巨大行星,其质量是太阳的千分之一,却是太阳系其他所有行星质量总和的2.5倍。在夜空中,肉眼可见的最亮物体之一就是木星,早在有记载的历史以前就已被古代文明所知晓。木星得名于罗马神话中的主神朱庇特[19]。从地球上观察,木星足够明亮,以至于它反射的光可以投射出可见的阴影[20],通常是夜空中继月亮和金星之后第三亮的自然天体。

  • 任务/提问:为二年级学生总结这一内容:

什么是 Prompt Engineering?

Prompt Engineering 是编写 Prompt 以产生更接近您期望意图的输出的过程和技术。

撰写 prompt 的技巧

虽不算详尽,但以下是提高 prompt 和 completion 质量的小技巧:

  • 表达清晰明确
  • 提供样例输出
  • 提供相关上下文
  • 不断改进、改进、改进

表达清晰明确

当设计 prompt 时,提供的细节越少,模型需要做出的假设越多。在 prompt 中设置边界和约束,以引导模型输出您想要的结果。

例如,假设您想使用以下 prompt 对一则社交媒体帖子的情绪进行分类:

对这篇帖子进行分类
“My cat is adorable ❤️❤️”

您可能会得到一个类似以下的回复:这条帖子将被归类为一则声明或意见。

可以看到,这篇文章被任意划分了一个类别。但是,该类别与情绪无关。通过在 prompt 中提供更多的指导和约束,您可以引导模型产生您想要的输出。

当您更新 prompt 以求更加精确时,您正在告知模型您希望一个代表这篇帖子情绪的输出,并在积极、中立或消极三个类别中选择。

请按照积极、中立、消极对这篇帖子的情绪进行分类
“我的猫很可爱 ❤️❤️”

在这种情况下,您会得到一个积极的结果,这更接近您最初情绪分类的意图。

提供样例输出

最快的开始生成输出的方法是使用模型训练时预先配置的设置。这被称为零样本学习。通过提供示例,最好使用与您将要使用的数据相似的数据,您可以更好地指导模型以产生更好的输出。这种技术被称为小样本学习。

例如,假设您想从一份电子邮件这样的文档中提取信息,并生成一个 JSON 对象。

从此文本中提取城市和机场代码并生成 JSON:
“I want to fly from Los Angeles to Miami.”

您可能会得到如下响应:

{
  "From": {
    "City": "Los Angeles",
    "Airport Code": "LAX"
  },
  "To": {
    "City": "Miami",
    "Airport Code": "MIA"
  }
}

虽然这是正确的,但生成的 JSON 对象的模式与我的应用程序所期望的模式并不匹配。在这种情况下,我可以提供一个我期望的输出示例,以指导模型正确地格式化我的输出。给出以下提示:

从此文本中提取城市和机场代码并生成 JSON:

Text: “I want to fly from Los Angeles to Miami.” JSON Output: {
“Origin”: { “CityName”: “Los Angeles”, “AirportCode”: “LAX” },
“Destination”: { “CityName”: “Miami”, “AirportCode”: “MIA” } }

Text: “I want to fly from Orlando to Boston” JSON Output:

您可以期待模型产生类似以下的输出:

{
  "Origin": {
    "CityName": "Orlando",
    "AirportCode": "MCO"
  },
  "Destination": {
    "CityName": "Boston",
    "AirportCode": "BOS"
  }
}

提供相关上下文

像 GPT 这样的模型是基于互联网上数百万份文档和文物上进行训练的。因此,当您要求它执行像回答问题这样的任务时,如果您不限制它生成响应所能使用的资源范围,最好的情况下,您会得到一个可行的答案(尽管可能是错误的),而最坏的情况下,答案是虚构的。

例如,如果您要求某人写一篇《哈利·波特》的摘要,您可能指的是几件事:电影、书籍或视频游戏。虽然这些媒介中的角色和一些元素可能是相似的,但故事情节却是不同的。因此,您可能会得到不同的看似合理却不正确的答案。

零样本和小样本学习提供了您期望模型生成的输出示例,您可以在 prompt 中提供事实和其他相关信息,以指导模型回答问题和执行其他任务。这种技术被称为 grounding,因为您正在基于事实对模型进行落地。在非常高的层次上,这就是 Bing 中的 AI 功能的工作原理。首先执行搜索以找到最相关的文档来回答您的提问。然后,从最相关的网页中提取的内容作为 prompt 中的附加上下文,AI 模型使用此信息来生成更贴切的响应。

假设您想回答一些关于文档的问题。这个文档可以是像维基百科这样的公共网页,也可以是来自您公司内部知识库的文档。您的 prompt 包含了上下文中的附加信息,看起来大概会像下面这样:

木星是距离太阳第五近的行星,也是太阳系中最大的行星。它是一个气态巨大行星,其质量是太阳的千分之一,却是太阳系其他所有行星质量总和的2.5倍。在夜空中,肉眼可见的最亮物体之一就是木星,早在有记载的历史以前就已被古代文明所知晓。木星得名于罗马神话中的主神朱庇特[19]。从地球上观察,木星足够明亮,以至于它反射的光可以投射出可见的阴影[20],通常是夜空中继月亮和金星之后第三亮的自然天体。

回答以下问题:

Q:太阳系中的第五大行星?A:木星

Q:木星的质量与太阳相比如何?

您可能会得到一个类似以下的回复:A:木星的质量是太阳的千分之一。

在这个例子中,你不仅为模型提供了用作其回复部分的事实和信息,而且还提供了你希望它如何回复的示例。

不断改进、改进、改进

生成输出可能是一个试错的过程。如果首次尝试没有得到你想要的结果,不要气馁。尝试本文及链接资源中的一种或多种技术,找到最适合您用例的方法。复用模型生成的初始输出集,以为您的 prompt 提供更多的上下文和指引。

开始自己撰写 prompt

既然您已经知道了几种改进 prompt 和 completion 的方法,现在是时候开始自己的生成了。开始吧:

接下来是什么?

在下一篇文章中,我们将更详细地介绍 ChatGPT 以及如何在更多的会话环境中使用 OpenAI 模型。

我们想要听到您的声音

帮助我们更多地了解您在应用程序中如何使用 AI。请花几分钟时间完成一份简短的调查问卷。
参与调研

还有哪些您想要进一步了解的话题?欢迎告诉我们。

其他资源

如果您想要了解更多构建自己的 prompt 的技术,请查看文章 Prompt Engineering 技巧 以及 Prompt 的艺术:如何用生成式 AI 得到最佳输出

猜你喜欢

转载自blog.csdn.net/MicrosoftReactor/article/details/131466799