Alice_小杰的头像

迭代提示开发

迭代提示开发
3
迭代提示开发
迭代
迭代
示例
6
示例
第一次迭代
第一次迭代
第二次迭代
第二次迭代
非正式迭代
非正式迭代
第三次迭代
第三次迭代
第四次迭代
第四次迭代
第五次迭代
第五次迭代
总结
总结
迭代思维
迭代思维
首次尝试
首次尝试
引出迭代开发
引出迭代开发
迭代开发
迭代开发
相似流程
相似流程
迭代提示开发
迭代提示开发
“完美的Prompt”
“完美的Prompt”
起始代码
起始代码
第一个想法
第一个想法
椅子说明书
椅子说明书
第一个Prompt
第一个Prompt
第一次结果
第一次结果
第一次反馈
第一次反馈
第二个想法
第二个想法
第二个Prompt
第二个Prompt
第二次结果和反馈
第二次结果和反馈
大型语言模型表现
大型语言模型表现
非正式Prompt_1
非正式Prompt_1
非正式结果和反馈_1
非正式结果和反馈_1
非正式Prompt_2
非正式Prompt_2
解析文本方式
解析文本方式
非正式结果和反馈_2
非正式结果和反馈_2
返回第二次结果
返回第二次结果
第三个想法
第三个想法
第三个Prompt
第三个Prompt
第三次结果和反馈
第三次结果和反馈
迭代Prompt
迭代Prompt
第四个想法
第四个想法
第四个Prompt
第四个Prompt
第四次结果和反馈
第四次结果和反馈
最佳实践
最佳实践
编写一个Prompt
编写一个Prompt
新的示例
新的示例
第五个想法和Prompt
第五个想法和Prompt
精准的Prompt
精准的Prompt
第五个结果和反馈
第五个结果和反馈
50个单词限制
50个单词限制
给予启发
给予启发
提示开发过程
提示开发过程
有效的Prompt
有效的Prompt
使用多样本开发提示
使用多样本开发提示
生成新例子
生成新例子
下期视频预告
下期视频预告
引用参考
引用参考

迭代提示开发

2023-05-04
309 人已看
3 讨论
Alice_小杰的头像
Alice_小杰
粉丝:61
主题:10
描述:4
例子:19
类比:1
其他:20
字数:16652
Alice_小杰的头像
Alice_小杰
粉丝:61

迭代提示开发

迭代

观点 迭代思维

当我使用大型语言模型构建应用程序时,我从未想过第一次尝试的 Prompt,会沿用到应用程序的最终版本。但这并不重要。只要你有一个良好的迭代过程,让你的 Prompt 变得更好,那么你就能得到很有效的 Prompt,用于你想要实现的任务。

经验 首次尝试

你可能听我说过,当我训练机器学习模型时,它几乎从未在第一次尝试中成功过。事实上,如果我训练的第一个模型成功了,我会感到十分惊讶。

我认为在提示方面上,第一次尝试就成功的几率可能会高一些,但正如她所说,第一个 Prompt 是否有效并不重要。重要的是为你的应用程序找到有效的 Prompt 的过程。

过渡 引出迭代开发

那么,让我们跳转到代码,并向你展示一些框架,来思考如何迭代开发提示。

迭代开发 迭代提示开发

如果你之前和我一起上过机器学习课程,你可能已经见过我使用这一张图表,来说明在机器学习开发中,你通常会先有一个想法,然后去实现它。

通过编写代码,获取数据,训练模型,得到一个实验结果。之后你可以查看输出结果,你可能会进行错误分析,找出哪些部分有效,哪些部分不生效。

甚至,你可能会改变想要解决的问题,或者如何解决问题的确切想法,然后改变你的实现方式,再次运行实验,如此反复迭代,直到获得一个有效的机器学习模型。

过渡 相似流程

如果你不熟悉机器学习并且以前没有见过这张图表,不用担心,它对本次演示的其余部分并不重要。

但是当你编写 Prompt,使用LLM开发应用程序时,使用LLM开发应用程序时,这个过程可能会非常相似。

