使用 Prompt Engineering 提升你的 GPT

news/2024/5/20 6:04:33 标签: prompt, gpt, openai, .net

作者: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__33">撰写 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_127">开始自己撰写 prompt

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

  • 注册或请求访问 OpenAI 或 Azure OpenAI 服务。
  • 使用您的认证信息开始尝试 OpenAI .NET 示例。

接下来是什么?

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

我们想要听到您的声音

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

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

其他资源

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


http://www.niftyadmin.cn/n/699181.html

相关文章

CSS知识点汇总(十一)--回流重绘

文章目录 怎么理解回流跟重绘?什么场景下会触发?1、回流和重绘是什么?2、如何触发回流和重绘3、如何避免回流和重绘的发生 怎么理解回流跟重绘?什么场景下会触发? 1、回流和重绘是什么? 在HTML中&#xf…

HTML - 在网页上显示mermaid流程图(使用纯js在网页上显示mermaid流程图)

HTML - 在网页上显示mermaid流程图(使用纯js在网页上显示mermaid流程图) 本文讲解如何使用纯JS在HTML中渲染mermaid流程图。 前言 首次使用纯JS渲染mermaid公式是在编译原理课的程序设计正则表达式转DFA的可视化上。(Re2DFA) …

C++ Primer Plus笔记: 2023.06.29

1.对指针解除引用意味着获得指针指向的值。 2.C允许将指针和整数相加。加1的结果等于原来的地址加上指向的对象占有的总字节数。还可以将一个指针减去另一个指针,获得两个指针的差。后一种运算将得到一个整数,仅当两个指针指向同一个数组(也…

功能键F4在Microsoft Excel中有什么用

的确,许多 Excel 用户发现使用键盘快捷键对他们来说更有效。事实上,键盘快捷键可能是使用鼠标的最佳选择,因为使用 Excel 时使用触摸屏可能不是视力障碍者的最佳选择。 使用功能键,如 Excel 中的 F4 以及 F2 可能是非常必要的。在这篇文章中,我们将研究功能键 F4 及其在 …

Linux Shell高级话题

预计更新 1: 基础知识 简介和安装 基本命令 变量和环境变量 2: 流程控制 条件语句 循环语句 函数 3: 文件处理 文件读写 文件权限和所有权 文件搜索和替换 4: 网络和进程 网络通信 进程管理 信号处理 5: 文本处理 正则表达式 文本分析和处理 生成报告和日志 6: 用户界面 命…

npm 包 - serve 使用

前端打包后,或者本地的html文件。有时需要将打包好的项目跑一下看看效果,这时就可以使用 serve 工具,在本地启动一个静态文件服务器。本文主要简单记录下 npm 包 serve 的基本使用命令。 一、全局安装 serve npm install serve -g二、运行 s…

go 语言string

go 语言string Go语言中的字符串(string)是一种不可变的字节序列。它是以UTF-8编码的Unicode字符集的一个集合。在Go中,字符串是原生类型,使用双引号或反引号括起来表示。 以下是关于Go语言字符串的一些重要特性: 字…

scrapy的反反爬

爬虫的反反爬策略 反反爬的总体思想○ 将爬虫伪装成自然人的浏览行为 自然人浏览的特点○ 访问频率不会太过于高○ 使用浏览器进行访问○ 网站设置登录要求后仍然能够正常访问○ 可以完成验证操作 scrapy的反反爬功能的实现○ 爬虫配置文件setting.py○ 爬虫框架的中间件使…