【吴恩达】ChatGPT提示工程师 笔记【第三课Prompt 迭代开发】

![image.png](https://upload-images.jianshu.io/upload_images/4115139-8b738720a5b78238.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 

[课程3地址](https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/3/iterative)

![image.png](https://upload-images.jianshu.io/upload_images/4115139-2c70989ffbaff8bf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 

当我在使用大型语言模型构建应用程序时,我想我从未在第一次尝试时就得到了我最终在应用程序中使用的提示。但这并不重要。只要你有一个好的过程,能够反复改进你的提示,你就能找到一个适合你想要完成的任务的方法。  你可能听说过我说,当我训练一个机器学习模型时,它几乎从来没有在第一次就成功。实际上,我对我训练的第一个模型能够成功感到非常惊讶。我认为我们在进行提示时,第一次成功的可能性可能会稍高一些,但正如他所说,第一次提示是否成功并不重要,最重要的是找到适合你应用程序的提示的过程。

因此,让我们跳入代码,让我向你展示一些框架,让你思考如何反复开发一个提示。好的,如果你以前和我一起上过机器学习课,你可能看过我用一个图表说,对于机器学习开发,你经常会有一个想法,然后实现它。所以,写代码,获取数据,训练你的模型,这会给你一个实验结果。然后你可以看看那个输出,也许进行错误分析,了解它哪里有效或无效,然后可能甚至改变你想解决的问题的确切想法,或者如何去解决它。然后改变实现,运行另一个实验,如此反复,直到得到一个有效的机器学习模型。如果你对机器学习不熟悉,没有看过这个图表,不用担心,对于这个演示的其余部分并不那么重要。但是当你正在编写提示来开发一个使用LLM的应用程序时,过程可能非常相似,你有一个你想要完成的任务的想法,你可以尝试首次写出一个提示,希望它清晰且具体,也许,如果适当,给系统一些思考的时间。然后你可以运行它,看看你得到的结果。如果第一次的效果不够好,那么找出为什么指令,例如,不够清楚,或者为什么它没有给算法足够的思考时间,这个反复的过程允许你细化想法,细化提示,等等,然后在这个循环中反复进行,直到你得到一个适合你的应用程序的提示。 

 这也是为什么我个人没有太关注那些说有30个完美提示的互联网文章,因为我认为,可能并没有一个完美的提示适用于所有事情。更重要的是你有一个开发好的提示的过程,适用于你特定的应用程序。所以,让我们一起在代码中看一个例子。我在这里有之前视频中的起始代码,导入OpenAI,导入OS。在这里我们获取OpenAI API密钥,这是你上次看到的相同的辅助函数。在这个视频中,我将使用的运行示例是总结一张椅子的事实表。所以,让我在这里粘贴。如果你想的话,随时暂停视频,并在左边的笔记本上仔细阅读。

但这是一张椅子的事实表,描述说它是一个美丽的中世纪灵感家族的一部分,等等。它谈论了建筑,尺寸,椅子的选项,材料等等。它来自意大利。所以,假设你想要从这个事实表中提取出一些信息,帮助一个营销团队为一个在线零售网站编写一个描述。让我快速运行这三个,然后我们将按照以下提示进行,我会粘贴这个。所以我的提示在这里说,你的任务是帮助一个营销团队根据一个技术事实表创建一个零售网站的产品描述,编写一个产品描述,等等。对吧?所以这是我第一次尝试向大型语言模型解释任务。所以让我按shift-enter键,这需要几秒钟的时间来运行,我们得到这个结果。看起来它做得很好,写了一个描述,介绍了一个令人惊叹的中世纪灵感的办公椅,完美的添加,等等。但当我看这个的时候,我觉得,天哪,这太长了。它做得很好,完全按照我要求的方式,从技术事实表开始写一个产品描述。但当我看这个的时候,我觉得这太长了。也许我们希望它稍微短一点。所以,我有了一个想法,我写了一个提示,得到了一个结果。

我对它不是很满意,因为它太长了。所以,我会澄清我的提示,说最多使用50个单词,以尝试更好地指导所需长度的描述。然后再运行一次。好的。这实际上看起来像一个更好的短描述,介绍了一个中世纪灵感的办公椅,等等。五个你只是,是的,又时尚又实用。不错。让我再检查一下这个的长度。所以,我要拿这个回应,根据空格分割,然后,你知道,打印出长度。所以是52个单词。实际上还不错。大型语言模型在遵循关于非常精确的单词数量的指示方面做得还可以,但不是很好。但这实际上还不错。有时它会打印出60或65等等单词,但这是在合理范围内。一些你可以尝试的事情可能是,说最多使用三个句子。让我再运行一次。但这些都是不同的方式,告诉大型语言模型,你想要的输出的长度。所以这是1,2,3,我数了三个句子,看起来做得很好。然后我也看到有些人有时会做类似的事情,比如,最多使用280个字符。

大型语言模型,由于它们解读文本的方式,使用了一种叫做分词器的东西,我不会在这里详细讨论。但是,它们在计数字符方面表现一般。但是,让我们看看,281个字符。实际上令人惊讶地接近。通常,大型语言模型并不会这么接近。但这些都是你可以尝试去控制你得到的输出长度的不同方法。但是让我把它切换回最多使用50个单词。这就是我们刚才得到的结果。

当我们继续为我们的网站精细化这段文本时,我们可能会决定,哎呀,这个网站并不是直接向消费者销售,实际上是打算向家具零售商销售家具,他们会对椅子的技术细节和材料更感兴趣。在这种情况下,你可以拿这个提示说,我想修改这个提示以使其更精确地描述技术细节。所以让我继续修改这个提示。我将说,这个描述是为家具零售商准备的,因此应该专注于技术和材料,产品和构造,好吧,让我们运行一下。看看结果如何。还不错,你知道,涂有铝基底的涂料和气动椅,高质量材料。所以通过改变提示,你可以让它更专注于你想要的特定特性。当我看这个时,我可能会决定在描述的最后,我也想包括产品ID。所以这个椅子的两种供应,SWC 110,SWC 100。所以,也许我可以进一步改进这个提示。为了让它给我提供产品ID,我可以在描述的最后添加这个指令,在技术规格中包括每个7字符的产品ID,然后运行一下,看看会发生什么。所以,它说,向您介绍我们的Miss Agents 5办公椅,壳体颜色,谈论塑料涂层,铝基底,实用,一些选项,谈论了两个产品ID。所以,这看起来非常好。你刚刚看到的是许多开发人员会经历的迭代提示开发的一个简短例子。

我认为,一个指导原则是,在上一个视频中,你看到Isa分享了许多最佳实践,所以,我通常会把这样的最佳实践牢记在心,明确和具体,如果需要,给模型时间思考。记住这些,首次尝试写一个提示,看看结果如何,然后从那里开始,迭代地精炼提示,使其越来越接近你需要的结果,这是值得的。所以,你可能在各种程序中看到的许多成功的提示,都是通过这样的迭代过程得到的。只是为了好玩,让我给你们展示一个更复杂的提示的例子,这可能会让你们了解到chatGPT可以做什么,即,我在这里添加了一些额外的指令。在描述之后,包括一个给出产品尺寸的表格,然后,你知道,将所有内容格式化为HTML。所以,让我们运行一下。实际上,你最终得到的提示像这样,只有在多次迭代后才可能。我认为我不认识任何一个人在他们第一次尝试让系统处理事实表时就会写出这个确切的提示。所以,这实际上输出了一堆HTML。让我们显示HTML,看看这是否是有效的HTML,看看这是否有效。我其实不知道它会不会工作,但让我们看看。哦,酷。好像渲染出来了。所以,它有这个看起来非常好的椅子描述,构造,材料,产品尺寸。哦,看起来我忘了使用最多50个词的指令,所以这有点长,但如果你想要,你知道,你甚至可以随时暂停视频,告诉它更简洁,重新生成这个,看看你得到的结果。

所以,我希望你从这个视频中了解到,提示开发是一个迭代的过程。尝试一些东西,看看它如何还没有完全满足你的需求,然后思考如何澄清你的指示,或者在某些情况下,思考如何给它更多的思考空间,使它更接近于提供你想要的结果。我认为,成为一个有效的提示工程师的关键并不是知道完美的提示,而是有一个好的过程来开发对你的应用程序有效的提示。在这个视频中,我以一个例子来说明开发提示。对于更复杂的应用程序,有时你会有多个例子,比如说一个列表,有10个甚至50个或100个事实表,迭代开发一个提示,并在一大堆例子中进行评估。但是对于大多数应用程序的早期开发,我看到许多人都是像我这样只用一个例子进行开发的,但是对于更成熟的应用程序,有时对一个更大的例子集进行提示评估可能会很有用,比如测试在几十个事实表上的不同提示,看看它在多个事实表上的平均或最差的表现。但通常,你只有在应用程序更成熟,你必须有那些度量来推动提示改进的最后几步时,才会这样做。因此,希望你们能玩一下Jupyter代码笔记本的例子,尝试不同的变化,看看你得到的结果是什么。

当你完成后,让我们进入下一个视频,在那里我们将讨论大型语言模型在软件应用中的一个非常常见的用途,即总结文本。所以,当你准备好的时候,让我们进入下一个视频。

在这节课中,您将反复分析并优化您的提示,以从产品事实表中生成营销文案。

## Setup

```
import openaiimport osfrom dotenv import load_dotenv, find_dotenv_ = load_dotenv(find_dotenv()) # read local .env fileopenai.api_key  = os.getenv('OPENAI_API_KEY')
```

```
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"]
```

注意:在2023年6月,OpenAI更新了gpt-3.5-turbo。您在笔记本中看到的结果可能与视频中的稍有不同。部分提示也已稍作修改以产生想要的结果。

Generate a marketing product description from a product fact sheet(从产品事实表中生成营销产品描述)

```
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 MATERIALSSHELL BASE GLIDER- Cast Aluminum with modified nylon PA6/PA66 coating.- Shell thickness: 10 mm.SEAT- HD36 foamCOUNTRY OF ORIGIN- Italy"""
```

```
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)
```

## Issue 1: The text is too long(文本太长)

● Limit the number of words/sentences/characters.(限制字词句个数)

```
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)
```

## Issue 2. Text focuses on the wrong details(关注了错误的细节)

● Ask it to focus on the aspects that are relevant to the intended audience.

求它关注与目标受众相关的方面。

```
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)
```

## 

```
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)
```

## Issue 3. Description needs a table of dimensions

● Ask it to extract information and organize it in a table.

In [ ]:

```
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)
```

## Load Python libraries to view HTML(以HTML视图展示)

```
from IPython.display import display, HTMLdisplay(HTML(response))
```
 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值