迭代提示开发

你有一个“想要完成什么任务”的想法,然后你尝试编写第一条 Prompt,并希望它清晰而又明确,如果可以,给予系统足够的时间去思考,然后你运行它并查看结果。

如果第一次效果不够好,那么通过迭代过程找出——例如,为什么指令不够清晰,或者,为什么未能给予算法足够的时间去思考,提炼你的想法,优化 Prompt 等等。

多次循环,直到你得到一个有效的 Prompt,对于你的应用程序。

原因 “完美的Prompt” 迭代提示开发

这也是我个人不太关注网上类似于“30个完美 Prompt”文章的原因,因为我认为可能没有一个适用于所有场景的完美 Prompt。更重要的是,你需要一个开发出有效 Prompt 的过程,对于特定的应用程序。

示例

第一次迭代

准备 起始代码

那么,让我们看一个代码示例。

这是你在上期视频中看到的起始代码,已经导入openai库和os库。

# 导入第三方库
import openai
import os
from dotenv import load_dotenv, find_dotenv

# 读取系统中的环境变量
_ = load_dotenv(find_dotenv()) # read local .env file

# 设置 API_KEY
openai.api_key  = os.getenv('OPENAI_API_KEY')

这里我们获取OpenAI API密钥,以及你上次看到的同个帮助函数。

# 一个封装 OpenAI 接口的函数,参数为 Prompt,返回对应结果
# prompt: 对应的提示
# model: 调用的模型,默认为 gpt-3.5-turbo(ChatGPT),有内测资格的用户可以选择 gpt-4
def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    # 调用 OpenAI 的 ChatCompletion 接口
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # 模型输出的温度系数,控制输出的随机程度
    )
    return response.choices[0].message["content"]
第一个想法 迭代提示开发

在这期视频中,我将使用“对一张椅子的说明书进行摘要”的示例任务。

准备 椅子说明书

那么,我把它粘贴到这里。

# 示例
# 椅子说明书
fact_sheet_chair = """
OVERVIEW
- Part of a beautiful family of mid-century inspired office furniture, 
including filing cabinets, desks, bookcases, meeting tables, and more.
- Several options of shell color and base finishes.
- Available with plastic back and front upholstery (SWC-100) 
or full upholstery (SWC-110) in 10 fabric and 6 leather options.
- Base finish options are: stainless steel, matte black, 
gloss white, or chrome.
- Chair is available with or without armrests.
- Suitable for home or business settings.
- Qualified for contract use.

CONSTRUCTION
- 5-wheel plastic coated aluminum base.
- Pneumatic chair adjust for easy raise/lower action.

DIMENSIONS
- WIDTH 53 CM | 20.87”
- DEPTH 51 CM | 20.08”
- HEIGHT 80 CM | 31.50”
- SEAT HEIGHT 44 CM | 17.32”
- SEAT DEPTH 41 CM | 16.14”

OPTIONS
- Soft or hard-floor caster options.
- Two choices of seat foam densities: 
 medium (1.8 lb/ft3) or high (2.8 lb/ft3)
- Armless or 8 position PU armrests 

MATERIALS
SHELL BASE GLIDER
- Cast Aluminum with modified nylon PA6/PA66 coating.
- Shell thickness: 10 mm.
SEAT
- HD36 foam

COUNTRY OF ORIGIN
- Italy
"""

如果你愿意的话,可以随时暂停视频,并在左侧笔记本中仔细阅读。

这是一份椅子的说明书,里面描述了椅子是美丽的中世纪风格系列的一部分等等,介绍了椅子的结构、尺寸、选项,材料等信息,产地是意大利。

第一个Prompt 迭代提示开发

假设你想要采用这份说明书,帮助营销团队为网上零售网站编写描述。

让我快速运行这三个...这里我们提供一个 Prompt,如下,我将把它粘贴进来。

