Py学习  »  chatgpt

如何优化ChatGPT Prompt?

AINLP • 9 月前 • 163 次点击  

简介

紧接前文LLM 系列 | 04:ChatGPT Prompt编写指南,今天这篇小作文主要介绍ChatGPT Prompt 编写过程中的一些迭代优化细节。在机器学习里,先完成一个能跑通的模型,才能对它进行改进迭代;提示工程(prompt engineering)也一样,最初版本的 prompt 或许不够完美,需要学会如何一步步细化要求,进行迭代改进。本文会以将一份产品说明书转为产品营销说明为例展开介绍如何根据自己的需求迭代优化Prompt。

任务: 生成产品营销说明

关于环境安装等准备工作可以参考前文LLM 系列 | 04:ChatGPT Prompt编写指南,本文不再赘述。假设这里有一个椅子的产品说明书,描述说它是一个中世纪灵感家族的一部分,讨论了构造、尺寸、椅子选项、材料等等,产地是意大利。现在想要使用这份说明书帮助营销团队为在线零售网站撰写营销说明书。

# 示例:产品说明书
fact_sheet_chair = """
概述

    美丽的中世纪风格办公家具系列的一部分,包括文件柜、办公桌、书柜、会议桌等。
    多种外壳颜色和底座涂层可选。
    可选塑料前后靠背装饰(SWC-100)或10种面料和6种皮革的全面装饰(SWC-110)。
    底座涂层选项为:不锈钢、哑光黑色、光泽白色或铬。
    椅子可带或不带扶手。
    适用于家庭或商业场所。
    符合合同使用资格。

结构

    五个轮子的塑料涂层铝底座。
    气动椅子调节,方便升降。

尺寸

    宽度53厘米|20.87英寸
    深度51厘米|20.08英寸
    高度80厘米|31.50英寸
    座椅高度44厘米|17.32英寸
    座椅深度41厘米|16.14英寸

选项

    软地板或硬地板滚轮选项。
    两种座椅泡沫密度可选:中等(1.8磅/立方英尺)或高(2.8磅/立方英尺)。
    无扶手或8个位置PU扶手。

材料
外壳底座滑动件

    改性尼龙PA6/PA66涂层的铸铝。
    外壳厚度:10毫米。
    座椅
    HD36泡沫

原产国

    意大利
"
""

基于上述说明书生成一份产品营销说明:

# 提示:基于说明书创建营销描述
prompt = f"""
你的任务是帮助营销团队基于技术说明书创建一个产品的营销描述。

根据```标记的技术说明书中提供的信息,编写一个产品描述。

技术说明: ```{fact_sheet_chair}```
"
""
response = get_completion(prompt)
print(response)

输出结果如下:

产品描述:

我们自豪地推出美丽的中世纪风格办公家具系列,其中包括文件柜、办公桌、书柜、会议桌等。我们的产品有多种外壳颜色和底座涂层可选,以满足您的个性化需求。您可以选择塑料前后靠背装饰(SWC-100)或10种面料和6种皮革的全面装饰(SWC-110),以使您的家具更加独特。底座涂层选项为:不锈钢、哑光黑色、光泽白色或铬,以满足您的不同需求。

我们的椅子可带或不带扶手,适用于家庭或商业场所。我们的产品符合合同使用资格,让您放心使用。

我们的椅子采用五个轮子的塑料涂层铝底座,气动椅子调节,方便升降。尺寸为宽度53厘米|20.87英寸,深度51厘米|20.08英寸,高度80厘米|31.50英寸,座椅高度44厘米|17.32英寸,座椅深度41厘米|16.14英寸。

我们提供软地板或硬地板滚轮选项,两种座椅泡沫密度可选:中等(1.8磅/立方英尺)或高(2.8磅/立方英尺),以满足您的不同需求。我们还提供无扶手或8个位置PU扶手的选项。

我们的产品采用改性尼龙PA6/PA66涂层的铸铝外壳底座滑动件,外壳厚度为10毫米,座椅采用HD36泡沫,原产国为意大利。

我们的产品不仅美观大方,而且质量可靠,是您家庭或商业场所的理想选择。

问题1:太长

从上面的结果看,似乎很好地将技术说明书转为一份产品营销说明,但太长了。我们可以在长度上进行限制,比如最多使用50个字。

因此,通过要求它限制生成文本长度来解决这一问题。优化后的 prompt:

# 优化后的 Prompt,要求生成描述不多于 50 词
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。

根据```标记的技术说明书中提供的信息,编写一个产品描述。

最多使用50个词。

技术规格:```{fact_sheet_chair}```
"
""
response = get_completion(prompt)
print(response)

输出结果如下:

中世纪风格办公家具系列,包括文件柜、办公桌、书柜、会议桌等。多种颜色和涂层可选,可带或不带扶手。底座涂层选项为不锈钢、哑光黑色、光泽白色或铬。适用于家庭或商业场所。符合合同使用资格。意大利制造。

尝试看看结果的长度:

# 由于中文需要分词,此处直接计算整体长度
print(len(response))

输出结果是 97

如果限制改为最多使用50个字。输出结果如下:

中世纪风格办公家具系列,包括文件柜、办公桌、书柜、会议桌等。多种颜色和涂层可选,可带或不带扶手。适用于家庭或商业场所。

