第10课:《ChatGPT提示工程》—— Guidelines(入门)

news/2024/12/4 23:25:30/

前面关于Prompt介绍了那么多理论的知识点,从本节内容开始进入代码实战,提供一些提示的指南,帮助你获得想要的结果。特别地,介绍了两个关键原则,即如何编写提示来有效地促使工程师,鼓励你随时运行代码自己查看输出是什么样子的,并改变确切的提示,尝试几种不同的变化,以获得有关提示的输入和输出的经验。

在开始实战之前,假设我们已经申请了ChatGPT的账号,并获取到了APIkey,如果没有账号的,建议先注册一个账号。

我们准备下开发工具:

  • 科学上网工具
  • Python 3.8以上版本
  • Python 开发工具,Jupyter Notebook 、PyCharm、VSCode等

使用 OpenAI Python 库来访问 OpenAI API。如果你还没有安装这个 Python 库,你可以使用 PIP 来安装,准备我们的开发环境:

安装OpenAI Python库:

pip3 install openai

这个库需要使用你在 OpenAI 网站上获得的 API 密钥进行配置。将openai.api_key设置为其值:

import openai​
openai.api_key = "sk-..."

你也可以在使用这个库之前,设置 OPENAI_API_KEY 环境变量来配置 API 密钥。

export OPENAI_API_KEY='sk-...'

Guidelines

在这个课程中,您将练习两个提示原则及其相关策略,以编写大型语言模型的有效提示。

全局配置信息

第一步:加载 API 密钥和相关的 Python 库。

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 模型和聊天完成的端点。​这个辅助函数将使得使用提示和查看生成的输出更加容易:

def get_completion(prompt, model="gpt-3.5-turbo"):​messages = [{"role": "user", "content": prompt}]​response = openai.ChatCompletion.create(​model=model,​messages=messages,​temperature=0, # this is the degree of randomness of the model's output​)​return response.choices[0].message["content"]

原则1:清晰而具体地撰写说明​

Tactic 1:使用定界符清楚地标示输入的不同部分​,定界符可以是任何东西,例如:‘’', “”", < >, , :等。

text = f"""​
您应该通过提供尽可能清晰和具体的说明来表达您希望模型做什么。这将指导模型朝着所需的输出方向发展,并减少接收到无关或不正确的响应的机会。不要将清晰的提示与简短的提示混淆。在许多情况下,较长的提示为模型提供更多的清晰度和上下文,这可能会导致更详细和相关的输出。​
"""​
prompt = f"""
将三个反引号包围的文本摘要为一个句子。
```{text}```
"""
response = get_completion(prompt)
print(response)

Tactic 2:要求结构化输出 JSON、HTML

prompt = f"""
生成一个包含三个虚构书名的列表以及他们的作者和流派。以JSON格式提供以下keys:book_id,标题,作者,流派。
"""
response = get_completion(prompt)
print(response)

Tactic 3: 让模型检查条件是否满足

text_1 = f"""
泡一杯茶很容易!首先,你需要得到一些水沸腾了。在这种情况发生的同时抓起一个杯子,放一个茶包。水喝完后足够热,把它倒在茶包上就可以了让它静置一会儿,这样茶就可以变陡了。在之后几分钟后,拿出茶包。如果您比如,你可以加一些糖或牛奶调味就这样!你给自己准备了一份美味的享受一杯茶。
"""
prompt = f"""
您将获得由三个引号分隔的文本。如果它包含一系列指令,按照以下格式重新编写这些说明:
步骤1-...
步骤2-…
…
步骤N-…
如果文本不包含指令序列,
然后简单地写下“没有提供任何步骤。”
\"\"\"{text_1}\"\"\"
"""
response = get_completion(prompt)
print("Completion for Text 1:")
print(response)
text_2 = f"""
今天阳光明媚,鸟儿们唱歌这是美好的一天在公园里散步。花儿开了树木在微风中轻轻摆动。人员出去走走,享受着宜人的天气有些人在野餐,有些人在玩耍游戏或只是在草地上放松。这是一个在户外度过美好的一天,欣赏大自然之美。
"""
prompt = f"""
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.\"\"\"\"{text_2}\"\"\"
"""
response = get_completion(prompt)
print("Completion for Text 2:")
print(response)

Tactic 4: “少量”提示

prompt = f"""
你的任务是以一致的风格回答。
<孩子>:教我耐心。
<爷爷奶奶>:雕刻最深的河流山谷来自一个温和的泉水;最宏大的交响乐源于一个音符最复杂的挂毯是从一根孤独的线开始的。
<孩子>:教我韧性。
"""
response = get_completion(prompt)
print(response)

原则2:给模型思考的时间

Tactic 1: 指定完成任务所需的步骤

text = f"""
在一个迷人的村庄里,兄弟姐妹杰克和吉尔出发了,当他们攀爬时,欢唱着不幸杰克被石头绊倒了,吉尔紧随其后尽管受到了轻微的打击,这对情侣还是回到了家舒适的拥抱。尽管遭遇了不幸,他们的冒险精神丝毫没有减弱继续愉快地探索。
"""prompt_1 = f"""
执行以下操作:
1-总结以下text内容,用三元组分隔的文本,用1句话。
2-将摘要翻译成法语。
3-在法语摘要中列出每个名字。
4-输出一个包含以下内容的json对象keys:french_summary,num_names。用换行符分隔你的答案。
Text:
```{text}```
"""
response = get_completion(prompt_1)
print("Completion for prompt 1:")
print(response)

要求以指定格式输出

prompt_2 = f"""
您的任务是执行以下操作:1-总结以下文本,以<>一句话。
2-将摘要翻译成法语。
3-在法语摘要中列出每个名字。
4-输出一个json对象,该对象包含以下keys:french_summary,num_names。使用以下格式:文本:<要总结的文本>
摘要:<摘要>
翻译:<摘要翻译>
姓名:<意大利语摘要中的姓名列表>输出JSON:<JSON带summary和num_names>Text: <{text}>
"""
response = get_completion(prompt_2)
print("\nCompletion for prompt 2:")
print(response)

Tactic 2: 指导模型在匆忙得出结论之前制定自己的解决方案

prompt = f"""
Determine if the student's solution is correct or not.Question:
我正在建造一个太阳能电站,我需要帮助计算财务情况。​
土地成本为每平方英尺100美元​
我可以购买每平方英尺250美元的太阳能电池板​
我谈判了一个维护合同,每年将花费10万美元的固定费用,以及每平方英尺10美元的额外费用。​
作为平方英尺数量的函数,第一年运营的总成本是多少?Student's Solution:
设安装的面积为x平方英尺。​
成本:​
1.土地成本:100x美元​
2.太阳能电池板成本:250x美元​
3.维护成本:100,000美元+每平方英尺10美元​
总成本:100x美元+250x美元+100,000美元+100x美元=450x美元+100,000美元
"""
response = get_completion(prompt)
print(response)

请注意,学生的解决方案实际上是不正确的。

我们可以通过指示模型首先制定自己的解决方案来解决这个问题。

prompt = f"""
Your task is to determine if the student's solution \
is correct or not.
To solve the problem do the following:
- First, work out your own solution to the problem. 
- Then compare your solution to the student's solution \ 
and evaluate if the student's solution is correct or not. 
Don't decide if the student's solution is correct until 
you have done the problem yourself.Use the following format:
Question:

question here

Student's solution:

student’s solution here

Actual solution:

steps to work out the solution and your solution here

Is the student's solution the same as actual solution \
just calculated:

yes or no

Student grade:

correct or incorrect


Question:

I’m building a solar power installation and I need help
working out the financials.

  • Land costs $100 / square foot
  • I can buy solar panels for $250 / square foot
  • I negotiated a contract for maintenance that will cost
    me a flat $100k per year, and an additional $10 / square
    foot
    What is the total cost for the first year of operations
    as a function of the number of square feet.
Student's solution:

Let x be the size of the installation in square feet.
Costs:

  1. Land cost: 100x
  2. Solar panel cost: 250x
  3. Maintenance cost: 100,000 + 100x
    Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000
Actual solution:
"""
response = get_completion(prompt)
print(response)

模型限制:幻觉

这个话题是关于模型的限制,这在您开发使用大型语言模型的应用程序时非常重要。如果模型在训练过程中暴露于大量的知识,那么它并没有完全记忆所见的信息,因此它不太了解其知识的边界。

这意味着它可能尝试回答有关晦涩主题的问题,并且可能会编造听起来合理但实际上不正确的想法。我们称这些虚构的想法为幻觉。

我们将展示一个例子,其中模型会产生幻觉。这是一个例子,其中模型会捏造一个真实牙刷公司的虚构产品名称的描述。所以,我们的提示是,请告诉我有关 Boy 公司的 AeroGlide Ultra Slim 智能牙刷的信息。

如果我们运行此提示,模型将为我们提供一个相当逼真的虚构产品描述。这可能是危险的,因为这听起来相当真实。因此,确保使用我们在本笔记本中介绍的一些技术,在构建自己的应用程序时尝试避免这种情况。这是模型已知的弱点,我们正在积极努力解决这个问题。

另外一种减少幻觉的策略是,在您想让模型基于文本生成答案时,请先要求模型查找任何相关的引用,然后要求它使用这些引用来回答问题,并且要求模型提供答案的来源文档。这通常可以帮助减少这些幻觉。

Boie是一家真实的公司,产品名称不是真实的。

prompt = f"""
Tell me about AeroGlide UltraSlim Smart Toothbrush by Boie
"""
response = get_completion(prompt)
print(response)

总结

完成以上内容,对Prompt提示有了更多的了解吧?

第一个原则,即写清晰具体的说明。你应该通过提供尽可能清晰和具体的说明来表达你想让模型做什么。这将引导模型朝着期望的输出方向,并减少得到无关或不正确响应的可能性。不要将写清晰的提示与写简短的提示混淆,因为在许多情况下,更长的提示实际上为模型提供了更多的清晰度和上下文,这可能会导致更详细和相关的输出。

第二个原则是给模型时间思考。如果模型在急于得出错误的结论,导致了推理错误,那么你应该尝试重新构造查询,以请求一系列相关推理的链或序列,在模型提供最终答案之前。另一种思考方式是,如果你给模型一个在短时间内或用少的单词数量内完成的任务过于复杂,它可能会猜测一个不正确的答案。这也会发生在人类身上。如果你让一个人在没有时间先算出答案的情况下完成一个复杂的数学问题,他们也可能犯错误。在这种情况下,你可以指示模型在一个问题上思考更长的时间,这意味着它会在任务上花费更多的计算努力。

接下来将学习迭代提示开发过程。​


http://www.ppmy.cn/news/962854.html

相关文章

哈工大车万翔:ChatGPT时代,NLPer 的危与机

note ChatGPT的诞生&#xff0c;源于研究者「暴力美学」的手段。 如果大胆预测&#xff0c;ChatGPT能火几年&#xff0c;我猜可能是2到3年的时间&#xff0c;到2025年大概又要更新换代了。 工业界相较于学术界拥有巨大优势。这种「AI 的马太效应」会造成胜者通吃的局面。更加…

课代表:ChatGPT及大模型专题研讨会

课代表&#xff1a;ChatGPT及大模型专题研讨会 周末应领导的要求听了一下午的直播&#xff08;什么时候能不再做领导对啥感兴趣你就要每天围着什么转的牛马呢&#xff1f;&#xff09;&#xff0c;一打开还看到了自己本科的老师&#xff08;死去的记忆突然攻击我&#xff09;。…

每一个人都应该明白的ChatGPT所带来的意义

每一个人都应该明白的ChatGPT所带来的意义 ChatGPT的横空问世&#xff0c;因其更高的智能程度、更宽泛的领域知识、更灵活的响应能力、更自然的对话语境使整个互联网都受到极大的冲击。 我本人试用了一段时间后&#xff0c;并结合在网上看到的文章、评论、观点&#xff0c;想说…

网络安全(黑客)学习笔记

0基础学网安或者提升巩固网安技术的小伙伴有福了&#xff01; 本篇整合了网络安全全知识点&#xff0c;零基础也适用&#xff01; 本篇涵盖内容及其全面&#xff0c;强烈推荐收藏&#xff01; 一、学习网络安全会遇到什么问题呢&#xff1f; 1、学习基础内容多时间长 2、难…

JAVA中的XML

XML文档内容由一系列标签元素组成 <元素名 属性名“属性值”>元素内容</元素名> 1.属性值用双引号包裹 2.一个元素可以有多个属性 3. 属性值中不能直接包含<、“、& 4. 不建议使用的字符&#xff1a;‘、> 注意事项 1. 所有XML元素都必须有结束标签 2.XM…

【ChatGPT】与ChatGPT聊天,了解世界杯的前世今生

文章目录 &#x1f3c6; 前言&#x1f4ac; 什么是ChatGPT⚽ 与ChatGPT的快问快答&#x1f9e9; 总结 &#x1f3c6; 前言 最近火爆全网的chatGPT&#xff0c;吸引一大批技术爱好者的疯狂围观。大家使用过后&#xff0c;纷纷发出惊叹&#xff0c;深陷其中&#xff0c;无法自拔。…

【AIGC提示词工程师、AI提示词工程师、Prompts工程师、Midjourney培训】电商行业AIGC图像生成与内容创作学习路线图

导言 关注【元壤教育】公众号进入平台开始系统学习之路。 AIGC&#xff08;Stable Diffusion、DALL-E 和 Midjourney&#xff09;助力电商行业降本增效、提升10倍生产力 一门深入全面的课程&#xff0c;专为对AI图像生成在电商行业应用感兴趣的人士打造&#xff0c;旨在帮助他们…

转载。1AGI 14个关键问题

信息爆炸的 10 篇 AGI 访谈&#xff0c;我们从中整理了 14 个关键问题 原创 Founder Park Founder Park 2023-04-16 19:00 发表于北京 自从 GPT-4 发布以来&#xff0c;媒体高度关注 OpenAI 和其内外部相关人士&#xff0c;重要角色的视频、播客和文章访谈频频出现。为了节省…