# 提示
# 根据椅子说明书生成网站营销描述
prompt = f"""
Your task is to help a marketing team create a 
description for a retail website of a product based 
on a technical fact sheet.

Write a product description based on the information 
provided in the technical specifications delimited by 
triple backticks.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)

那么我的 Prompt 是:“你的任务是帮助营销团队,创建零售网站或产品技术说明书的描述...编写产品描述等内容。”

第一次结果 迭代提示开发

这是我第一次尝试,向大型语言模型解释任务。

那么让我按下 Shift + Enter,等待几秒钟的运行时间,然后我们得到运行结果。

Introducing our stunning mid-century inspired office chair, the perfect addition to any home or business setting. Part of a beautiful family of office furniture, including filing cabinets, desks, bookcases, meeting tables, and more, this chair is available in several options of shell color and base finishes to suit your style. Choose from plastic back and front upholstery (SWC-100) or full upholstery (SWC-110) in 10 fabric and 6 leather options.

The chair is constructed with a 5-wheel plastic coated aluminum base and features a pneumatic chair adjust for easy raise/lower action. It is available with or without armrests and is qualified for contract use. The base finish options are stainless steel, matte black, gloss white, or chrome.

Measuring at a width of 53 cm, depth of 51 cm, and height of 80 cm, with a seat height of 44 cm and seat depth of 41 cm, this chair is designed for ultimate comfort. You can also choose between soft or hard-floor caster options and two choices of seat foam densities: medium (1.8 lb/ft3) or high (2.8 lb/ft3). The armrests are available in either an armless or 8 position PU option.

The materials used in the construction of this chair are of the highest quality. The shell base glider is made of cast aluminum with modified nylon PA6/PA66 coating and has a shell thickness of 10 mm. The seat is made of HD36 foam, ensuring maximum comfort and durability.

This chair is made in Italy and is the perfect combination of style and functionality. Upgrade your workspace with our mid-century inspired office chair today!

看起来它很好地完成了描述的编写:“介绍我们令人赞叹的中世纪风格办公椅,完美搭配...”

第一次反馈 迭代提示开发

但是当我看到这个时,我在想:“哇,这个太长了。”

它确实按照我的要求,很好地完成任务,也就是从技术说明书开始编写产品描述。

但是当我看到这个时,我在想:“这个有点长。”

第二次迭代

第二个想法 迭代提示开发

也许我们想让它更短一些。所以我有了一个想法。

我写了一个 Prompt,得到了一个结果。我对它不是很满意,因为它太长了。

第二个Prompt 迭代提示开发

所以我将会阐明我的 Prompt:“最多使用50个单词”。

# 提示
# 根据椅子说明书生成网站营销描述
# 最多使用 50 个单词
prompt = f"""
Your task is to help a marketing team create a 
description for a retail website of a product based 
on a technical fact sheet.

Write a product description based on the information 
provided in the technical specifications delimited by 
triple backticks.

Use at most 50 words.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)

尝试用更好的指导,生成期望的长度。

第二次结果和反馈 迭代提示开发

让我们再次运行。

Introducing our beautiful medieval-style office furniture collection, including filing cabinets, desks, bookcases, and conference tables. Choose from a variety of shell colors and base coatings, with optional plastic or fabric/leather decoration. The chair features a plastic-coated aluminum base with five wheels and pneumatic height adjustment. Perfect for home or commercial use. Made in Italy.

好的,看起来确实更像是对产品更好的简短描述:

“介绍一款中世纪风格办公椅...”;“5个轮子支撑”,很好;“既时尚又实用”。不错。

我需要再检查一下它的长度。我将获取 response,根据空格将其进行切片,然后打印出长度。

len(response.split(" "))

它的长度是52个单词。实际上还不错。

非正式迭代

大型语言模型表现

大型语言模型表现还行,但在执行非常精确的字数指令方面表现一般,但也没那么坏。

有时它会输出的字数为60或65等等,但这是在合理范围之内。

非正式Prompt_1 大型语言模型表现

你可以尝试做的一些事情是,呃,比如说,“最多用 3 个句子”。

