1. 什么是提示工程
提示工程帮助用户控制语言模型输出,生成适合的特定需求。
2. 提示工程的原则
2.1.给模型清晰指令:
2.1.1.清晰的指令原则:
以清晰、具体的方式表达需求。
2.1.2.清晰的指令--分隔符
在编写Prompt时,我们可以使用各种标点符号作为“分隔符”,将不同的文本部分区分开来。
eg:给出一段话并要求GPT进行总结,在该示例中我们使用```来作为分隔符。
fromtoolimportget_completiontext="""您应该提供尽可能清晰、具体的指示,以表达您希望模型执行的任务。这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。不要将写清晰的提示词与写简短的提示词混淆。在许多情况下,更长的提示词可以为模型提供更多的清晰度和上下文信息,从而导致更详细和相关的输出。"""#需要总结的文本内容prompt=f"""把用三个反引号括起来的文本总结成一句话。```{text}```"""#指令内容,使用```来分隔指令和待总结的内容response=get_completion(prompt)print(response)#为了获得所需的输出,您应该提供清晰、具体的指示,避免与简短的提示词混淆,并使用更长的提示词来提供更多的清晰度和上下文信息。
2.1.3.清晰的指令--结构化输出
有时候我们需要语言模型给我们一些结构化的输出,而不仅仅是连续的文本。
prompt=f"""请生成包括书名、作者和类别的本虚构的、非真实存在的中文书籍清单,并以JSON格式提供,其中包含以下键:book_id、title、author、genre。"""response=get_completion(prompt)print(response)[{"book_id":1,"title":"幻境之夜","author":"李梦飞","genre":"奇幻小说"},...]
2.1.4.清晰的指令--参考示例
"Few-shot"prompting,即在要求模型执行实际任务之前,给模型一两个已完成的样例,让模型了解我们的要求和期望的输出样式。
利用少样本样例,我们可以轻松“预热”语言模型,让它为新的任务做好准备。这是一个让模型快速上手新任务的有效策略。
eg:我们先给出一个祖孙对话样例,然后要求模型用同样的隐喻风格回答关于“韧性”的问题。
prompt=f"""您的任务是以一致的风格回答问题。<孩子>:请教我何为耐心。<祖父母>:挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。<孩子>:请教我何为韧性。"""response=get_completion(prompt)print(response)#<祖父母>:韧性是一种坚持不懈的品质,就像一棵顽强的树在风雨中屹立不倒。它是面对困难和挑战时不屈不挠的精神,能够适应变化和克服逆境。韧性是一种内在的力量,让我们能够坚持追求目标,即使面临困难和挫折也能坚持不懈地努力。
2.1.5.清晰的指令--角色扮演
当我们使用大模型时,可以让模型充当一个角色,这样模型会更专业更明确的对你的问题进行回复.
比如:我需要你充当一个AI算法面试官的角色,要求你自主的对我进行AI面试过程中常考的面 试题,你可以一次说一个问题,然后我回答完,你再出第二道题
2.1.6.总结
- 什么是提示工程?
- 指不更新模型权重的情况下如何与大模型交互获得所需结果的方法
- 提示工程的原则是什么?
- 清晰的指令、让充足模型“思考”
-
清晰的指令构造技巧?
-
分隔符、结构化输出、参考示例、让模型充当角色
-
2.2.让模型充足思考:
2.2.1.让模型思考原则
2.2.2.让模型思考--指定步骤
下面有段文本,描述了杰克和吉尔的故事,并给出提示词执行以下操作:首先,用一句话概括三个反引号限定的文本。第二,将摘要翻译成英语。第三,在英语摘要中列出每个名称。第四,输出包含以下键的JSON对象:英语摘要和人名个数。要求输出以换行符分隔。
text=f"""在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。他们一边唱着欢乐的歌,一边往上爬,然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。虽然略有些摔伤,但他们还是回到了温馨的家中。尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。"""prompt=f"""1-用一句话概括下面用<>括起来的文本。2-将摘要翻译成英语。3-在英语摘要中列出每个名称。4-输出一个JSON对象,其中包含以下键:English_summary,num_names。请使用以下格式:文本:<要总结的文本>摘要:<摘要>翻译:<摘要的翻译>名称:<英语摘要中的名称列表>输出JSON:<带有English_summary和num_names的JSON>Text:<{text}>"""
eg:结果展示:
prompt:摘要:在一个迷人的村庄里,兄妹杰克和吉尔在山顶井里打水的途中,发生了一场不幸的摔倒意外。尽管受了些许伤,但他们安全回到了温馨的家中,决心继续愉悦地探索。翻译:In a charming village, siblings Jack and Jill, on their way to fetch water from a well on the mountaintop, encountered an unfortunate falling accident. Despite some minor injuries, they safely returned to their cozy home, determined to continue exploring with joy.名称:Jack、JillJSONOutput:{"English_summary":"In a charming village, siblings Jack and Jill, on their way to fetch water from a well on the mountaintop, encountered an unfortunate falling accident. Despite some minor injuries, they safely returned to their cozy home, determined to continue exploring with joy. ","num_names":2}
2.2.2.让模型思考--指导模型求解
在设计 Prompt 时,我们还可以通过明确指导语言模型进行自主思考,来获得更好的效果。
eg:任务背景
假设我们要语言模型判断一个数 学问题的解答是否正确。仅仅提 供问题和解答是不够的,语言模 型可能会匆忙做出错误判断。
可以在 Prompt 中先要求语言模型自己尝 试解决这个问题,思考出自己的解法,然后再与提供的解答进行对比,判断正确性。 这种先让语言模型自主思考的方式,能帮 助它更深入理解问题,做出更准确的判断。
接下来我们会给出一个问题和一份来自学生的解答,要求模型判断解答是否正确:
prompt = f"""判断学生的解决方案是否正确。问题:我正在建造一个太阳能发电站,需要帮助计算财务。土地费用为 100美元/平方英尺我可以以 250美元/平方英尺的价格购买太阳能电池板我已经谈判好了维护合同,每年需要支付固定的10万美元,并额外支付每平方英尺10美元作为平方英尺数的函数,首年运营的总费用是多少。学生的解决方案:设x为发电站的大小,单位为平方英尺。费用:土地费用:100x太阳能电池板费用:250x维护费用:100,000美元+100x总费用:100x+250x+100,000美元+100x=450x+100,000美元"""
答案:
学生的解决方案是正确的。他正确地计算了土地费用、太阳能电池板费用和维护费用,并将它们 相加得到了总费用。
注意:
学生的解决方案实际上是错误的。(维护费用项100x应为10x,总费用450x应为360x*)我们可以通过指导模型先自行找出一个解法来解决这个问题。
prompt = f"""请判断学生的解决方案是否正确,请通过如下步骤解决这个问题:步骤:首先,自己解决问题。然后将您的解决方案与学生的解决方案进行比较,对比计算得到的总费用与学生计算的总费用是否一致,并评估学生的解决方案是否正确。在自己完成问题之前,请勿决定学生的解决方案是否正确。使用以下格式:问题:问题文本学生的解决方案:学生的解决方案文本实际解决方案和步骤:实际解决方案和步骤文本学生计算的总费用:学生计算得到的总费用实际计算的总费用:实际计算出的总费用学生计算的费用和实际计算的费用是否相同:是或否学生的解决方案和实际解决方案是否相同:是或否学生的成绩:正确或不正确问题:我正在建造一个太阳能发电站,需要帮助计算财务。- 土地费用为每平方英尺100美元- 我可以以每平方英尺250美元的价格购买太阳能电池板- 我已经谈判好了维护合同,每年需要支付固定的10万美元,并额外支付每平方英尺10美元;作为平方英尺数的函数,首年运营的总费用是多少。学生的解决方案:设x为发电站的大小,单位为平方英尺。费用:1. 土地费用:100x美元2. 太阳能电池板费用:250x美元3. 维护费用:100,000+100x=10万美元+10x美元总费用:100x美元+250x美元+10万美元+100x美元=450x+10万美元实际解决方案和步骤:"""
实际解决方案和步骤:1. 土地费用:每平方英尺100美元,所以总费用为100x美元。2. 太阳能电池板费用:每平方英尺250美元,所以总费用为250x美元。3. 维护费用:固定费用为10万美元,额外费用为每平方英尺10美元,所以总费用为10万美元+10x美元。4. 总费用:将上述三项费用相加,得到总费用为100x美元+250x美元+10万美元+10x美元=360x+10万美元。学生计算的总费用:450x+10万美元实际计算的总费用:360x+10万美元学生计算的费用和实际计算的费用是否相同:否学生的解决方案和实际解决方案是否相同:否学生的成绩:不正确
3.1.3.思考
3. 迭代优化
3.1.1.基本步骤:
- 初步想法:先编写初版 Prompt,清晰明确
- 输入模型:给模型充足思考时间。
- 结果检查:分析 Prompt 做出改进。
- 循环迭代:适合应用的 Prompt。
本节以产品说明书生成营销文案为例,展示 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}```"""
初始结果:
产品描述:我们自豪地推出美丽的中世纪风格办公家具系列,其中包括文件柜、办公桌、书柜、会议桌等。我们的产品采用多种 外壳颜色和底座涂层,以满足您的个性化需求。您可以选择塑料前后靠背装饰(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泡沫,为您提供更加舒适的使用体验。我们的产品原产国为意大利,为您提供更加优质的品质保证。
3.1.2.第一次迭代优化:
# 优化后的 Prompt,要求生成描述不多于 50 词prompt = f"""您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。使用最多50个词。技术规格:```{fact_sheet_chair}```"""
中世纪风格办公家具系列,包括文件柜、办公桌、书柜、会议桌等。多种颜色和涂层可选,可带或不带扶手。底座涂层 选项为不锈钢、哑光黑色、光泽白色或铬。适用于家庭或商业场所,符合合同使用资格。意大利制造。
注意:
当在 Prompt 中设置长度限制要求时,语言模型生成的输出长度不总能精确符合要求,但本能控制在可接受的误差 范围内。这是因为 语言模型在计算和判断文本长度时依赖于分词器 ,而分词器在字符统计方面不具备完美精度。目前存在多种方法可以尝试控制语言模型生成输出的长度,比如指定语句数、词数、汉字数等。
3.1.3.第二次迭代优化
# 优化后的 Prompt,说明面向对象,应具有什么性质且侧重于什么方面prompt = f"""您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。在描述末尾,包括技术规格中每个7个字符的产品ID。使用最多50个单词。技术规格: ```{fact_sheet_chair}```"""
这款中世纪风格的办公家具系列包括文件柜、办公桌、书柜和会议桌等,适用于家庭或商业场所。可选多种外壳颜色和 底座涂层,底座涂层选项为不锈钢、哑光黑色、光泽白色或铬。椅子可带或不带扶手,可选塑料前后靠背装饰或10种面 料和6种皮革的全面装饰。座椅采用HD36泡沫,可选中等或高密度,座椅高度44厘米,深度41厘米。外壳底座滑动件 采用改性尼龙PA6/PA66涂层的铸铝,外壳厚度为10毫米。原产国为意大利。产品ID:SWC100/SWC-110。
由此得出结论:
3.1.4.第三次迭代优化
优化3升级操作:添加表格表述
# 要求它抽取信息并组织成表格,并指定表格的列、表名和格式prompt = f"""您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。在描述末尾,包括技术规格中每个7个字符的产品ID。在描述之后,包括一个表格,提供产品的尺寸。表格应该有两列。第一列包括尺寸的名称。第二列只包括英寸的测量值。给表格命名为“产品尺寸”。将所有内容格式化为可用于网站的HTML格式。将描述放在<div>元素中。技术规格:```{fact_sheet_chair}```"""
优化3后的结果
3.1.5.思考
迭代优化的基本步骤?
4. 文本概括
在繁忙的信息时代,面临着海量的文本信息处理的挑战。
大型语言模型(LLM)的文本摘要功能。
节省时间,提高效率,以及精准获取信息。
prod_review = """这个熊猫公仔是我给女儿的生日礼物,她很喜欢,去哪都带着。公仔很软,超级可爱,面部表情也很和善。但是相比于价钱来说,它有点小,我感觉在别的地方用同样的价钱能买到更大的。快递比预期提前了一天到货,所以在送给女儿之前,我自己玩了会。"""
4.1.1.限制输出文本长度
prompt = f"""您的任务是从电子商务网站上生成一个产品评论的简短摘要。请对三个反引号之间的评论文本进行概括,最多30个字。评论: ```{prod_review}```"""
结果展示:
熊猫公仔软可爱,女儿喜欢,但有点小。快递提前一天到货。
4.1.2.设置关键角度侧重
在某些情况下,我们会针对不同的业务场景对文本的侧重会有所不同。例如, 在商品评论文本中,物流部门可能更专注于运输的时效性,商家则更关注价 格和商品质量,而平台则更看重整体的用户体验。
侧重于快递服务
prompt = f"""您的任务是从电子商务网站上生成一个产品评论的简短摘要。请对三个反引号之间的评论文本进行概括,最多30个字,并且侧重在快递服务上。评论: ```{prod_review}```"""
结果展示:
熊猫公仔软可爱,女儿喜欢,但有点小。快递提前一天到货。
侧重于价格与质量
prompt = f"""您的任务是从电子商务网站上生成一个产品评论的简短摘要。请对三个反引号之间的评论文本进行概括,最多30个词汇,并且侧重在产品价格和质量上。评论: ```{prod_review}```"""
结果展示:
可爱的熊猫公仔,质量好但有点小,价格稍高。快递提前到货。
4.1.3.关键信息抽取
prompt = f"""您的任务是从电子商务网站上的产品评论中提取相关信息。请从以下三个反引号之间的评论文本中提取产品运输相关的信息,最多30个词汇。评论: ```{prod_review}```"""
结果展示:
产品运输相关的信息:快递提前一天到货。
4.1.4.思考
5. 文本转换
大语言模型具备强大文本转换能力。
节省时间,提高工作效率。
5.1.1文本翻译
prompt = f"""将以下中文翻译成西班牙语: \```您好,我想订购一个搅拌机。```"""
结果展示:
Hola, me gustaría ordenar una batidora.
识别语种
prompt = f"""请告诉我以下文本是什么语种:```Combien coûte le lampadaire?```"""
结果展示:
这句话是法语。
多语种翻译
prompt = f"""请将以下文本分别翻译成中文、英文、法语和西班牙语:```I want to order a basketball.```"""
结果展示:
中文翻译:我想订购一个篮球。英文翻译:I want to order a basketball.法语翻译:Je veux commander un ballon de basket.西班牙语翻译:Quiero pedir un balón de baloncesto.
5.1.2.语气与写作风格调整
举例说明:
prompt = f"""将以下文本翻译成商务信函的格式:```小老弟,我小羊,上回你说咱部门要采购的显示器是多少寸来着?```"""
结果展示:
尊敬的[收信人姓名/部门],我是[你的姓名],我们部门之前讨论过需要采购显示器的事宜。请问,您能提供一下所需显示器的尺寸信息吗?期待您的回复。谢谢,[你的姓名]
5.1.3.文件格式转换
data_json = { "resturant employees" :[{"name":"Shyam", "email":"shyamjaiswal@gmail.com"},{"name":"Bob", "email":"bob32@gmail.com"},{"name":"Jai", "email":"jai87@gmail.com"}]}
Prompt设计:
prompt = f"""将以下Python字典从JSON转换为HTML表格,保留表格标题和列名:{data_json}"""
5.1.4.拼写及语法纠正
text = [ "The girl with the black and white puppies have a ball.", # The girl has a ball."Yolanda has her notebook.", # ok"Its going to be a long day. Does the car need it’ s oil changed?", # Homonyms"Their goes my freedom. There going to bring they ’ re suitcases.", # Homonyms ]
Prompt设计:
f"""请校对并更正以下文本,注意纠正文本保持原始语种,无需输出原始文本。如果您没有发现任何错误,请说“未发现错误”。例如:输入:I are happy.输出:I am happy.```{text}```"""
结果展示:
0 The girl with the black and white puppies has a ball.1 Yolanda has her notebook.2 It's going to be a long day. Does the car need its oil changed?3 Their goes my freedom. There going to bring their suitcases.
5.1.6.综合样例
text = “I got this for my daughter's birthday because she keeps taking mine frommy room. Yes, adults also like pandas too. She takes it everywhere with her, andit's super soft and cute. However, one of the ears is a bit lower than the other,and I don't think that was designed to be asymmetrical. It's also a bit smallerthan I expected for the price. I think there might be other options that are biggerfor the same price. On the bright side, it arrived a day earlier than expected, so Igot to play with it myself before giving it to my daughter.”
prompt设计:
prompt = f"""针对以下三个反引号之间的英文评论文本,首先进行拼写及语法纠错,然后将其转化成中文,再将其转化成优质淘宝评论的风格,从各种角度出发,分别说明产品的优点与缺点,并进行总结。润色一下描述,使评论更具有吸引力。输出结果格式为:【优点】xxx【缺点】xxx【总结】xxx注意,只需填写xxx部分,并分段输出。将结果输出成Markdown格式。```{text}```"""
结果展示:
【优点】- 超级柔软可爱,女儿生日礼物非常受欢迎。- 成人也喜欢熊猫,我也很喜欢它。- 提前一天到货,让我有时间玩一下。【缺点】- 一只耳朵比另一只低,不对称。- 价格有点贵,但尺寸有点小,可能有更大的同价位选择。【总结】这只熊猫玩具非常适合作为生日礼物,柔软可爱,深受孩子喜欢。虽然价格有点贵,但尺寸有点小,不对称的设计也有点让人失望。如果你想要更大的同价位选择,可能需要考虑其他选项。总的来说,这是一款不错的熊猫玩具,值得购买。
5.1.7.思考