赞
踩
欢迎来到ChatGPT 开发人员提示工程课程(ChatGPT Prompt Engineering for Developers)!本课程将教您如何通过OpenAI API有效地利用大型语言模型(LLM)来创建强大的应用程序。
本课程由OpenAI 的Isa Fulford和 DeepLearning.AI 的Andrew Ng主讲,深入了解 LLM 的运作方式,提供即时工程的最佳实践,并演示 LLM API 在各种应用程序中的使用。
在本课程中,您将练习两个提示原则及其相关策略,以编写大型语言模型的有效提示。
在本课程中,我们提供了一些代码,用于为您加载 OpenAI API 密钥。
Input:
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv('OPENAI_API_KEY')
在整个课程中,我们将使用 OpenAI 的 gpt-3.5-turbo 模型和聊天完成端点。
这个辅助函数将使您更容易使用提示,并查看生成的输出:
Input:
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0, # 这是模型输出的随机程度
)
return response.choices[0].message["content"]
原则 1:编写清晰具体的说明
原则 2:给模型时间“思考”
Input:
text = f"""
您应该通过提供尽可能清晰和具体的说明来表达您希望模型做什么。
这将引导模型朝着期望的输出方向发展,
并减少收到无关或不正确响应的可能性。不要混淆编写清晰的提示与编写简短的提示。
在许多情况下,更长的提示提供了更多的清晰度和上下文,这可能导致更详细和相关的输出。
"""
prompt = f"""
将由三个反引号分隔的文本总结为一句话。
```{text}```
"""
response = get_completion(prompt)
print(response)
output:
要引导模型朝着期望的输出方向发展,并减少无关或不正确响应的可能性,提供清晰具体的说明至关重要,这可能需要更长的提示以提供更多的清晰度和上下文。
Input:
prompt = f"""
生成三个虚构书名和作者以及流派的书籍列表。
使用以下键以 JSON 格式提供:
book_id、title、author、genre。
"""
response = get_completion(prompt)
print(response)
output:
[ { "book_id": 1, "title": "Zorath 的失落之城", "author": "Aria Blackwood", "genre": "奇幻" }, { "book_id": 2, "title": "最后的幸存者", "author": "Ethan Stone", "genre": "科幻" }, { "book_id": 3, "title": "蜜蜂的秘密生活", "author": "Lila Rose", "genre": "浪漫" } ]
Input:
text_1 = f""" 泡一杯茶很容易!首先,你需要烧一些水。 在这段时间里,拿个杯子,把茶包放进去。 一旦水够热,就把它倒在茶包上。 让它放一会儿,让茶叶浸泡一下。 几分钟后,拿出茶包。 如果你愿意,可以加一些糖或牛奶调味。 就是这样!你可以享用美味的一杯茶了。 """ prompt = f""" 将提供的文本由三个双引号分隔。 如果包含一系列说明, 请按以下格式重新编写这些说明: 步骤 1 - ... 步骤 2 - … … 步骤 N - … 如果文本不包含一系列说明, 则只需写“未提供步骤”。 \"\"\"{text_1}\"\"\" """ response = get_completion(prompt) print("文本 1 的完成情况:") print(response)
output:
文本 1 的完成情况:
步骤 1 - 烧一些水。
步骤 2 - 拿个杯子,把茶包放进去。
步骤 3 - 一旦水够热,就把它倒在茶包上。
步骤 4 - 让它放一会儿,让茶叶浸泡一下。
步骤 5 - 几分钟后,拿出茶包。
步骤 6 - 加一些糖或牛奶调味。
步骤 7 - 享用美味的一杯茶!
Input:
text_2 = f""" 今天阳光明媚,鸟儿在歌唱。今天是去公园散步的好日子。 花朵盛开,树木在微风中轻轻摇曳。 人们外出活动,享受着美好的天气。 一些人在野餐,而另一些人在玩游戏,或者简单地躺在草地上休息。 这是一个完美的日子,花时间在户外,欣赏大自然的美丽。 """ prompt = f""" 将提供的文本由三个双引号分隔。 如果包含一系列说明, 请按以下格式重新编写这些说明: 步骤 1 - ... 步骤 2 - … … 步骤 N - … 如果文本不包含一系列说明, 则只需写“未提供步骤”。 \"\"\"{text_2}\"\"\" """ response = get_completion(prompt) print("文本 2 的完成情况:") print(response)
output:
文本 2 的完成情况:
未提供步骤。
Input:
prompt = f"""
您的任务是以一致的风格回答。
<child>: 教我耐心。
<grandparent>: 刻出最深峡谷的河流起源于一处不起眼的泉水;最宏伟的交响乐源自一声单音;最复杂的挂毯始于一根孤独的丝线。
<child>: 教我韧性。
"""
response = get_completion(prompt)
print(response)
output:
< grandparent>: 韧性就像一棵随风摇摆但永不折断的树。这是从逆境中反弹并不断向前迈进的能力,即使在困难时期也能保持前行。就像一棵树在经历每场风暴后变得更加坚强一样,韧性是一种可以随着时间的推移得到发展和加强的品质。
Input:
text = f""" 在一个迷人的村庄,兄弟姐妹杰克和吉尔踏上了从山顶井取水的任务。 当他们高唱着爬上山时,不幸降临了——杰克在一块石头上绊倒了,滚下了山坡,吉尔紧随其后。 尽管略有挫伤,但两人还是回到了温馨的家。尽管发生了意外,但他们的冒险精神仍然不减,他们继续高兴地探索着。 """ # 例子 1 prompt_1 = f""" 执行以下操作: 1 - 使用三个反引号分隔的以下文本总结为 1 句话。 2 - 将摘要翻译成法语。 3 - 列出法语摘要中的每个名称。 4 - 输出包含以下键的 json 对象:french_summary、num_names。 使用换行符分隔您的答案。 文本: ```{text}``` """ response = get_completion(prompt_1) print("提示 1 的完成情况:") print(response)
output:
提示 1 的完成情况: 两个兄弟姐妹,杰克和吉尔,踏上了从山顶井取水的任务,但不幸降临,他们俩都滚下了山坡,回家时略有挫伤,但他们的冒险精神并未减退。
Deux frères et sœurs, Jack et Jill, partent en quête d'eau d'un puits sur une colline, mais un malheur frappe et ils tombent tous les deux de la colline, rentrant chez eux légèrement meurtris mais avec leurs esprits aventureux intacts. Noms: Jack, Jill.
{ "french_summary": "Deux frères et sœurs, Jack et Jill, partent en quête d'eau d'un puits sur une colline, mais un malheur frappe et ils tombent tous les deux de la colline, rentrant chez eux légèrement meurtris mais avec leurs esprits aventureux intacts.", "num_names": 2 }
Input:
prompt_2 = f""" 您的任务是执行以下操作: 1 - 使用尖括号分隔的以下文本总结为 1 句话。 2 - 将摘要翻译成法语。 3 - 列出法语摘要中的每个名称。 4 - 输出包含以下键的 json 对象:french_summary、num_names。 使用以下格式: 文本: <text to summarize> 摘要: <summary> 翻译: <summary translation> 名称: <list of names in Italian summary> 输出 JSON: <json with summary and num_names> 文本: <{text}> """ response = get_completion(prompt_2) print("\n提示 2 的完成情况:") print(response)
output:
提示 2 的完成情况:
摘要: 杰克和吉尔踏上了取水的任务,但不幸降临,他们滚下山坡,回家时略有挫伤,但他们的冒险精神并未减退。
翻译: Jack et Jill partent en quête d'eau, mais la malchance frappe et ils dégringolent la colline, rentrant chez eux légèrement meurtris mais avec leurs esprits aventureux intacts.
名称: Jack, Jill
输出 JSON: {"french_summary": "Jack et Jill partent en quête d'eau, mais la malchance frappe et ils dégringolent la colline, rentrant chez eux légèrement meurtris mais avec leurs esprits aventureux intacts.", "num_names": 2}
Input:
prompt = f""" 确定学生的解决方案是否正确。 问题: 我正在建造一个太阳能发电装置,我需要帮助解决财务问题。 - 土地成本为每平方英尺 100 美元 - 我可以用每平方英尺 250 美元购买太阳能板 - 我谈判了一个维护合同,每年的成本是 10 万美元,另加 10 美元每平方英尺 作为第一年运营的总成本是多少。 学生的解决方案: 让 x 为装置的尺寸,单位为平方英尺。 成本: 1. 土地成本:100x 2. 太阳能板成本:250x 3. 维护成本:100,000 + 100x 总成本:100x + 250x + 100,000 + 100x = 450x + 100,000 """ response = get_completion(prompt) print(response)
output:
学生的解决方案是正确的。
请注意,学生的解决方案实际上是不正确的。
我们可以通过指导模型先自行解决问题来解决这个问题。
Input:
prompt = f""" 您的任务是确定学生的解决方案是否\ 正确与否。 要解决该问题,请执行以下操作: - 首先,找出你自己的问题解决方案。 - 然后将您的解决方案与学生的解决方案进行比较\ 并评估学生的解决方案是否正确。 直到学生的解决方案是否正确才决定 你自己已经解决了这个问题。 使用以下格式: 问题: <在这里提问> 学生的解决方案: <学生的解决方案在这里> 实际解决方案: <制定解决方案的步骤以及您的解决方案请参见此处> 学生的解决方案是否与实际解决方案相同: <yes or no> 学生评分: <Correct or Incorrect> 问题: < 我正在建造太阳能发电装置,我需要帮助 \ 制定财务报表。 - 土地成本 100 美元/平方英尺 - 我可以以 250 美元/平方英尺的价格购买太阳能电池板 - 我协商了一份维护合同,费用为 \ 我每年固定 10 万美元,另外每平方 10 美元 \ 脚 第一年运营的总成本是多少 \ 作为平方英尺数的函数。 > 学生的解决方案: < 设 x 为安装尺寸(以平方英尺为单位)。 费用: 1.土地成本:100x 2.太阳能电池板成本:250x 3.维护成本:100,000 + 100x 总成本:100x + 250x + 100,000 + 100x = 450x + 100,000 > 实际解决方案: """ response = get_completion(prompt) print(response)
output:
让 x 为装置的尺寸,单位为平方英尺。
成本:
土地成本:100x
太阳能板成本:250x
维护成本:100,000 + 10x
总成本:100x + 250x + 100,000 + 10x = 360x + 100,000
学生的解决方案是否与实际解决方案相同:
No
学生评分:
Incorrect
Boie 是一家真实的公司,产品名称不是真实的。
Input:
prompt = f"""
告诉我有关 Boie 的 AeroGlide UltraSlim 智能牙刷。
"""
response = get_completion(prompt)
print(response)
output:
AeroGlide UltraSlim 智能牙刷由 Boie 制造,是一款高科技牙刷,采用先进的声波技术,提供深层彻底的清洁。它具有纤薄时尚的设计,易于握持和操作,并配备一系列智能功能,帮助您优化刷牙程序。
AeroGlide UltraSlim 智能牙刷的关键功能之一是其先进的声波技术,它利用高频振动来分解牙齿和牙龈上的牙垢和细菌。这项技术在去除最顽固的污渍和积垢方面非常有效,让您的牙齿感觉清洁和清新。
除了声波技术外,AeroGlide UltraSlim 智能牙刷还配备了一系列智能功能,帮助您优化刷牙程序。这些功能包括内置计时器,确保您刷牙达到建议的两分钟,以及压力传感器,如果您刷得太用力,会发出警报。
总的来说,AeroGlide UltraSlim 智能牙刷由 Boie 制造,是一款高度先进和有效的牙刷,非常适合希望将口腔卫生提升到新水平的人士。凭借其先进的声波技术和智能功能,它提供了深层彻底的清洁,让您的牙齿感觉清新健康。
要安装 OpenAI Python 库:
!pip install openai
必须使用您帐户的秘密密钥对库进行配置,该密钥可以在网站上找到。
您可以在使用库之前将其设置为 OPENAI_API_KEY 环境变量:
!export OPENAI_API_KEY='sk-...'
或将 openai.api_key 设置为其值:
import openai
openai.api_key = "sk-..."
关于反斜杠的说明
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。