# 提示
# 根据椅子说明书生成网站营销描述
# 最多用 3 个句子
prompt = f"""
Your task is to help a marketing team create a 
description for a retail website of a product based 
on a technical fact sheet.

Write a product description based on the information 
provided in the technical specifications delimited by 
triple backticks.

Use at most 3 sentences.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
非正式结果和反馈_1 大型语言模型表现

让我再运行一次。

但这些是用不同的方式告诉大型语言模型,你想要输出的长度。

Introducing the mid-century inspired office chair, available in a range of shell colors and base finishes to suit any home or business setting. Choose from plastic or full up holstery in a variety of fabric and leather options, and opt for armrests or armless. With a 5-wheel plastic coated aluminum base and pneumatic chair adjust, this chair is both stylish and functional.

所以这是1,2,3,我数了一下这几个句子。看起来我做得不错。

非正式Prompt_2 大型语言模型表现

有时,我也会看到有人采用以下方式,比如说,“最多用 280 个字符”。

# 提示
# 根据椅子说明书生成网站营销描述
# 最多用 280 个字符
prompt = f"""
Your task is to help a marketing team create a 
description for a retail website of a product based 
on a technical fact sheet.

Write a product description based on the information 
provided in the technical specifications delimited by 
triple backticks.

Use at most 280 characters.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
补充 解析文本方式 大型语言模型表现

由于大型语言模型解析文本的方式,采用一种被称为 Tokenizer 的分词器,这里不再细讲。

但它们在计算字符方面表现一般。

非正式结果和反馈_2 大型语言模型表现
Introducing our mid-century inspired office chair, perfect for home or business settings. Available in multiple shell colors and base finishes, with or without armrests. Choose from 10 fabric and 6 leather options. Features a 5-wheel base and pneumatic chair adjust. Made in Italy.

让我们来试试,281个字符。这个实际上非常接近了。

len(response)

通常大型语言模型无法做到这么接近。但这些是它们可以尝试使用的不同方式,来控制你获取的输出长度。

回溯 返回第二次结果 第二次结果和反馈

接下来,只需切换回“最多使用50个单词”。这就是我们刚才得到的结果。

第三次迭代

第三个想法 迭代提示开发

随着我们继续完善网站的文本,我们可能会发现,这个网站实际上并不是直接面向消费者销售,而是面向家具零售商销售家具,他们更关心椅子的技术细节和椅子使用的材料。

第三个Prompt 迭代提示开发

这种情况下,你可以使用这个 Prompt 来说:“我想要修改这个 Prompt,使它更精确地描述技术细节”。

所以让我继续修改这个 Prompt。我想说,这个描述是为家具零售商准备的,所以它应该是技术性的,重点放在产品材料和构造上。

# 提示
# 根据椅子说明书生成网站营销描述
# 描述面向家具零售商,侧重技术,产品材料和构造
# 最多使用 50 个单词
prompt = f"""
Your task is to help a marketing team create a 
description for a retail website of a product based 
on a technical fact sheet.

Write a product description based on the information 
provided in the technical specifications delimited by 
triple backticks.

The description is intended for furniture retailers, 
so should be technical in nature and focus on the 
materials the product is constructed from.

Use at most 50 words.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
第三次结果和反馈 迭代提示开发

好的,让我们来试试这个。

然后,让我们看看。还不错。

Introducing our mid-century inspired office chair, perfect for both home and business settings. With a range of shell colors and base finishes, including stainless steel and matte black, this chair is available with or without armrests. The 5-wheel plastic coated aluminum base and pneumatic chair adjust make it easy to move and adjust to your desired height. Made with high-quality materials, including a cast aluminum shell and HD36 foam seat, this chair is built to last.

它说:“镀铝底座和气动椅子...优质材料”。

目标 迭代Prompt

因此,通过修改 Prompt,你可以让它更专注于你想要的具体特点。

第四次迭代

第四个想法 迭代提示开发

当我看到这个时,我可能会决定,嗯,在描述末尾,我还想包括产品 ID。

因此,这把椅子有两种 ID:SWC 110 和 SOC 100。

第四个Prompt 迭代提示开发

那么,也许我可以进一步完善这个 Prompt。

为了获取产品 ID,我可以在描述末尾添加以下指令:“在技术规格中,包括每个7位字符的产品 ID”。

# 提示
# 根据椅子说明书生成网站营销描述
# 描述面向家具零售商,侧重技术,产品材料和构造
# 在描述末尾包含 7 个字符的产品ID
# 最多使用 50 个单词
prompt = f"""
Your task is to help a marketing team create a 
description for a retail website of a product based 
on a technical fact sheet.