print(len(response))这时候是59。还是能够比较精准控制长度!


问题2:如何关注指定方面的细节

如果这个网站并不是直接向消费者销售,而是旨在向家具零售商销售家具,他们会更关心椅子的技术细节和材料。在这种情况下,我们可以修改Prompt,让它更精确地描述椅子的技术细节。即,要求它专注于与目标受众相关的方面。

优化后的 prompt:

# 优化后的 Prompt,说明面向对象,应具有什么性质且侧重于什么方面
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。

根据```标记的技术说明书中提供的信息,编写一个产品描述。

该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。

使用最多50个单词。

技术规格: ```{fact_sheet_chair}```
"
""
response = get_completion(prompt)
print(response)

输出结果如下:

这款中世纪风格办公家具系列包括文件柜、办公桌、书柜和会议桌等,适用于家庭或商业场所。可选多种外壳颜色和底座涂层,底座涂层选项为不锈钢、哑光黑色、光泽白色或铬。椅子可带或不带扶手,可选软地板或硬地板滚轮,两种座椅泡沫密度可选。外壳底座滑动件采用改性尼龙PA6/PA66涂层的铸铝,座椅采用HD36泡沫。原产国为意大利。

如果想要进一步在描述的结尾加上产品ID。可以进一步改进这个提示,要求在描述的结尾,包括在技术说明中的每个7个字符产品ID。

进一步优化 prompt:

# 更进一步
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。

根据```标记的技术说明书中提供的信息,编写一个产品描述。

该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。

在描述末尾,包括技术规格中每个7个字符的产品ID。

使用最多50个单词。

技术规格: ```{fact_sheet_chair}```
"
""
response = get_completion(prompt)
print(response)

输出结果如下:

这款中世纪风格的办公家具系列包括文件柜、办公桌、书柜和会议桌等,适用于家庭或商业场所。可选多种外壳颜色和底座涂层,底座涂层选项为不锈钢、哑光黑色、光泽白色或铬。椅子可带或不带扶手,可选塑料前后靠背装饰或10种面料和6种皮革的全面装饰。座椅采用HD36泡沫,可选中等或高密度,座椅高度44厘米,深度41厘米。外壳底座滑动件采用改性尼龙PA6/PA66涂层的铸铝,外壳厚度为10毫米。原产国为意大利。产品ID:SWC-100/SWC-110。

问题3:如何表格形式展示结果

以上是许多开发人员通常会经历的迭代prompt开发的简短示例。像上一章中所演示的那样,prompt的编写应该保持清晰和明确,并在必要时给模型一些思考时间。在这些要求的基础上,通常值得首先尝试编写 prompt ,看看会发生什么,然后从那里开始迭代地完善 prompt,以逐渐接近所需的结果。因此,许多成功的Prompt都是通过这种迭代过程得出的。下面展示一个更复杂的prompt示例,可能会让大家对ChatGPT的能力有更深入的了解。

这里添加了一些额外的说明,要求它抽取信息并组织成表格,并指定表格的列、表名和格式,还要求它将所有内容格式化为可以在网页使用的 HTML。

优化后的Prompt:

# 要求它抽取信息并组织成表格,并指定表格的列、表名和格式
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。

根据```标记的技术说明书中提供的信息,编写一个产品描述。

该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。

在描述末尾,包括技术规格中每个7个字符的产品ID。

在描述之后,包括一个表格,提供产品的尺寸。表格应该有两列。第一列包括尺寸的名称。第二列只包括英寸的测量值。

给表格命名为“产品尺寸”。

将所有内容格式化为可用于网站的HTML格式。将描述放在
元素中。

技术规格:```{fact_sheet_chair}```
"""

response = get_completion(prompt)
print(response)

输出结果如下:


中世纪风格办公家具系列 - 椅子


这款椅子是中世纪风格办公家具系列的一部分,适用于家庭或商业场所。它有多种外壳颜色和底座涂层可选,可选塑料前后靠背装饰或10种面料和6种皮革的全面装饰。椅子可带或不带扶手,底座涂层选项为不锈钢、哑光黑色、光泽白色或铬。它符合合同使用资格,是一款高品质的办公家具。


该椅子的结构是五个轮子的塑料涂层铝底座,气动椅子调节,方便升降。座椅采用HD36泡沫,可选两种座椅泡沫密度:中等(1.8磅/立方英尺)或高(2.8磅/立方英尺)。外壳底座滑动件采用改性尼龙PA6/PA66涂层的铸铝,外壳厚度为10毫米。该椅子的原产国是意大利。


产品ID:SWC-100





  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
  
    
    
  
产品尺寸
宽度20.87英寸
深度20.08英寸
高度31.50英寸
座椅高度17.32英寸
座椅深度16.14英寸

将内容以html方式存储和打开。如果是 notebook,可以如下直接IPython Notebook直接展示:

# 表格是以 HTML 格式呈现的,加载出来
from IPython.display import display, HTML

display(HTML(response))

结果如下:


小结

总之,编写 prompt 的思路就是先有一个简单的版本,然后在迭代中优化!后续会以文本摘要、文本推断、文本转换、文本拓写和聊天机器人为例具体说明如何编写对应的 prompt,敬请留意。

进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。



阅读至此了,分享、点赞、在看三选一吧🙏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/155995
 
163 次点击