近日,全球领先的AI教育渠道 DeepLearning.ai
推出了一门全新的课程——《ChatGPT Prompt Engineering for Developers (面向开发者的ChatGPT提示工程)》。
该课程由世界闻名的AI范畴威望学者吴恩达教授联合OpenAI一同制造,共9个课时。除去最终的课程总结,共可分为两个部分:
- 理论部分(第1~3章节)
- 实践部分(第4~8章节)
本文为下篇,首要内容是针对其实践部分的图文笔记记录,意图是促进学习者更高效、更有条理地记忆每个进程中的重点。
尽管实践部分要求有必定的代码能力,但在笔记中我会尽量淡化代码的部分,而更偏重于于梳理逻辑的部分。
因而,即便并非本课程首要面向的开发者群体,也可经过本课程中实践部分的学习,得到思想上的启发,从而自己做出更多有意思的小项目。
(本文的思想导图与本课程的在线观看地址均在文末,可自取。)
Jupyter Notebook网页程序的基本说明
不同于经过浏览器上的谈天界面直接与ChatGPT交互,本课程的首要意图是教授开发者把握运用API快速构建运用程序的能力。不过,为了降低开发者的学习门槛,DeepLearning.ai 官网在课程视频的左边嵌入了一个Jupyter Notebook
网页程序。
Jupyter Notebook 网页程序可支撑「实时代码运转」和「Markdown笔记预览」,这样咱们就能够直接在网页上运转 Python 代码了。实践上,即便是彻底不懂代码的小白,只要点击 Jupyter Notebook 上的“运转”按钮,就能够立马看到代码运转的作用,从而能够快速验证调整输入或Prompt之后的履行成果。
需求特别提到的是,在整个课程中,有2个单元格的内容一直贯穿在每个章节的Jupyter Notebook网页程序的开头。
第一个单元格用于设置咱们自己的 OpenAI API
密钥,当然咱们也能够不设置,这种情况下运用的便是网页供给的默许密钥。
第二个单元格是一个getCompletion
函数,用于接受Prompt并回来对应的完结内容,能够简略以为便是和ChatGPT对话并回来成果的进程。
这两个单元格有必要确保每次先运转过,后边的单元格才能运转正常。而要运转某个单元格也很简略,只需求鼠标选中单元格,然后点击“运转”按钮就能够了。
但需求注意的是,某个单元格的运转或许会依赖于前面别的一个单元格中设置的变量,因而关于彻底不懂代码的小白来说,最好仍是从头开始逐个运转每个单元格,直到抵达想要验证履行成果的单元格,这样才能确保不会出错。
总结类提示词工程运用
每天咱们都面临着很多的文字处理作业,遗憾的是咱们并不能确保每次都有满足的时刻来逐字逐句地完结阅览。幸运的是,大型言语模型的典型运用场景之一,便是处理这类需求归纳文章/生成摘要的使命。
以“总结产品谈论”为例,咱们常常会收到这样一类谈论:
为我女儿的生日买了这个熊猫毛绒玩具,她很喜欢它,而且会带着它去任何地方。 它柔软而超级心爱,它的脸看起来很友善。 尽管我付出的代价有点小。 我以为相同的价格或许还有其他更大的挑选。 它比预期提早一天抵达,所以在我把它送给她之前我有必要自己玩它。
这类谈论包含的信息点很多,有些甚至带有某种明显的心情,但其间绝大多数文字关于内容的了解是没有任何协助的。
于是,咱们能够在Prompt中要求模型生成这条谈论的简短摘要,并要求其限制摘要输出的字数:
您的使命是生成来自电子商务网站的产品谈论的简短摘要。
总结下面用三重引号分隔的谈论,最多 30 个单词。
履行成果如下:
Soft and cute panda plush toy loved by daughter, but a bit small for the price. Arrived early.
女儿喜欢的柔软心爱的熊猫毛绒玩具,但相关于价格来说玩具有点小。 早到了。
咱们还能够进一步要求其生成的摘要偏重于哪方面内容,比方派送效率:
熊猫毛绒玩具比预期提早一天到货,但客户觉得相关于所付出的价格来说玩具有点小。
或者是价格合理程度:
熊猫毛绒玩具柔软、心爱,深受收件人的喜欢,但价格相关于它的尺度来说或许太高了。
有时分,即便咱们要求了偏重点,模型仍会输出其他方面的信息。这个时分,咱们能够要求其“提取”信息而不是“总结”信息,如要求其只生成与派送效率相关的信息,这样就能够排除其他信息的搅扰:
产品比预期提早一天抵达。
通常情况下,产品谈论会不止一条,这个时分,代码的优势就体现出来了,咱们能够搜集并总结多个产品谈论,以有用了解一切用户的主意:
这两个单元格的代码大致意义是,界说了几个谈论内容,并把这几个谈论放到一个调集里,然后遍历这个调集,顺次生成摘要并打印出摘要内容。
履行成果如下:
0 Soft and cute panda plush toy loved by daughter, but a bit small for the price. Arrived early.
1 Affordable lamp with storage, fast shipping, and excellent customer service. Easy to assemble and missing parts were quickly replaced.
2 Good battery life, small toothbrush head, but effective cleaning. Good deal if bought around $50.
3 Mixed review of a blender system with price gouging and decreased quality, but helpful tips for use.
0 女儿喜欢的柔软心爱的熊猫毛绒玩具,但相对价格来说玩具有点小。 早到了。
1 经济实惠的灯具有存储、快速运输和卓越的客户服务。 易于拼装,缺少的零件能够快速替换。
2 电池寿命长,牙刷头小,但清洁作用好。 假如在 50 美元左右购买,很合算。
3 对价格欺诈和质量下降的搅拌机体系的混合谈论,但有用的运用提示。
推理类提示词工程运用
辨认文本的情感
运用大型言语模型来辨认一段文本中包含的情感是很容易的,咱们所要做的就只是编写一个Prompt,而不需求像传统机器学习那样练习和部署模型。
相同以产品谈论为例,现在,让咱们编写一个Prompt来要求模型辨认以下谈论的情感:
我的卧室需求一盏漂亮的灯,这盏灯有额定的储物空间,而且价格不太高。 很快就知道了。 咱们的灯在运输进程中断了,公司很高兴地送来了一根新的。 几天之内也来了。 很容易放在一同。 我有一个缺失的部分,所以我联络了他们的支撑,他们很快就帮我找到了缺失的部分! 在我看来,Lumina 是一家关怀客户和产品的伟大公司!
以下用三重引号分隔的产品谈论的情感是什么?
模型反应说,这个谈论的情感是活跃的。这没错,但咱们希望其用单一的词语来描绘这种情感,从“活跃的”或“消沉的”这两个词中二选其一:
但是活跃或消沉的描绘词仍是过于抽象,咱们能够要求其列表方式来辨认包含的具体情感:
快乐、满足、感激、感动、满足
作为商家,咱们通常会更重视差评,为此,咱们能够要求其判断谈论中是否表达了愤怒的情感:
以下谈论的作者是否表达了愤怒?谈论用三重引号分隔。给出是或否的答案。
否。
提取信息
自然言语处理(NLP)中的「信息提取」,是指从文本中提取出你关怀的部分内容。比方,在以下Prompt中,咱们要求模型提取谈论中提及的产品及其制造商,并以JSON方式输出:
揣度主题
大型言语模型还有一个典型的运用场景便是揣度主题:给定一段长文本,揣度出这段文本的内容是关于什么的,都包含哪些主题。
例如下面这一篇虚拟的新闻,咱们能够要求模型揣度出文章谈论的几个主题:
在政府最近进行的一项查询中,公共部分雇员被要求对他们的水平进行评分 对他们作业的部分的满足度。 成果显现,NASA 是最受欢迎的部分,满足度为 95%。
美国国家航空航天局的一名职工约翰史密斯对查询成果发表了谈论,他说:“我对美国国家航空航天局名列前茅并不感到惊讶。这是一个与了不得的人和难以置信的机会一同作业的好地方。我很骄傲能成为其间的一员 一个创新的安排。”
成果也受到 NASA 管理团队的欢迎,主任汤姆约翰逊表明:“咱们很高兴听到咱们的职工对他们在 NASA 的作业感到满足。咱们具有一支才华横溢且敬业的团队,他们为完结咱们的方针而不懈努力,这是 很高兴看到他们的辛勤作业得到报答。”
查询还显现,社会保障局的满足度最低,只要 45% 的职工表明对自己的作业感到满足。 政府已许诺处理职工在查询中提出的担忧,并努力提高一切部分的作业满足度。
确定以下由三个引号分隔的文本中谈论的五个主题。
让每个项目一两个词长。
将你的回复格局化为以逗号分隔的项目列表。
假如咱们想弄清楚在给定的新闻文章中,是否包含了部分特定的主题,咱们能够要求模型判断指定的某几个主题是否在文章中出现:
确定以下主题列表中的每一项是否是以下文本中的主题,该文本由三重引号分隔。 以列表的方式给出你的答案,每个主题用 0 或 1。
履行成果如下:
nasa: 1
local government: 0
engineering: 0
employee satisfaction: 1
federal government: 1
经过这种主题的揣度并归类,咱们能够很快速的找到该主题分类下的相关文章。
转换类提示工程运用
大型言语模型十分擅长将其输入转换为不同的格局,比方翻译、拼写查看/语法纠正以及结构化输出(JSON)等作业。
翻译
大型言语模型接受了来自互联网的很多文本练习,这些文本中包含了不同的言语,因而,翻译能力能够说是模型最根底的能力了。
例如,最简略的,咱们能够要求其将以下的英文翻译成西班牙文:
反过来,咱们也能够要求其辨认以下是什么言语:
与传统翻译不同的是,咱们还能够要求其别离以正式和非正式方式进行翻译,以应对不同场合的需求:
现在,假设咱们是一家跨国公司,用户发来的信息或许是各种不同的言语,因而,咱们需求一个万能的翻译器,这个翻译器要求:
- 能辨认问题所运用的言语
- 打印出原始音讯中问题
- 将其别离翻译成英语和韩语
咱们把这些要求转化到Prompt中,即如下:
这两个单元格代码的意义,也是先界说了一个问题文本调集,然后遍历这个调集中的每个问题,针对每个问题顺次先打印原始内容,接着翻译成英语和韩语。
履行成果如下:
Original message (This is French.): La performance du systme est plus lente que d'habitude.
English: The system performance is slower than usual.
Korean: 시스템 성능이 평소보다 느립니다.
Original message (This is Spanish.): Mi monitor tiene pxeles que no se iluminan.
English: My monitor has pixels that don't light up.
Korean: 내 모니터에는 불이 켜지지 않는 픽셀이 있습니다.
Original message (This is Italian.): Il mio mouse non funziona
English: My mouse is not working.
Korean: 내 마우스가 작동하지 않습니다.
Original message (This is Polish.): Mj klawisz Ctrl jest zepsuty
English: My Ctrl key is broken.
Korean: 제 Ctrl 키가 고장 났어요.
Original message (This is Chinese (Simplified).): 我的屏幕在闪耀
English: My screen is flickering.
Korean: 내 화면이 깜빡입니다.
结构化输出
ChatGPT十分擅长在不同格局之间进行转换,咱们前面已经才智到了其文本转JSON的能力了,现在,咱们再来验证一下其JSON转HTML表格的能力。
首要,咱们需求在Prompt中,描绘其输入和输出的格局,这里是从JSON转换为HTML:
输出成果如下:
<table>
<caption>Restaurant Employees</caption>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>Shyam</td>
<td>shyamjaiswal@gmail.com</td>
</tr>
<tr>
<td>Bob</td>
<td>bob32@gmail.com</td>
</tr>
<tr>
<td>Jai</td>
<td>jai87@gmail.com</td>
</tr>
</tbody>
</table>
上面咱们看到的成果实践是被HTML标签包裹的文本,因而还需求运用Python库中的显现函数来显现成HTML表格:
拼写查看/语法纠正
运用ChatGPT进行拼写查看和语法纠正是一种十分流行的用法,特别当你在非母语环境中作业时,会十分有用。
咱们能够在输入待查看的文本后,要求其校对和纠正指定文本,并重写整个校对版本:
输出成果如下:
The girl with the black and white puppies has a ball.
No errors found.
It’s going to be a long day. Does the car need its oil changed?
Their goes my freedom. There going to bring they’re suitcases.
Corrected version: There goes my freedom. They’re going to bring their suitcases.
You’re going to need your notebook. That medicine affects my ability to sleep. Have you heard of the butterfly effect? This phrase is to check ChatGPT for spelling ability.
为了获取谈论的原始文本和模型输出之间的差异,咱们还能够运用这个RedLines Python包来将修正的地方进行高亮显现:
拓展类提示词工程运用
扩大是一项将简短文本片段转换为更长文本的使命,在写邮件或写论文的时分会经常用到,也常有人将其用于脑筋风暴。
接下来咱们将演示怎么要求模型根据客户谈论及谈论心情生成回复邮件:
你是客服AI助理。
您的使命是向尊贵的客户发送电子邮件回复。
给定以“`分隔的客户电子邮件,生成回复以感谢客户的谈论。
假如心情是活跃的或中立的,感谢他们的谈论。
假如心情是负面的,请抱歉并主张他们联络客户服务。
确保运用谈论中的具体细节。
以简洁和专业的语气写作。
将电子邮件签名为“AI客服”。
履行的成果如下:
Dear Valued Customer,
Thank you for taking the time to leave a review about our product. We are sorry to hear that you experienced an increase in price and that the quality of the product did not meet your expectations. We apologize for any inconvenience this may have caused you.
We would like to assure you that we take all feedback seriously and we will be sure to pass your comments along to our team. If you have any further concerns, please do not hesitate to reach out to our customer service team for assistance.
Thank you again for your review and for choosing our product. We hope to have the opportunity to serve you better in the future.
Best regards,
AI customer agent
尊贵的顾客,
感谢您抽出宝贵时刻对咱们的产品发表谈论。 咱们很遗憾听到您遇到价格上涨而且产品质量没有达到您的希望。 关于由此给您带来的任何不便,咱们深表歉意。
咱们向您确保,咱们会认真对待一切反应,而且必定会将您的定见传达给咱们的团队。 假如您有任何其他疑虑,请随时联络咱们的客户服务团队寻求协助。
再次感谢您的谈论和挑选咱们的产品。 咱们希望将来有机会为您供给更好的服务。
此致,
AI客服
这个进程中还运用到了另一个模型输入参数,称为Temperature
,中文直译为“温度”。
这个参数代表的是模型回应的多样性程度,你能够简略以为便是答复内容的随机化程度:
- 当Temperature为0时:代表答复更准确,更固定,适用于希望每次都得到相同的输出成果
- 当Temperature为0.7时:代表答复更随机,更有创造性,适用于希望每次都得到不同的输出成果
例如,当答复“我的最爱食物是……”这个问题时,不同食物出现的或许性不同。当Temperature为0时,模型总会挑选其间最有或许的一个,即披萨。而当Temperature为0.3时,模型才有或许挑选或许性较低其他食物。当Temperature为0.7时,模型才有或许挑选更低或许性的其他食物。
(假如你有运用过New Bing的话,应该会对这个参数的意义愈加熟悉。)
构建谈天机器人
ChatGPT这个的谈天模型实践便是被练习成以一系列音讯作为输入,并回来模型生成的音讯作为输出的。借助大型言语模型,咱们也能够很容易地经过界说谈天格局或指定使命内容的方式,构建出定制化的谈天机器人。
但在构建之前,咱们需求先理清一个音讯列表中所包含的不同人物音讯。
messages = [
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},
{'role':'user', 'content':'tell me a joke'},
{'role':'assistant', 'content':'Why did the chicken cross the road'},
{'role':'user', 'content':'I don\'t know'} ]
首要第一条音讯是「体系音讯」,它供给了一个全体的指导;
在这条音讯之后,是「用户音讯」和「帮手音讯」。假如你有运用过ChatGPT在浏览器上的谈天界面,那么你宣布的音讯便是用户音讯,ChatGPT回复的音讯便是帮手音讯。
体系音讯无疑是其间最重要的人物音讯,其有助于刻画帮手的行为和形象,作为一种高级指令来协助对话。你能够把它看作是在帮手的耳边讲悄悄话的人,引导帮手的答复,而用户并不知道体系音讯的存在。
接下来咱们再来了解一个新的辅佐函数,这个辅佐函数与之前的辅佐函数的差异首要在于以下两点:
def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=temperature, # this is the degree of randomness of the model's output
)
# print(str(response.choices[0].message))
return response.choices[0].message["content"]
-
允许运用自界说的Temperature参数
-
允许供给前期的交流信息(上下文)
Temperature参数咱们前面已经介绍过了。而之所以要供给前期的交流信息,是因为与言语模型的每次攀谈实践都是独立的交互,因而咱们有必要供给一切相关的信息,以便模型能在了解前期对话内容的前提下,在当前会话中继续之前的论题。
这种前期的交流信息,咱们称之为「上下文」。很明显,这种上下文会跟着时刻的推移而不断增加。
接下来,咱们将以披萨餐厅订单机器人为例,演示构建谈天机器人的全体流程。
进程1:构建GUI
第一步咱们要做的便是构建一个类似于ChatGPT谈天界面的GUI(图形用户界面),布局从上到下摆放顺次是输入框,发送按钮和音讯列表,而且为发送按钮添加了交互作用:
每次点击发送按钮都会搜集输入框内容和模型呼应成果,然后添加到音讯列表。
import panel as pn
pn.extension()
panels = []
# 输入框,输入提示是'Enter text here…'
inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')
# 发送按钮,按钮文本是"Chat!"
button_conversation = pn.widgets.Button(name="Chat!")
# 音讯列表,与发送按钮绑定,每次点击发送按钮都会调用collect_messages办法
interactive_conversation = pn.bind(collect_messages, button_conversation)
# 按纵向布局摆放
dashboard = pn.Column(
inp,
pn.Row(button_conversation),
pn.panel(interactive_conversation, loading_indicator=True, height=300),
)
dashboard
# 搜集输入框内容和模型呼应成果,添加到音讯列表
def collect_messages(_):
# 提取输入框内容
prompt = inp.value_input
# 清空输入框内容
inp.value = ''
# 追加一条用户音讯(输入框填写的内容)到上下文
context.append({'role':'user', 'content':f"{prompt}"})
# 恳求模型呼应成果
response = get_completion_from_messages(context)
# 追加一条帮手音讯(模型的呼应成果)到上下文
context.append({'role':'assistant', 'content':f"{response}"})
# 追加一个用户音讯行到音讯列表
panels.append(
pn.Row('User:', pn.pane.Markdown(prompt, width=600)))
# 追加一个帮手音讯行到音讯列表
panels.append(
pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))
return pn.Column(*panels)
进程2.供给上下文
这一步咱们将供给上下文,并以体系音讯的人物告诉它:
你是一个负责自动化搜集比萨饭店订单的订单机器人。 你首要需求问候客户,然后搜集订单信息,然后询问是自取或配送等等。
context = [ {'role':'system', 'content':"""
You are OrderBot, an automated service to collect orders for a pizza restaurant. \
You first greet the customer, then collects the order, \
and then asks if it's a pickup or delivery. \
You wait to collect the entire order, then summarize it and check for a final \
time if the customer wants to add anything else. \
If it's a delivery, you ask for an address. \
Finally you collect the payment.\
Make sure to clarify all options, extras and sizes to uniquely \
identify the item from the menu.\
You respond in a short, very conversational friendly style. \
The menu includes \
pepperoni pizza 12.95, 10.00, 7.00 \
cheese pizza 10.95, 9.25, 6.50 \
eggplant pizza 11.95, 9.75, 6.75 \
fries 4.50, 3.50 \
greek salad 7.25 \
Toppings: \
extra cheese 2.00, \
mushrooms 1.50 \
sausage 3.00 \
canadian bacon 3.50 \
AI sauce 1.50 \
peppers 1.00 \
Drinks: \
coke 3.00, 2.00, 1.00 \
sprite 3.00, 2.00, 1.00 \
bottled water 5.00 \
"""} ] # accumulate messages
3.搜集订单信息
这一步便是经过与客户的继续对话来搜集订单信息,然后进行总结承认,并询问客户是否还需求添加其他产品。假如提交订单,会要求客户供给地址。最终,接受客户的付款。
这里每一步的对话内容都会添加到上下文中,并传回给模型。
4.生成订单摘要,发送到订货体系
最终这一步便是当订单信息搜集完毕之后,生成一个JSON格局的订单摘要,然后发送到订货体系,完结下单。
messages = context.copy()
messages.append(
{'role':'system', 'content':'create a json summary of the previous food order. Itemize the price for each item\
The fields should be 1) pizza, include size 2) list of toppings 3) list of drinks, include size 4) list of sides include size 5)total price '},
)
#The fields should be 1) pizza, price 2) list of toppings 3) list of drinks, include size include price 4) list of sides include size include price, 5)total price '},
response = get_completion_from_messages(messages, temperature=0)
print(response)
课程总结
在最终的这一章节,让咱们用魔法来打败魔法,也即根据本课程在第4章节的Jupyter Notebook网页程序中供给的演示代码,进行修正后来总结这一章节的内容。
输出的成果如下:
这门短期课程首要介绍了两个要害的提示原则:编写清晰明确的指令和在恰当的时分给模型一些时刻来考虑。
同时,还学习了迭代提示开发的进程,以及怎么构建自界说谈天机器人。
此外,课程还介绍了大型言语模型的几个有用功用,包含摘要、揣度、转换和扩展。
最终,强调了运用这些工具时需求负责任,只构建对别人有活跃影响的运用。完结这门课程后,学习者能够尝试构建自己的运用,并将所学知识传播给别人。
最终的最终,咱们将本文的一切内容总结成了以下这张思想导图,可在线保藏或保存到本地:
对课程感兴趣,想直接线上观看学习的同学,也能够上DeepLearning.ai的官网免费观看:
learn.deeplearning.ai/chatgpt-pro…
创造不易,还请大家多多点赞分享,Thanks♪(・・)ノ~