Write a product description based on the information 
provided in the technical specifications delimited by 
triple backticks.

The description is intended for furniture retailers, 
so should be technical in nature and focus on the 
materials the product is constructed from.

At the end of the description, include every 7-character 
Product ID in the technical specification.

Use at most 50 words.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
第四次结果和反馈 迭代提示开发

现在,让我们运行它,看看会发生什么。

Introducing our mid-century inspired office chair, perfect for home or business settings. With a range of shell colors and base finishes, and the option of plastic or full upholstery, this chair is both stylish and comfortable. Constructed with a 5-wheel plastic coated aluminum base and pneumatic chair adjust, it's also practical. Available with or without armrests and suitable for contract use. Product ID: SWC-100, SWC-110.

它说:“我们这款中世纪风格办公椅”,并提到“外壳颜色,塑料涂层,铝制底座,实用性和一些选项”,还有两个产品 ID。看起来还不错。

第五次迭代

牢记 最佳实践

你刚才看到的是迭代提示开发的简短示例。这是许多开发人员都会经历的过程。

我认为一个指导原则是,在上一个视频中,你看到 Isa 分享了一些最佳实践。我通常会牢记这样的最佳实践,保持清晰而又具体,必要时给予模型一些时间来思考。牢记这些。

鼓励 编写一个Prompt

通常情况下,首次尝试编写一个 Prompt 是值得的。

看看会发生什么,然后从那里出发,迭代改进 Prompt,逐渐接近你需要的结果。

因此,你可能会看到在各种项目中使用的,许多成功的 Prompt,都是通过类似的迭代过程得到的。

过渡 新的示例

为了好玩,让我向你展示一个更复杂的提示示例。

第五个想法和Prompt 迭代提示开发

让你感受到 chatGPT 能做些什么,我刚才在这里添加了一些额外的指令。

在描述的后面,包括一张显示产品尺寸的表格,然后将所有内容格式化成 HTML。

