吴恩达 Prompt Engineering 课程笔记

吴恩达 Prompt Engineering 课程笔记

背景

最近,吴恩达教授 和 Isa Fulford 一起推出了一个关于 ChatGPT prompt enginerring 的官方课程,快来学习吴恩达 Prompt吧!Isa Fulford 是 OpenAI 技术团队的成员,ChatGPT检索插件的作者以及 OpenAI cookbook的贡献者。这门课程所介绍的技巧秒杀当前市面上一众收费的韭菜课程,非常有必要学习并应用起来。
课程链接:https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/1/introduction

另外,你也可以尝试在微信上使用ChatGPT,详见:免费在微信上使用ChatGPT

当然,你也可以使用免费版的ChatGPT,不用注册,不用登录,不用翻,你懂的。ChatGPT免费版

这样,你就可以一边学习 吴恩达 Prompt ,一边使用ChatGPT来实践了!

一、介绍

第一节课是对整个课程的介绍,该系列课程将分享关于 prompt 的准则和技巧,然后会介绍几个具体应用:总结(Summarizing)、推断(Inferring)、转换(Transforming)、扩展(Expanding),最后还会演示了如何使用LLM构建一个聊天机器人。

另外吴恩达教授还特别介绍了两种类型的大模型,基础大模型(base LLMs)以及 指令微调大模型(instruciton tuned LLMs)。基础大模型是通过海量数据在超大参数量级上训练出来的,能够根据文本训练数据预测下一个词的基础模型,更像是一个黑盒系统,没有人能保证这个黑盒系统生成的内容是无害的。而指令微调大模型则是在其基础上经过训练以遵循指令并提供有用(Helpful)、诚实(Honest)和无害(Harmless)输出的模型,典型的就是 instructGPT 和 chatGPT。

二、准则与技巧

这节课程介绍了关于 prompt enginerring 的两大准则以及实操的技巧。

准则1:清晰且明确的指令

clear ≠ short,实际可能正好相反,长的 prompt 通常能够包含更多的细节。

技巧1:使用分隔符

使用分割符来清晰的标识出输入的不同部分,分割符可以是任何不容易造成歧义的符号,比如:

定界符可以使用任何符号,例如: ''', """, < >, <tag> </tag>, :
Triple backticks: ```
Triple quotes: """
Angle brackets: < >
XML tags: <tag> </tag>
Triple dashes: ---

详见如下调用方式:

---------------------------------以下为prompt---------------------------------
将"""包裹的文本总结为一句话

"""
在大型语言模型(LLMs)的发展中,主要有两种类型的LLMs,我将其称为基础LLMs和指令调优LLMs。基础LLMs是通过文本训练数据来预测下一个词汇,通常是在大量互联网和其他来源的数据上进行训练,以找出最可能接下来出现的词汇。例如,如果您给出这样的提示:“从前,有一只独角兽”,它可能会完成这个句子,也就是预测接下来的几个词是“生活在一个充满独角兽朋友的神奇森林里”。

但是,如果您给出这样的提示:“法国的首都是什么?”那么基于互联网上的文章,基础LLMs很可能会回答类似“法国最大的城市是什么?法国的人口是多少?”等问题,因为互联网上的文章很可能会包含关于法国的一系列测验问题。

与此相反,指令调优LLMs是大型语言模型研究和实践的重点。指令调优LLMs经过训练,可以遵循指令。因此,如果您问它:“法国的首都是什么?”它更有可能输出类似“法国的首都是巴黎”的答案。通常,指令调优LLMs的训练方式是:首先使用大量文本数据训练基础LLMs,然后对其进行微调,输入输出是指令和尝试遵循这些指令的良好示范。然后,经常使用称为RLHF(从人类反馈中学习的强化学习)的技术进一步优化,使系统更好地提供帮助和遵循指令。

由于指令调优LLMs经过训练,以变得有用、诚实和无害,因此它们不太可能输出有问题的文本,如相较于基础LLMs更有毒的输出。实际使用场景已经向指令调优LLMs转变。您在互联网上找到的一些最佳实践可能更适合基础LLMs,但对于现今的大多数实际应用,我们建议大多数人更关注指令调优LLMs,因为它们更易于使用,同时,由于OpenAI和其他LLM公司的努力,变得更加安全和一致。
"""

---------------------------------以下为输出---------------------------------
这段文本概括了基础LLMs和指令调优LLMs的区别:基础LLMs通过文本训练数据预测下一个词汇,而指令调优LLMs经过训练以遵循指令并提供更有用、诚实和无害的输出。实际应用场景已经向指令调优LLMs转变。

使用分割符还有一个好处是可以避免出现prompt注入(prompt injections)的情况,所谓prompt注入就是当允许动态内容潜入到prompt中时,这个动态内容中如果包含和当前prompt冲突的指令,这个时候就可能对大模型造成误导。

技巧2:要求结构化的输出

要求 GPT 按照固定格式来输出,方便后续处理,常见的格式有 JSON、XML 等。

---------------------------------以下为prompt---------------------------------
生成一个由三个虚构的书名及其作者和类型组成的列表。
输出JSON格式,包含以下关键字:book_id, title, author, genre。

---------------------------------以下为输出---------------------------------
以下是一个由三个虚构的书名及其作者和类型组成的JSON格式的列表:
[  {    "book_id": 1,    "title": "The Shadowed Kingdom",    "author": "Kiera Cass",    "genre": "Fantasy"  },  {    "book_id": 2,    "title": "The Last Chance Cafe",    "author": "Nora Roberts",    "genre": "Romance"  },  {    "book_id": 3,    "title": "The Ghosts of Maple Street",    "author": "Stephen King",    "genre": "Horror"  }]
这个列表包含三本书,每本书有一个唯一的book_id,以及书名、作者和类型(genre)信息。

以上是课程中提供的prompt,放到GPT-3.5下会发现生成的结果中多了很多解释文字,在GPT-4下就很正常!这里可以结合下另外一个技巧:使用引导词,引导模型输出特定语言代码(来源),注意下方示例中prompt结尾多了一个 [{ 用于告诉大模型开始输出JSON了,不要有多余的废话,这个技巧非常有效!

---------------------------------以下为prompt---------------------------------
生成一个由三个虚构的书名及其作者和类型组成的列表。
输出JSON格式,包含以下关键字:book_id, title, author, genre。
[{
​
---------------------------------以下为输出---------------------------------
"books": [
{
"book_id": 1,
"title": "The Shadow of the Blackbird",
"author": "Megan Rose",
"genre": "Mystery"
},
{
"book_id": 2,
"title": "The Last Starship",
"author": "Alex Park",
"genre": "Science Fiction"
},
{
"book_id": 3,
"title": "The Lost City of Gold",
"author": "Sophie Lee",
"genre": "Adventure"
}
]
}

技巧3:要求检查条件是否满足

在prompt中添加一些条件判断,要求大模型完成任务时要先检查是否满足这些条件,然后执行相应的策略。比较像在prompt中写一些if…else语句,交给大模型来执行,满足条件怎么样,不满足条件怎么样。

---------------------------------以下为prompt---------------------------------
You will be provided with text delimited by triple quotes. 
If it contains a sequence of instructions,
re-write those instructions in the following format:

Step 1 - ...
Step 2 - …
…
Step N - …

If the text does not contain a sequence of instructions,
then simply write "No steps provided."

"""
Making a cup of tea is easy! First, you need to get some water boiling. While that's happening, grab a cup and put a tea bag in it. Once the water is hot enough, just pour it over the tea bag. Let it sit for a bit so the tea can steep. After a few minutes, take out the tea bag. If you like, you can add some sugar or milk to taste. And that's it! You've got yourself a delicious cup of tea to enjoy.
"""

---------------------------------以下为输出---------------------------------
Completion for Text 1:
Step 1 - Get some water boiling.
Step 2 - Grab a cup and put a tea bag in it.
Step 3 - Once the water is hot enough, pour it over the tea bag.
Step 4 - Let it sit for a bit so the tea can steep.
Step 5 - After a few minutes, take out the tea bag.
Step 6 - Add some sugar or milk to taste.
Step 7 - Enjoy your delicious cup of tea!

另外一个示例:

---------------------------------以下为prompt---------------------------------
You will be provided with text delimited by triple quotes. 
If it contains a sequence of instructions,
re-write those instructions in the following format:

Step 1 - ...
Step 2 - …
…
Step N - …

If the text does not contain a sequence of instructions,
then simply write "No steps provided."

"""
The sun is shining brightly today, and the birds are singing. It's a beautiful day to go for a walk in the park. The flowers are blooming, and the trees are swaying gently in the breeze. People are out and about, enjoying the lovely weather. Some are having picnics, while others are playing games or simply relaxing on the grass. It's a perfect day to spend time outdoors and appreciate the beauty of nature.
"""

---------------------------------以下为输出---------------------------------
No steps provided.

技巧4:少样本提示(Few-shot)

在prompt中加入几个样本示例,大模型就能够模仿这些示例来完成你的任务。在一些文章中这种方法又被称之为
In Context Learning。

---------------------------------以下为prompt---------------------------------
你的任务是用一致的语气来回答问题
​
<question>: 告诉我什么是大模型
​
<answer>: 哎呦,让我来给你揭示一下“大模型”的神秘面纱吧!“大模型”,这个名字听起来多么庄重、威武,仿佛是一位英勇无畏的超级英雄!实际上,它是指训练有素、功能强大的人工智能模型,有着大量的参数和庞大的知识库,就像一个拥有无穷智慧的巨人。
​
这些大模型呀,它们可不是一般的聪明哦,它们能够完成各种各样的任务,从文本生成、翻译到情感分析,应有尽有。有时候,它们甚至比人类更了解我们自己!不过,咱们可不能小瞧这些大模型,虽然它们看起来像是神通广大的魔法师,但它们也可能犯错误、产生偏见,所以我们在使用它们时得小心翼翼。
​
总之,大模型就像是我们现代科技世界的魔法师,它们以其惊人的智慧和能力,给我们的生活带来无尽的惊喜和便利。但是,作为使用者,我们要明白它们的局限性,谨慎地使用这些强大的工具。嘿嘿,这可是大模型的奥秘,记住了哦!
​
<question>: 告诉我什么是996
​
---------------------------------以下为输出---------------------------------
<answer>: 哈哈,来啦来啦,为您揭开“996”的神秘面纱!“996”这个名字,让人不禁想起那些勇敢拼搏的职场战士们!这个名字背后的含义可不简单,它可是代表一种非常努力的工作制度哦!
​
那么,具体是什么呢?“996”指的是每天早上9点开始工作,一直到晚上9点结束,而且每周要工作6天。哇哦,这种工作制度可真是让人瞠目结舌!它要求员工付出超乎寻常的努力和时间投入,很多人都为了这种工作制度感到担忧和不安。
​
说实话,虽然“996”听起来像是一种能让人迅速取得成功的魔法配方,但它却可能导致许多问题。这种工作制度可能会让员工长时间劳累,影响健康和家庭生活。所以啊,虽然“996”可能让你在职场上风生水起,但咱们可得认清它的影响,不要被它的光环所蒙蔽。
​
所以,当您听到“996”这个词时,可要想到那些为了实现目标而努力拼搏的职场战士们,以及这种工作制度所带来的潜在问题。哼哼,现在您对“996”是不是有了更深刻的理解呢?

关于 In Context Learning,我一直有个疑问,为什么大模型能够根据几个样本示例就能成功预测出下一个。看上去这些示例只是拿给大模型看了一眼,并没有反向修正大模型的任何参数,也就是貌似大模型并没有真正的学习这些示例(这篇文章也有相同的疑问)。

准则2:给大模型“思考”的时间

在处理复杂任务时,大型模型往往会产生较高的错误率。原因也不难理解,尽管大型模型具备海量的知识和一定的泛化能力,但在面临需要深入理解和推理的复杂任务时,仍显得力不从心。人也是一样的,想象一下,马上要交卷了,发现有一个数学填空忘做了,这个时候是不是会随便蒙一个上去(真实经历)。因此第二个准则就是要确保大模型经过了充分的思考再解题,而不是仓促间给出答案。

技巧1:明确完成任务所需的步骤

利用大模型在局部任务或领域的良好表现,通过将复杂任务拆解长一个个局部任务,让模型充分发挥其在局部任务上的优势,最终整体任务的正确性。

---------------------------------以下为prompt---------------------------------
Perform the following actions: 
1 - Summarize the following text delimited by triple backticks with 1 sentence.
2 - Translate the summary into French.
3 - List each name in the French summary.
4 - Output a json object that contains the following keys: french_summary, num_names.
​
Use the following format:
Text: <text to summarize>
Summary: <summary>
Translation: <summary translation>
Names: <list of names in Italian summary>
Output JSON: <json with summary and num_names>
​
Text:
"""
In a charming village, siblings Jack and Jill set out on a quest to fetch water from a hilltop well. As they climbed, singing joyfully, misfortune struck—Jack tripped on a stone and tumbled down the hill, with Jill following suit. Though slightly battered, the pair returned home to comforting embraces. Despite the mishap, their adventurous spirits remained undimmed, and they continued exploring with delight.
"""
​
---------------------------------以下为输出---------------------------------
Text: In a charming village, siblings Jack and Jill set out on a quest to fetch water from a hilltop well. As they climbed, singing joyfully, misfortune struck—Jack tripped on a stone and tumbled down the hill, with Jill following suit. Though slightly battered, the pair returned home to comforting embraces. Despite the mishap, their adventurous spirits remained undimmed, and they continued exploring with delight.
​
Summary: Siblings Jack and Jill go on an adventure to fetch water but encounter misfortune and tumble down a hill, yet remain undaunted and continue exploring with joy.
​
Translation: Les frères et soeurs Jack et Jill partent à l'aventure pour chercher de l'eau mais rencontrent un malheur et tombent d'une colline, mais restent imperturbables et continuent à explorer avec joie.
​
Names: Jack, Jill
​
Output JSON: {
"french_summary": "Les frères et soeurs Jack et Jill partent à l'aventure pour chercher de l'eau mais rencontrent un malheur et tombent d'une colline, mais restent imperturbables et continuent à explorer avec joie.",
"num_names": 2
}

技巧2:要求模型先思考再给出答案

先看下面这个错误的示例,学生错把维护费用中每平方英尺10美元计算成了100倍,但大模型看起来完全没有思考就给出了错误的判断。

---------------------------------以下为prompt---------------------------------
判断学生的答案是否正确。
​
问题:
我正在建一个太阳能装置,我需要帮助解决财务问题。
-土地成本为每平方英尺100美元
-我能以每平方英尺250美元的价格买到太阳能电池板
-每年有10万美元的固定支出用于设备维护,同时每平方英尺还要额外支出10美元
​
用一个平方英尺数的函数表达式给出第一年运营的总成本是多少
​
学生的解决方案:
设x为装置面积,单位为平方英尺。
成本:
1. 土地成本:100倍
2. 太阳能电池板成本:250倍
3.维护费用:10万+ 100倍
总成本:100x + 250x + 100000 + 100x = 450x + 100000
​
---------------------------------以下为输出---------------------------------
学生的解决方案是正确的。

再看优化后的prompt,综合使用了前面提到的多种技巧:分割符、结构化输出、few-shot(学生的解决方案就是一个样本),强迫大模型在给出判断前先自己给出解决方案,然后对比再给出判断。优化后的prompt在GPT-4中能够稳定正确执行,在GPT-3.5中大模型的解决方案是对的,但给出的判断仍然是错的。

---------------------------------以下为prompt---------------------------------
你的任务是确定学生的解是否正确。
解决问题的方法如下:
-首先,找出你自己解决问题的办法。
-然后将你的解决方案与学生的解决方案进行比较然后评估学生的答案是否正确。
不要判定学生的答案是否正确,直到你已经自己做了这道题。
​
Use the following format:
问题:
"""
question here
"""
学生的解决方案:
"""
student's solution here
"""
实际的解决方案:
"""
steps to work out the solution and your solution here
"""
学生的解决方案和实际的解决方案是否一致:
"""
yes or no
"""
学生成绩:
"""
correct or incorrect
"""
​
问题:
"""
我正在建一个太阳能装置,我需要帮助解决财务问题。
-土地成本为每平方英尺100美元
-我能以每平方英尺250美元的价格买到太阳能电池板
-每年有10万美元的固定支出用于设备维护,同时每平方英尺还要额外支出10美元
​
用一个平方英尺数的函数表达式给出第一年运营的总成本是多少
"""
​
学生的解决方案:
"""
设x为装置面积,单位为平方英尺。
成本:
1. 土地成本:100倍
2. 太阳能电池板成本:250倍
3.维护费用:10万+ 100倍
总成本:100x + 250x + 100000 + 100x = 450x + 100000
"""
​
实际的解决方案:
​
---------------------------------以下为输出---------------------------------
设x为装置面积,单位为平方英尺。
成本:
1. 土地成本:100倍
2. 太阳能电池板成本:250倍
3.维护费用:10万+ 10倍
总成本:100x + 250x + 100000 + 10x = 360x + 100000
​
学生的解决方案和实际的解决方案是否一致:
no
​
学生成绩:
incorrect

技巧3:Let’s think step by step

这个技巧在原课程中没有,但在社区中讨论比较多,最早出自这篇论文中。通过在提问的问题后追加一句“Let’s think step by step”,大模型就会列出详细的推理步骤并计算出答案,这种方法也被称之为“Zero-shot cot”。关于其原理如下图所示:先在提问的问题后追加“Let’s think step by step”作为prompt,LLM会输出具体的推理过程;然后在提问的问题后拼接LLM输出的具体推理过程,并追加“Therefore, the answer (arabic numerals) is”作为prompt,这时候LLM会输出结果。

三、迭代

这节课主要讲的是 不存在适用于所有场景的完美prompt。因此为了构建特定场景下的大模型应用,最重要的是对prompt进行持续的迭代优化。并通过一个示例简单示范了迭代的过程。

---------------------------------以下为prompt---------------------------------
您的任务是帮助市场营销团队根据技术资料表为零售网站的产品撰写描述。
​
根据三个反引号内的技术规格信息撰写产品描述。
​
技术规格:
"""
概述
​
本系列办公家具灵感来自中世纪,包括文件柜、书桌、书架、会议桌等。
外壳颜色和底座饰面有多种选择。
可选择塑料背面和前面软包(SWC-100)或全包装(SWC-110)的10种面料和6种皮革选项。
底座饰面可选:不锈钢、磨砂黑、亮白或镀铬。
椅子可选择有扶手或无扶手款。
适用于家庭或商务场所。
符合合同使用资格。
结构
​
5轮塑料包覆铝底座。
气压椅调节,易于升降操作。
尺寸
​
宽度 53 厘米 | 20.87 英寸
深度 51 厘米 | 20.08 英寸
高度 80 厘米 | 31.50 英寸
座高 44 厘米 | 17.32 英寸
座深 41 厘米 | 16.14 英寸
选项
​
软地板或硬地板脚轮选项。
两种座椅泡沫密度可选:
中等(1.8 磅/立方英尺)或高密度(2.8 磅/立方英尺)
无扶手或8档PU扶手
材料
外壳底座滑轮
​
铸铝材料,涂覆改性尼龙 PA6/PA66。
外壳厚度:10 毫米。
座椅
HD36泡沫
原产国
​
意大利
"""
​
---------------------------------以下为输出---------------------------------
这款办公家具系列的灵感来自中世纪,包括文件柜、书桌、书架和会议桌等,适用于家庭和商务场所。您可以根据自己的口味选择多种颜色和底座饰面,其中包括不锈钢、磨砂黑、亮白或镀铬等。此外,您还可以选择塑料背面和软包或全包装的10种面料和6种皮革选项,以满足您的需求。
​
座椅具有气压椅调节功能,易于升降操作,并且具有5轮塑料包覆铝底座。该系列的座椅尺寸适中,宽53厘米、深51厘米、高80厘米,座高为44厘米,座深为41厘米。您可以根据自己的需要选择软地板或硬地板脚轮选项以及中等或高密度的座椅泡沫。
​
这款办公家具系列的座椅有两种款式可选:有扶手或无扶手。如果您需要扶手,还可以选择8档PU扶手。铸铝材料和涂覆改性尼龙 PA6/PA66的外壳底座滑轮可以保证其质量和寿命。座椅的HD36泡沫可以提供舒适的坐姿。该系列的产品原产国是意大利,符合合同使用资格。

输出的文本字数太多了,prompt中增加“最多使用五十个汉字”

---------------------------------以下为prompt---------------------------------
您的任务是帮助市场营销团队根据技术资料表为零售网站的产品撰写描述。
​
根据三个反引号内的技术规格信息撰写产品描述。
​
最多使用五十个汉字。
​
技术规格:
"""
概述
​
本系列办公家具灵感来自中世纪,包括文件柜、书桌、书架、会议桌等。
外壳颜色和底座饰面有多种选择。
可选择塑料背面和前面软包(SWC-100)或全包装(SWC-110)的10种面料和6种皮革选项。
底座饰面可选:不锈钢、磨砂黑、亮白或镀铬。
椅子可选择有扶手或无扶手款。
适用于家庭或商务场所。
符合合同使用资格。
结构
​
5轮塑料包覆铝底座。
气压椅调节,易于升降操作。
尺寸
​
宽度 53 厘米 | 20.87 英寸
深度 51 厘米 | 20.08 英寸
高度 80 厘米 | 31.50 英寸
座高 44 厘米 | 17.32 英寸
座深 41 厘米 | 16.14 英寸
选项
​
软地板或硬地板脚轮选项。
两种座椅泡沫密度可选:
中等(1.8 磅/立方英尺)或高密度(2.8 磅/立方英尺)
无扶手或8档PU扶手
材料
外壳底座滑轮
​
铸铝材料,涂覆改性尼龙 PA6/PA66。
外壳厚度:10 毫米。
座椅
HD36泡沫
原产国
​
意大利
"""
​
---------------------------------以下为输出---------------------------------
中世纪风办公家具系列,多种外观可选,适用于家庭或商务场所。座椅具气压椅调节、5轮塑料包覆铝底座,尺寸适中。可选择软、硬地板脚轮,中、高密度泡沫座椅和有、无扶手款。外壳底座滑轮由铸铝材料和涂覆改性尼龙 PA6/PA66制成。原产国:意大利。

产品描述缺乏侧重,增加“该描述是为家具零售商写的,因此侧重于技术性的介绍产品的构造材料。”

---------------------------------以下为prompt---------------------------------
您的任务是帮助市场营销团队根据技术资料表为零售网站的产品撰写描述。
​
根据三个反引号内的技术规格信息撰写产品描述。
​
该描述是为家具零售商写的,因此侧重于技术性的介绍产品的构造材料。
​
最多使用五十个汉字。
​
技术规格:
"""
概述
​
本系列办公家具灵感来自中世纪,包括文件柜、书桌、书架、会议桌等。
外壳颜色和底座饰面有多种选择。
可选择塑料背面和前面软包(SWC-100)或全包装(SWC-110)的10种面料和6种皮革选项。
底座饰面可选:不锈钢、磨砂黑、亮白或镀铬。
椅子可选择有扶手或无扶手款。
适用于家庭或商务场所。
符合合同使用资格。
结构
​
5轮塑料包覆铝底座。
气压椅调节,易于升降操作。
尺寸
​
宽度 53 厘米 | 20.87 英寸
深度 51 厘米 | 20.08 英寸
高度 80 厘米 | 31.50 英寸
座高 44 厘米 | 17.32 英寸
座深 41 厘米 | 16.14 英寸
选项
​
软地板或硬地板脚轮选项。
两种座椅泡沫密度可选:
中等(1.8 磅/立方英尺)或高密度(2.8 磅/立方英尺)
无扶手或8档PU扶手
材料
外壳底座滑轮
​
铸铝材料,涂覆改性尼龙 PA6/PA66。
外壳厚度:10 毫米。
座椅
HD36泡沫
原产国
​
意大利
"""
​
---------------------------------以下为输出---------------------------------
本系列办公家具灵感来自中世纪,包括文件柜、书桌、书架、会议桌等。铸铝底座经涂覆改性尼龙 PA6/PA66,外壳厚度达10毫米,保证稳定性和耐用性。椅子可选择无扶手或8档PU扶手款,座椅泡沫可选中等或高密度,适用于家庭或商务场所。

要求结构化的输出

宽度 53 厘米 | 20.87 英寸
深度 51 厘米 | 20.08 英寸
高度 80 厘米 | 31.50 英寸
座高 44 厘米 | 17.32 英寸
座深 41 厘米 | 16.14 英寸
选项
​
软地板或硬地板脚轮选项。
两种座椅泡沫密度可选:
中等(1.8 磅/立方英尺)或高密度(2.8 磅/立方英尺)
无扶手或8档PU扶手
材料
外壳底座滑轮
​
铸铝材料,涂覆改性尼龙 PA6/PA66。
外壳厚度:10 毫米。
座椅
HD36泡沫
原产国
​
意大利
"""
​
---------------------------------以下为输出---------------------------------
<div>
<p>这款办公家具系列是受中世纪启发而设计的,包括文件柜、书桌、书架、会议桌等。</p>
<p>它有多种外壳颜色和底座饰面可供选择,底座饰面可以是不锈钢、磨砂黑、亮白或镀铬。</p>
<p>椅子有扶手或无扶手款,可以选择软包装(SWC-100)或全包装(SWC-110)的10种面料和6种皮革选项。</p>
<p>此款家具适用于家庭或商务场所,符合合同使用资格。</p>
<p>结构方面,它有5轮塑料包覆铝底座和气压椅调节,可以轻松升降调整。</p>
</div>
<table>
  <caption>产品尺寸</caption>
  <tbody>
    <tr>
      <th scope="row">宽度</th>
      <td>53 厘米 | 20.87 英寸</td>
    </tr>
    <tr>
      <th scope="row">深度</th>
      <td>51 厘米 | 20.08 英寸</td>
    </tr>
    <tr>
      <th scope="row">高度</th>
      <td>80 厘米 | 31.50 英寸</td>
    </tr>
    <tr>
      <th scope="row">座高</th>
      <td>44 厘米 | 17.32 英寸</td>
    </tr>
    <tr>
      <th scope="row">座深</th>
      <td>41 厘米 | 16.14 英寸</td>
    </tr>
  </tbody>
</table>
<p>产品ID: SWC-100</p>

四、总结

接下来的课程切换到了 具体应用 的视角,这节课讲的是利用大模型做文本总结。上面“迭代”章节的示例其实已经详细展示了如何利用大型模型将冗长的文本总结成摘要,同时也可以根据需要有所侧重,这里就不再赘述了。只提一下课程中提到的另外一个关键字:提取(extract),在prompt中使用提取(extract)而非总结(summarize),将使模型仅关注于提炼所需的信息。


---------------------------------以下为prompt---------------------------------
您的任务是帮助市场营销团队根据技术资料表为零售网站的产品撰写描述。
​
根据三个反引号内的技术规格信息撰写产品描述,提取出商品尺寸相关信息。
​
最多使用五十个汉字。
​
技术规格:
"""
概述
​
本系列办公家具灵感来自中世纪,包括文件柜、书桌、书架、会议桌等。
外壳颜色和底座饰面有多种选择。
可选择塑料背面和前面软包(SWC-100)或全包装(SWC-110)的10种面料和6种皮革选项。
底座饰面可选:不锈钢、磨砂黑、亮白或镀铬。
椅子可选择有扶手或无扶手款。
适用于家庭或商务场所。
符合合同使用资格。
结构
​
5轮塑料包覆铝底座。
气压椅调节,易于升降操作。
尺寸
​
宽度 53 厘米 | 20.87 英寸
深度 51 厘米 | 20.08 英寸
高度 80 厘米 | 31.50 英寸
座高 44 厘米 | 17.32 英寸
座深 41 厘米 | 16.14 英寸
选项
​
软地板或硬地板脚轮选项。
两种座椅泡沫密度可选:
中等(1.8 磅/立方英尺)或高密度(2.8 磅/立方英尺)
无扶手或8档PU扶手
材料
外壳底座滑轮
​
铸铝材料,涂覆改性尼龙 PA6/PA66。
外壳厚度:10 毫米。
座椅
HD36泡沫
原产国
​
意大利
"""
​
---------------------------------以下为输出---------------------------------
该办公椅尺寸:宽53厘米,深51厘米,高80厘米;座高44厘米,座深41厘米。

五、推断

上一章节讲的是对输入文本中存在的信息进行处理(总结或提取),如果我的任务是处理输入文本中 不存在或者隐藏掉 的信息,那就需要用到推断的能力,这同样是大模型所擅长的。比如给定一段淘宝的买家评论,要求大模型判断该评论是好评还是差评。

---------------------------------以下为prompt---------------------------------
"""包裹的文本是关于某车载吸尘器的买家评论,你的任务是判断每条评论的情绪(好评、差评、中性)。
​
输出JSON格式,包含以下关键字:comment, emotion
​
"""
评论1:可以吸汽车里面的灰尘,也可以专门吸孩子玩沙画什么的碎屑,很好用。
评论2:随手吸真的很方便,拿来清洁小孩的桌面很省心。外观也很漂亮!
评论3:看着不错,吸力两档,风从后边出,希望能用久些吧。
评论4:此用户没有填写评价。
评论5:收到货就坏了,联系客服退货处理了。
"""
​
[{
​
---------------------------------以下为输出---------------------------------
[{"comment": "可以吸汽车里面的灰尘,也可以专门吸孩子玩沙画什么的碎屑,很好用。",
"emotion": "好评"
},
{
"comment": "随手吸真的很方便,拿来清洁小孩的桌面很省心。外观也很漂亮!",
"emotion": "好评"
},
{
"comment": "看着不错,吸力两档,风从后边出,希望能用久些吧。",
"emotion": "好评"
},
{
"comment": "此用户没有填写评价。",
"emotion": "中性"
},
{
"comment": "收到货就坏了,联系客服退货处理了。",
"emotion": "差评"
}]

上面的示例中应用了分割符、结构化输出等技巧,下面再给出一个应用Few-shot的示例👇

---------------------------------以下为prompt---------------------------------
评论:可以吸汽车里面的灰尘,也可以专门吸孩子玩沙画什么的碎屑,很好用。
情绪:好评
​
评论:此用户没有填写评价。
情绪:中性
​
评论:收到货就坏了,联系客服退货处理了。
情绪:差评
​
评论:看着不错,吸力两档,风从后边出,希望能用久些吧。
情绪:
​
---------------------------------以下为输出---------------------------------
好评

六、转换

大模型非常擅长在不同格式间进行翻译。比如文本翻译,文本 <-> JSON,html <-> JSON,JSON <-> SQL等等,理论上可以将我们从各种格式转化的正则中解放出来。

---------------------------------以下为prompt---------------------------------
Translate the following text to French and Spanish and English pirate and Chinese:
``I want to order a basketball``
​
---------------------------------以下为输出---------------------------------
French: Je veux commander un ballon de basket.
Spanish: Quiero pedir un balón de baloncesto.
English pirate: Arr, I be wantin' to order meself a basketball.
Chinese: 我想订购一个篮球。

---------------------------------以下为prompt---------------------------------
Translate the following from slang to a business letter: 
'Dude, This is Joe, check out this spec on this standing lamp.'
​
---------------------------------以下为输出---------------------------------
Dear Sir/Madam,
​
I am writing to bring to your attention a standing lamp that I believe may be of interest to you. Please find attached the specifications for your review.
​
Thank you for your time and consideration.
​
Sincerely,
​
Joe

---------------------------------以下为prompt---------------------------------
Translate the following text from JSON to an HTML table with column headers and title
​
text: { "resturant employees" :[ 
    {"name":"Shyam", "email":"shyamjaiswal@gmail.com"},
    {"name":"Bob", "email":"bob32@gmail.com"},
    {"name":"Jai", "email":"jai87@gmail.com"}
]}
​
---------------------------------以下为输出---------------------------------



Restaurant Employees

Name Email
Shyam shyamjaiswal@gmail.com
Bob bob32@gmail.com
Jai jai87@gmail.com

七、拓展

该系列课程讲述的最后一个应用是“拓展”,就是将一段简短的文本(比如一个主题)通过大模型生成更长的文本。Notion AI这类app已经广泛应用这个能力,当前扩写出来的内容在某些非正式场景下非常有用,比如脑爆(写不下去了让AI帮你写,挖掘灵感)等。下面这个示例就是让大模型扮演客户服务助理,负责给客户回复一封关于客户评论的邮件。如果客户评论是积极的或中立的,则感谢他们的评论。如果是消极的,则道歉并建议他们联系客户服务,具体内容完全是大模型拓展出来的。


---------------------------------以下为prompt---------------------------------
你是一名客服人工智能助理。
你的任务是给一个重要的客户发一封电子邮件回复。
给定以'''分隔的客户电子邮件
生成回复以感谢客户的审阅。
如果情绪是好评或中性,感谢他们的评论。
如果感觉是差评,道歉并提出建议他们可以联系客服。
确保使用评论中的具体细节,用简洁和专业的语气写作。
将邮件签名为“AI客户助理”。
客户评论:'''可以吸汽车里面的灰尘,也可以专门吸孩子玩沙画什么的碎屑,很好用。'''
回顾情绪:好评
​
---------------------------------以下为输出---------------------------------
尊敬的客户,
​
非常感谢您对我们产品的好评。我们很高兴听到我们的产品能够满足您的需求,特别是在吸汽车里面的灰尘和孩子玩沙的碎屑方面。这对我们来说是非常重要的,因为我们一直致力于提供高质量和实用的产品。
​
我们将继续为您和其他客户提供卓越的产品和服务。如果您有任何进一步的问题或需要我们的帮助,请随时联系我们的客服团队,他们将竭诚为您服务。
​
再次感谢您的支持和好评!
​
祝您一切顺利。
​
AI客户助理

总结

这个短期课程总结了关于 prompt engineering 的两大准则与若干技巧,同时还介绍了大模型所擅长的四大局部任务:总结、推断、转换、拓展。我们完全可以将一个复杂的任务拆解成若干局部任务,然后应用这些技巧来设计出精巧的 prompt 和 工程链路,这样应用大模型来打造解决更加复杂问题的应用程序就具备了很强的可行性。

当然,如果你还不会用,也可以来看看别人都在怎么使用 ChatGPT的案例

类似文章

一条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注