# 提示
# 根据椅子说明书生成网站营销描述
# 描述面向家具零售商,侧重技术,产品材料和构造
# 在描述末尾包含 7 个字符的产品ID
# 要求将所有内容格式化成 HTML
prompt = f"""
Your task is to help a marketing team create a 
description for a retail website of a product based 
on a technical fact sheet.

Write a product description based on the information 
provided in the technical specifications delimited by 
triple backticks.

The description is intended for furniture retailers, 
so should be technical in nature and focus on the 
materials the product is constructed from.

At the end of the description, include every 7-character 
Product ID in the technical specification.

After the description, include a table that gives the 
product's dimensions. The table should have two columns.
In the first column include the name of the dimension. 
In the second column include the measurements in inches only.

Give the table the title 'Product Dimensions'.

Format everything as HTML that can be used in a website. 
Place the description in a <div> element.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)

那么,让我们运行它。

迭代 精准的Prompt

在实践中,你最终会得到这样的 Prompt,这需要经过多次迭代。

我认为没有人会在首次尝试让系统处理说明书时,写出这么精准的 Prompt。

第五个结果和反馈 迭代提示开发

它实际会输出一堆的 HTML。

<div>
<h2>Mid-Century Inspired Office Chair</h2>
<p>Introducing our mid-century inspired office chair, part of a beautiful family of office furniture that includes filing cabinets, desks, bookcases, meeting tables, and more. This chair is available in several options of shell color and base finishes, allowing you to customize it to your liking. You can choose between plastic back and front upholstery or full upholstery in 10 fabric and 6 leather options. The base finish options are stainless steel, matte black, gloss white, or chrome. The chair is also available with or without armrests, making it suitable for both home and business settings. Plus, it's qualified for contract use, ensuring its durability and longevity.</p>
<p>The chair's construction features a 5-wheel plastic coated aluminum base and a pneumatic chair adjust for easy raise/lower action. You can also choose between soft or hard-floor caster options and two choices of seat foam densities: medium (1.8 lb/ft3) or high (2.8 lb/ft3). The armrests are also customizable, with the option of armless or 8 position PU armrests.</p>
<p>The materials used in the chair's construction are of the highest quality. The shell base glider is made of cast aluminum with modified nylon PA6/PA66 coating, with a shell thickness of 10 mm. The seat is made of HD36 foam, ensuring maximum comfort and support.</p>
<p>Made in Italy, this mid-century inspired office chair is the perfect addition to any office space. Order yours today!</p>
<h3>Product IDs:</h3>
<ul>
<li>SWC-100</li>
<li>SWC-110</li>
</ul>
</div>

<table>
  <caption>Product Dimensions</caption>
  <tr>
    <th>Dimension</th>
    <th>Measurement (inches)</th>
  </tr>
  <tr>
    <td>Width</td>
    <td>20.87"</td>
  </tr>
  <tr>
    <td>Depth</td>
    <td>20.08"</td>
  </tr>
  <tr>
    <td>Height</td>
    <td>31.50"</td>
  </tr>
  <tr>
    <td>Seat Height</td>
    <td>17.32"</td>
  </tr>
  <tr>
    <td>Seat Depth</td>
    <td>16.14"</td>
  </tr>
</table>

让我们显示 HTML 以便观察它是否是有效的 HTML,它是否生效。我不确定它是否有效,让我们来试试。

# 导入第三方库
from IPython.display import display, HTML
# 表格是以 HTML 格式呈现的,加载出来
display(HTML(response))

哦酷,太好了,看起来渲染成功了。它对椅子的描述看起来非常不错,包括构造、材料、产品尺寸。

HTML 渲染效果

忘记 50个单词限制

哦,看起来我忘了使用“最多使用50个单词”的指令,所以这看起来有点长,但如果你想要这样。

你可以随时暂停视频,要求它重新生成更简洁的描述,并查看结果。

总结

过渡 给予启发

我希望你从这个视频中得到启发。

提示开发过程 迭代提示开发

提示开发是一个迭代过程。尝试做些什么,看看它为何不能完全满足你的要求;

然后思考如何阐明你的指令,或者在某些情况下,思考如何给予它更多的思考空间,使它更接近你想要的结果。

迭代 有效的Prompt

我认为成为一个高效的提示工程师的关键,不在于知道完美的 Prompt,而是有一个良好的流程,用于开发对你的应用程序有效的 Prompt。

使用多样本开发提示

在这期视频中,我演示了如何只使用一个样本来开发提示。

对于更复杂的应用程序,有时你会使用多个样本,例如10个,甚至50个或100个事实表,迭代开发提示时,使用多个样本对其进行评估。

对于大多数应用程序的早期开发,我看到许多人和我一样只使用一个样本进行开发,但对于更加成熟的应用程序,有时使用多个样本来评估 Prompt 是否有效的做法是有用的。

例如,在几十个事实表上测试不同的 Prompt,来了解它们在多个事实表上的平均或最差表现。

但在通常情况下,你只会在应用程序更加成熟时这么做,你必须拥有这些指标,来推动提示改进的最后几个步骤。

鼓励 生成新例子

那么,请尝试用Jupyter代码笔记本的示例,尝试示例的不同变体,看看你会得到什么结果。

收尾 下期视频预告

当你完成后,让我们进入下一期视频。

我们将讨论大型语言模型在软件应用程序中,一个十分常见的用途,也就是文本摘要。

如果你准备好了,让我们进入下一期视频。

附录 引用参考
讨论
随记