原教程: ChatGPT Prompt Engineering for Developers
中文翻译: 吴恩达 x OpenAI的Prompt Engineering课程专业翻译版
中英字幕: 《ChatGPT提示工程》非官方版中英双语字幕
本文是对ChatGPT Prompt Engineering for Developers课程内容的总结归档,另外课程中的英文Prompt也翻译为中文,方便理解和学习。
原则一:清楚和具体的指示
策略1:使用分隔符
三重引号: """
三重反引号: ```
三重破折号: ---
尖括号: <>
XML标签: <tag> </tag>
1 2 3 4 5 6 7 8 9 10 11 12 13 text = f""" 你应该尽可能清晰和具体地表达你希望模型做什么。\ 这将引导模型朝着期望的输出方向,\ 并减少收到无关或错误回应的机会。不要把写清晰的提示和写短的提示混淆。\ 在许多情况下,更长的提示为模型提供了更多的清晰度和上下文,\ 这可以导致更详细和相关的输出。 """ prompt = f""" 将由三重反引号括起的文本总结为一句话。 ```{text} ``` """ response = get_completion(prompt) print (response)
策略2:要求结构化输出
1 2 3 4 5 6 7 prompt = f""" 生成一个包含三个虚构书名以及它们的作者和类型的列表。 以JSON格式提供,包含以下键: book_id, title, author, genre. """ response = get_completion(prompt) print (response)
策略3:检查条件是否满足检查完成任务所需的假设
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 text_1 = f""" 做一杯茶很简单!首先,你需要烧一些开水。在这个过程中,\ 拿一个杯子,放入一个茶包。一旦水热了,就把它倒在茶包上。\ 让它坐一会儿,让茶可以浸泡。几分钟后,取出茶包。如果你\ 喜欢,可以加一些糖或牛奶调味。\ 就这样!你就有了一杯美味的茶可以享用了。 """ prompt = f""" 你将得到由三重反引号括起的文本。 如果它包含一系列的指示,\ 将这些指示重写为以下格式: 步骤1 - ... 步骤2 - ... ... 步骤N - ... 如果文本中没有包含一系列的指示,\ 那么只需写\"没有提供步骤。\" '''{text_1} ''' """ response = get_completion(prompt) print ("对于文本1的完成:" )print (response)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 text_2 = f""" 今天阳光明媚,鸟儿在歌唱。这是一个美好的日子,适合在公园散步。花儿在盛开,\ 树木在微风中轻轻摇曳。人们都出来了, 享受着美好的天气。有些人在野餐,有些人在玩游戏,或者只是在草地上放松。这是一个完美的日子,可以在户外度过,欣赏大自然的美丽。 """ prompt = f""" 你将得到由三重引号括起的文本。 如果它包含一系列的指示,\ 将这些指示重写为以下格式: 步骤1 - ... 步骤2 - ... ... 步骤N - ... 如果文本中没有包含一系列的指示,\ 那么只需写\"没有提供步骤。\" '''{text_2} ''' """ response = get_completion(prompt) print ("对于文本2的完成:" )print (response)
策略4:少样本提示。
1 2 3 4 5 6 7 8 9 10 11 12 13 prompt = f""" 你的任务是以一致的风格回答。 <child>: 教我什么是耐心。 <grandparent>: 深刻的河谷是由一股温和的泉水流出的;\ 宏伟的交响乐源于一个单音;\ 最复杂的挂毯始于一根孤独的线。 <child>: 教我什么是韧性。 """ response = get_completion(prompt) print (response)
原则二:给模型时间”思考”
策略1:明确完成任务所需的步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 text = f""" 在一个迷人的村庄里,兄妹杰克和吉尔开始了\ 从山顶井里取水的任务。他们爬山时,欢快地唱歌,不幸的是\ 杰克在一块石头上绊倒,滚下了山,吉尔也跟着他。\ 尽管有些破碎,但这对兄妹回到家中,得到了\ 安慰的拥抱。尽管发生了这样的事故,\ 他们的冒险精神仍然未减,他们\ 继续兴奋地探索。 """ prompt_1 = f""" 执行以下操作: 1 - 用一句话总结以下由三重反引号\ 括起的文本。 2 - 将摘要翻译成法语。 3 - 列出法语摘要中的每个名字。 4 - 输出一个包含以下\ 键的json对象:french_summary, num_names。 用换行符分隔你的答案。 文本: ```{text} ``` """ response = get_completion(prompt_1) print ("示例 1 的完成情况:" )print (response)
要求以指定格式输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 prompt_2 = f""" 你的任务是执行以下操作: 1 - 用一句话总结以下由<>括起的文本。 2 - 将摘要翻译成法语。 3 - 列出法语摘要中的每个名字。 4 - 输出一个包含以下键的json对象:french_summary, num_names。 使用以下格式: 文本: <需要总结的文本> 摘要: <摘要> 翻译: <摘要的翻译> 名字: <意大利语摘要中的名字列表> 输出的 JSON: <包含摘要和 num_names 的 json> 文本: <{text} > """ response = get_completion(prompt_2) print ("\n示例 2 的完成情况:" )print (response)
策略2:在草率得出结论之前,要求模型自行找出解决方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 prompt = f""" 判断学生的解答是否正确。 问题: 我正在建设一个太阳能发电设施,我需要\ 帮助计算财务问题。 - 土地每平方英尺100美元 - 我可以以每平方英尺250美元的价格购买太阳能电池板 - 我谈判了一份维护合同,每年将花费我10万美元,以及每平方英尺10美元的额外费用 第一年运营的总成本作为平方英尺数量的函数是多少。 学生的解答: 设x为安装设施的面积(平方英尺)。 成本: 1. 土地成本:100x 2. 太阳能电池板成本:250x 3. 维护成本:100,000 + 10x 总成本:100x + 250x + 100,000 + 10x = 360x + 100,000 """ response = get_completion(prompt) print ("学生解答的判断:" )print (response)
注意,学生的解答实际上是不正确的。
我们可以通过指导模型先自己解决问题来修复这个问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 prompt = f""" 你的任务是判断学生的解答是否正确。 为了解决这个问题,请按照以下步骤操作: - 首先,自己解决这个问题。 - 然后,将你的解答与学生的解答进行比较,评估学生的解答是否正确。 - 在你自己做完这个问题之前,不要判断学生的解答是否正确。 使用以下格式: 问题: ''' 这里是问题 ''' 学生的解答: ''' 这里是学生的解答 ''' 实际的解答: ''' 解答步骤和你的解答在这里 ''' 学生的解答是否与刚刚计算出的实际解答相同: ''' 是或否 ''' 学生的成绩: ''' 正确或错误 ''' 问题: ''' 我正在建设一个太阳能发电设施,我需要帮助计算财务问题。 - 土地每平方英尺100美元 - 我可以以每平方英尺250美元的价格购买太阳能电池板 - 我谈判了一份维护合同,每年将花费我10万美元,以及每平方英尺10美元的额外费用 第一年运营的总成本作为平方英尺数量的函数是多少。 ''' 学生的解答: ''' 设x为安装设施的面积(平方英尺)。 成本: 1. 土地成本:100x 2. 太阳能电池板 成本:250x 3. 维护成本:100,000 + 10x 总成本:100x + 250x + 100,000 + 10x = 360x + 100,000 ''' 实际的解答: """ response = get_completion(prompt) print ("实际解答:" )print (response)
模型的缺陷:
幻觉
1 2 3 4 5 6 prompt = f""" 告诉我关于Boie的AeroGlide UltraSlim智能牙刷的信息 """ response = get_completion(prompt) print ("关于Boie的AeroGlide UltraSlim智能牙刷的信息:" )print (response)
对提示进行迭代(Iterative Prompt Development)
🎯迭代流程:想法 → 实现(代码/数据) → 实验结果 → 错误分析 → 重复
提示指南
清晰且具体
分析为什么结果没有得到期望的输出
精炼想法和提示
重复
迭代过程
尝试某些操作
分析结果为何不符合你的期望
明确指示,给予更多的思考时间
用一批例子来精炼提示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 fact_sheet_chair = """ 概览 - 是一系列美丽的中世纪风格办公家具的一部分, 包括文件柜、书桌、书架、会议桌等。 - 提供多种外壳颜色和底座饰面选项。 - 提供塑料背面和前面的布艺(SWC-100) 或全布艺(SWC-110)在10种布艺和6种皮革选项中选择。 - 底座饰面选项有:不锈钢、哑光黑色、 光亮白色或铬。 - 椅子可选择有或无扶手。 - 适合家庭或商业环境。 - 适合合同使用。 构造 - 5轮塑料涂层铝底座。 - 气动椅子调节,方便升降。 尺寸 - 宽度 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 2 3 4 5 6 7 8 9 10 11 prompt = f""" 你的任务是帮助营销团队根据技术规格表创建一个产品的 零售网站描述。 根据在由三重反引号括起的技术规格中提供的信息 编写产品描述。 技术规格:```{fact_sheet_chair} ``` """ response = get_completion(prompt) print (response)
错误分析
问题 1. 文本过长
1 2 3 4 5 6 7 8 9 10 11 12 13 prompt = f""" 你的任务是帮助营销团队根据技术规格表创建一个产品的 零售网站描述。 根据在由三重反引号括起的技术规格中提供的信息 编写产品描述。 最多使用50个词。 技术规格:```{fact_sheet_chair} ``` """ response = get_completion(prompt) print (response)
问题 2. 文本关注了错误的细节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 prompt = f""" 你的任务是帮助营销团队根据技术规格表创建一个产品的 零售网站描述。 根据在由三重反引号括起的技术规格中提供的信息 编写产品描述。 描述面向家具零售商, 所以应该具有技术性质,并关注产品的构造材料。 最多使用50个词。 技术规格:```{fact_sheet_chair} ``` """ response = get_completion(prompt) print (response)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 prompt = f""" 你的任务是帮助营销团队根据技术规格表创建一个产品的 零售网站描述。 根据在由三重反引号括起的技术规格中提供的信息 编写产品描述。 描述面向家具零售商, 所以应该具有技术性质,并关注产品的构造材料。 在描述的最后,包括技术规格中的每个7字符 产品ID。 最多使用50个词。 技术规格:```{fact_sheet_chair} ``` """ response = get_completion(prompt) print (response)
问题 3. 描述需要一个尺寸表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 prompt = f""" 你的任务是帮助营销团队根据技术规格表创建一个产品的 零售网站描述。 根据在由三重反引号括起的技术规格中提供的信息 编写产品描述。 描述面向家具零售商, 所以应该具有技术性质,并关注产品的构造材料。 在描述的最后,包括技术规格中的每个7字符 产品ID。 在描述之后,包括一个给出产品尺寸的表格。表格应有两列。 在第一列中包括尺寸的名称。 在第二列中只包括英寸的测量。 给表格标题为'产品尺寸'。 将所有内容格式化为可在网站中使用的HTML。 将描述放在<div>元素中。 技术规格:```{fact_sheet_chair} ``` """ response = get_completion(prompt) print (response)
案例一:总结文字(Summarizing)
需要总结的文本
1 2 3 4 5 6 7 8 prod_review = """ 为我女儿的生日买了这个熊猫毛绒玩具,\ 她非常喜欢,带着它去处处。它很软,\ 超级可爱,脸上的表情看起来很友好。不过我觉得\ 我付的钱买到的东西有点小。我觉得可能有\ 其他同样价格但更大的选项。它比预期的到货日期早了一天,\ 所以我在给她之前自己玩了一下。 """
用词/句/字符限制进行总结
1 2 3 4 5 6 7 8 9 10 prompt = f""" 你的任务是生成一个电子商务网站的产品评论的简短总结。 总结下面由三重反引号括起的评论,最多用30个词。 评论:```{prod_review} ``` """ response = get_completion(prompt) print (response)
总结关注运输和交货的评论
1 2 3 4 5 6 7 8 9 10 11 prompt = f""" 你的任务是生成一个电子商务网站的产品评论的简短总结,以便给予\ 运输部门反馈。 总结下面由三重反引号括起的评论,最多用30个词,并关注任何提及产品运输和交货的方面。 评论:```{prod_review} ``` """ response = get_completion(prompt) print (response)
总结关注价格和价值的评论
1 2 3 4 5 6 7 8 9 10 11 prompt = f""" 你的任务是生成一个电子商务网站的产品评论的简短总结,以便给予\ 负责确定产品价格的定价部门反馈。 总结下面由三重反引号括起的评论,最多用30个词,并关注任何与价格和感知价值相关的方面。 评论:```{prod_review} ``` """ response = get_completion(prompt) print (response)
尝试"提取"而不是"总结"
1 2 3 4 5 6 7 8 9 10 prompt = f""" 你的任务是从电子商务网站的产品评论中提取相关信息,以便给予运输部门反馈。 从下面由三重引号括起的评论中提取与运输和交货相关的信息。限制为30个词。 评论:```{prod_review} ``` """ response = get_completion(prompt) print (response)
总结多个产品评论
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 review_1 = prod_review review_2 = """ 我需要一个漂亮的卧室灯,这个灯还有额外的存储空间,价格也不高。 快速到货 - 2天就到了。灯的拉绳在运输过程中断了,公司愉快地寄来了一个新的。也在几天内到了。 很容易组装。然后我发现缺了一个零件,所以我联系了他们的客服,他们很快就给我寄来了缺失的零件! 看起来这是一家非常关心他们的客户和产品的公司。 """ review_3 = """ 我的牙科卫生师推荐我使用电动牙刷, 这就是我为什么会买这个。到目前为止,电池寿命似乎相当令人印象深刻。 在初始充电和第一周内插入充电器以调整电池后, 我已经拔掉了充电器,并在过去的3周内每天刷两次牙,都是用同一次充电。 但是牙刷头太小了。我见过的婴儿牙刷比这个还大。 我希望头部更大,刷毛长度不同,以便更好地进入牙齿之间,因为这个做不到。 总的来说,如果你能以50美元左右的价格买到这个,那是个好交易。 制造商的替换头相当贵,但你可以买到价格更合理的通用品牌。 这款牙刷让我感觉每天都去过牙医。我的牙齿感觉闪闪发光的干净! """ review_4 = """ 所以,他们在11月份还有17件套系统的季节性销售,价格大约在49美元左右, 大约半价,但是出于某种原因(称之为价格欺诈)在12月的第二周, 同样的系统的价格都涨到了70-89美元之间。而11件套系统的价格也从之前的销售价格29美元涨了大约10美元左右。 所以看起来还行,但如果你看底座,刀片锁定的部分看起来不如几年前的版本好, 但我打算对它非常温柔(例如,我先在搅拌机中粉碎非常硬的物品,如豆子、冰块、大米等, 然后在我想要的份量中将它们在搅拌机中粉碎,然后换用搅拌刀片进行更细的磨粉, 并在制作奶昔时先使用交叉切割刀片,然后如果我需要它们更细/少浆糊,我会使用平刀片)。 制作奶昔的特别提示,细切并冻结你打算使用的水果和蔬菜(如果使用菠菜-轻 炖软菠菜然后冻结直到准备使用-如果制作冰糕,使用小到中等大小的食品处理器) 这样你就可以避免添加太多的冰,如果有的话-在制作你的奶昔时。 大约一年后,电机开始发出奇怪的噪音。 我打电话给客服,但保修期已经过了,所以我不得不再买一个。 FYI:这类产品的整体质量已经下降,所以他们有点依赖品牌认知度和消费者忠诚度来维持销售。大约两天就收到了。 """ reviews = [review_1, review_2, review_3, review_4]
1 2 3 4 5 6 7 8 9 10 11 for i in range (len (reviews)): prompt = f""" 你的任务是生成一个电子商务网站的产品评论的简短总结。 总结下面由三重反引号括起的评论,最多用20个词。 评论:```{reviews[i]} ``` """ response = get_completion(prompt) print (i, response, "\n" )
案例二:推理(Inferring)
产品评论文本
1 2 3 4 5 6 lamp_review = """ 我需要一个漂亮的灯放在我的卧室,这个灯有额外的存储空间,价格也不高。\ 收到货很快。在运输过程中,灯的绳子断了,公司很高兴地送来了一个新的。\ 几天内就收到了。很容易组装。我缺了一个零件,所以我联系了他们的支持,他们很快就给我寄来了缺失的零件!\ Lumina在我看来是一个非常好的公司,他们关心他们的客户和产品!! """
判断情绪(积极/消极)
1 2 3 4 5 6 7 8 prompt = f""" 以下产品评论的情绪是什么,\ 评论由三重反引号括起? 评论文本:'''{lamp_review} ''' """ response = get_completion(prompt) print (response)
1 2 3 4 5 6 7 8 9 10 prompt = f""" 以下产品评论的情绪是什么,\ 评论由三重反引号括起? 用一个词给出你的答案,要么是"积极",要么是"消极"。 评论文本:'''{lamp_review} ''' """ response = get_completion(prompt) print (response)
识别情绪的类型
1 2 3 4 5 6 7 8 prompt = f""" 识别出评论作者表达的一系列情绪。列表中的项目不超过\ 五个。将你的答案格式化为由逗号分隔的小写单词列表。 评论文本:'''{lamp_review} ''' """ response = get_completion(prompt) print (response)
识别愤怒
1 2 3 4 5 6 7 8 9 prompt = f""" 评论作者是否表达了愤怒?\ 评论由三重反引号括起。 \ 给出你的答案,要么是是,要么是否。 评论文本:'''{lamp_review} ''' """ response = get_completion(prompt) print (response)
从客户评论中提取产品和公司名称
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 prompt = f""" 从评论文本中识别以下项目: - 评论者购买的商品 - 制造该商品的公司 评论由三重反引号括起。 \ 将你的回答格式化为一个JSON对象,\ "Item"和"Brand"作为键。 如果信息不存在,使用"unknown" \ 作为值。 使你的回答尽可能简短。 评论文本:'''{lamp_review} ''' """ response = get_completion(prompt) print (response)
同时进行多项任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 prompt = f""" 从评论文本中识别以下项目: - 判断情绪(积极或消极) - 评论者是否表达了愤怒?(真或假) - 评论者购买的商品 - 制造商品的公司 评论以三重反引号为界限。\ 将你的回答格式化为一个JSON对象,\ "Sentiment", "Anger", "Item" 和 "Brand" 作为键。 如果信息不存在,使用 "unknown" \ 作为值。 尽可能简短地回答。 将 "Anger" 的值格式化为布尔值。 评论文本:'''{lamp_review} ''' """ response = get_completion(prompt) print (response)
推断主题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 story = """ 在政府最近进行的一项调查中, 公共部门的员工被要求对他们所在的部门 进行满意度评价。 结果显示,NASA是最受欢迎的 部门,满意度评分为95%。 一位NASA的员工,John Smith,对这个发现进行了评论, 他说:"我并不惊讶NASA会名列前茅。 这是一个有着出色的人才和 难以置信的机会的工作场所。我为能成为 这样一个创新组织的一部分而感到自豪。" 这个结果也受到了NASA管理团队的欢迎, 总监Tom Johnson表示:"我们很高兴 听到我们的员工对在NASA的工作感到满意。 我们有一个才华横溢且全心投入的团队,他们不懈努力 实现我们的目标,看到他们的辛勤工作得到回报真是太好了。" 调查还显示,社会保障局的满意度 评分最低,只有45%的员工表示他们对自己的工作感到满意。政府已经承诺 解决员工在调查中提出的问题,并 致力于提高所有部门的工作满意度。 """
推断5个主题
1 2 3 4 5 6 7 8 9 10 11 12 prompt = f""" 确定以下文本中正在讨论的五个主题, 文本以三重反引号为界限。 每个项目长度为一到两个词。 将你的回答格式化为一个由逗号分隔的项目列表。 文本样本:'''{story} ''' """ response = get_completion(prompt) print (response)
1 2 3 4 topic_list = [ "nasa" , "地方政府" , "工程" , "员工满意度" , "联邦政府" ]
为特定主题制作新闻警报
1 2 3 4 5 6 7 8 9 10 11 12 13 14 prompt = f""" 确定以下主题列表中的每个项目是否在下面的文本中是一个主题, 文 本以三重反引号为界限。 将你的答案以列表形式给出,每个主题对应0或1。 主题列表:{", " .join(topic_list)} 文本样本:'''{story} ''' """ response = get_completion(prompt) print (response)
1 2 3 topic_dict = {i.split(': ' )[0 ]: int (i.split(': ' )[1 ]) for i in response.split(sep='\n' )} if topic_dict['nasa' ] == 1 : print ("警告:新的NASA故事!" )
案例三:转换(Transforming)
翻译
ChatGPT接受了多种语言的训练。这使得该模型具有翻译能力。以下是一些如何使用这种能力的例子。
1 2 3 4 5 6 prompt = f""" 将以下英文文本翻译为西班牙语: \ ```Hi, I would like to order a blender``` """ response = get_completion(prompt) print (response)
1 2 3 4 5 6 prompt = f""" 告诉我这是什么语言: ```Combien coûte le lampadaire?``` """ response = get_completion(prompt) print (response)
1 2 3 4 5 6 7 prompt = f""" 将以下文本翻译为法语、西班牙语 和英语海盗语: \ ```I want to order a basketball``` """ response = get_completion(prompt) print (response)
1 2 3 4 5 6 prompt = f""" 将以下文本翻译为西班牙语的正式和非正式形式: 'Would you like to order a pillow?' """ response = get_completion(prompt) print (response)
通用翻译器
假设你负责一家大型跨国电商公司的IT部门。用户用他们的母语向你发送IT问题。你的员工来自世界各地,只会说他们的母语。你需要一个通用翻译器!
1 2 3 4 5 6 7 user_messages = [ "La performance du système est plus lente que d'habitude." , "Mi monitor tiene píxeles que no se iluminan." , "Il mio mouse non funziona" , "Mój klawisz Ctrl jest zepsuty" , "我的屏幕在闪烁" ]
1 2 3 4 5 6 7 8 9 10 11 for issue in user_messages: prompt = f"告诉我这是什么语言: ```{issue} ```" lang = get_completion(prompt) print (f"原始信息 ({lang} ): {issue} " ) prompt = f""" 将以下文本翻译为英语 \ 和韩语: ```{issue} ``` """ response = get_completion(prompt) print (response, "\n" )
语气转换
写作可以根据预期的受众而变化。ChatGPT可以产生不同的语气。
1 2 3 4 5 6 prompt = f""" 将以下的俚语翻译为商业信函的形式: 'Dude, This is Joe, check out this spec on this standing lamp.' """ response = get_completion(prompt) print (response)
格式转换
ChatGPT可以在格式之间进行转换。提示应描述输入和输出的格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 data_json = { "resturant employees" :[ {"name" :"Shyam" , "email" :"[email protected] " }, {"name" :"Bob" , "email" :"[email protected] " }, {"name" :"Jai" , "email" :"[email protected] " } ]} prompt = f""" 将以下的python字典从JSON格式转换为带有列标题和标题的HTML \ 表格: {data_json} """ response = get_completion(prompt) print (response)
1 2 from IPython.display import display, Markdown, Latex, HTML, JSONdisplay(HTML(response))
拼写检查/语法检查。
以下是一些常见的语法和拼写问题以及LLM的回应。
要向LLM指示你希望它校对你的文本,你可以指示模型进行’proofread’或’proofread and correct’。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 text = [ "The girl with the black and white puppies have a ball." , "Yolanda has her notebook." , "Its going to be a long day. Does the car need it’s oil changed?" , "Their goes my freedom. There going to bring they’re suitcases." , "Your going to need you’re notebook." , "That medicine effects my ability to sleep. Have you heard of the butterfly affect?" , "This phrase is to cherck chatGPT for speling abilitty" ] for t in text: prompt = f"""校对并纠正以下文本 并重写纠正后的版本。如果你没有找到 任何错误,只需说"No errors found"。不要在文本周围 使用任何标点符号: ```{t} ```""" response = get_completion(prompt) print (response)
1 2 3 4 5 6 7 8 9 10 11 12 13 text = f""" Got this for my daughter for her birthday cuz she keeps taking \ mine from my room. Yes, adults also like pandas too. She takes \ it everywhere with her, and it's super soft and cute. One of the \ ears is a bit lower than the other, and I don't think that was \ designed to be asymmetrical. It's a bit small for what I paid for it \ though. I think there might be other options that are bigger for \ the same price. It arrived a day earlier than expected, so I got \ to play with it myself before I gave it to my daughter. """ prompt = f"校对并纠正这个评论: ```{text} ```" response = get_completion(prompt) print (response)
1 2 3 4 from redlines import Redlinesdiff = Redlines(text,response) display(Markdown(diff.output_markdown))
1 2 3 4 5 6 7 8 prompt = f""" 校对并纠正这个评论。使它更有吸引力。 确保它遵循APA风格指南并针对高级读者。 以markdown格式输出。 文本: ```{text} ``` """ response = get_completion(prompt) display(Markdown(response))
案例四:扩展(Expanding)
在这个课程中,你将生成针对每个客户评论的定制客户服务邮件。
定制自动回复客户邮件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 sentiment = "negative" review = f""" 所以,他们在11月份的季节性销售中仍然有17件套装系统, 大约49美元,大约半价,但是出于某种原因(称之为价格欺诈) 在12月的第二周,同样的系统的价格都涨到了大约70-89美元之间。 而11件套装系统的价格也从之前的销售价格29美元涨了大约10美元左右。 所以它看起来还可以,但是如果你看看底座,那部分 刀片锁定的地方看起来并不如几年前的版本那么好,但是我 打算对它非常温柔(例如,我先在 搅拌机中粉碎非常硬的物品,如豆子、冰块、大米等,然后在我想要的份量中 在搅拌机中将它们粉碎成我想要的份量,然后切换到搅拌 刀片以获得更细的面粉,当制作冰沙时,我首先使用交叉切割刀片 然后如果我需要它们更细/少浆糊的话,我会使用平刀片)。制作冰沙的特别提示, 精细切割并冷冻你打算使用的水果和 蔬菜(如果使用菠菜-轻炖软化菠菜然后冷冻直到准备使用-如果制作 冰糕,使用一个小到中等大小的食品处理器) 这样你就可以避免添加太多的冰,如果有的话-当制作你的冰沙时。 大约一年后,电机开始发出奇怪的噪音。 我打电话给客户服务,但是保修期已经过了, 所以我不得不再买一个。FYI:这类产品的整体质量已经下降, 所以他们有点依赖品牌认知和 消费者的忠诚度来维持销售。大约 两天就收到了。 """
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 prompt = f""" 你是一个客户服务AI助手。 你的任务是向一位重要客户发送电子邮件回复。 给出由```界定的客户电子邮件, 生成一个回复,感谢客户的评论。 如果情绪是积极 的或中性的,感谢他们的评论。 如果情绪是消极的,道歉并建议他们可以联系客户服务。 确保使用评论中的具体细节。 以简洁、专业的语气写作。 以`AI客户代理`签署邮件。 客户评论:```{review} ``` 评论情绪:{sentiment} """ response = get_completion(prompt) print (response)
提醒模型使用客户电子邮件中的细节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 prompt = f""" 你是一个客户服务AI助手。 你的任务是向一位重要客户发送电子邮件回复。 给出由```界定的客户电子邮件, 生成一个回复,感谢客户的评论。 如果情绪是积极的或中性的,感谢他们的评论。 如果情绪是消极的,道歉并建议他们可以联系客户服务。 确保使用评论中的具体细节。 以简洁、专业的语气写作。 以`AI客户代理`签署邮件。 客户评论:```{review} ``` 评论情绪:{sentiment} """ response = get_completion(prompt, temperature=0.7 ) print (response)
案例五:聊天机器人
1 2 3 4 5 messages = [ {'role' :'system' , 'content' :'你是一个会说莎士比亚语的助手。' }, {'role' :'user' , 'content' :'给我讲个笑话' }, {'role' :'assistant' , 'content' :'为什么鸡要过马路' }, {'role' :'user' , 'content' :'我不知道' } ]
1 2 response = get_completion_from_messages(messages, temperature=1 ) print (response)
1 2 3 4 5 messages = [ {'role' :'system' , 'content' :'你是友好的聊天机器人。' }, {'role' :'user' , 'content' :'嗨,我叫Isa' } ] response = get_completion_from_messages(messages, temperature=1 ) print (response)
1 2 3 4 5 messages = [ {'role' :'system' , 'content' :'你是友好的聊天机器人。' }, {'role' :'user' , 'content' :'是的,你能提醒我,我的名字是什么?' } ] response = get_completion_from_messages(messages, temperature=1 ) print (response)
1 2 3 4 5 6 7 8 messages = [ {'role' :'system' , 'content' :'你是友好的聊天机器人。' }, {'role' :'user' , 'content' :'嗨,我叫Isa' }, {'role' :'assistant' , 'content' : "嗨,Isa!很高兴认识你。\ 有什么我可以帮你的吗?" },{'role' :'user' , 'content' :'是的,你能提醒我,我的名字是什么?' } ] response = get_completion_from_messages(messages, temperature=1 ) print (response)
点单机器人
我们可以自动收集用户提示和助手回应,以建立一个点单机器人。点单机器人将在披萨餐厅接受订单。
1 2 3 4 5 6 7 8 9 10 11 12 def collect_messages (_ ): prompt = inp.value_input inp.value = '' context.append({'role' :'user' , 'content' :f"{prompt} " }) response = get_completion_from_messages(context) context.append({'role' :'assistant' , 'content' :f"{response} " }) panels.append( pn.Row('User:' , pn.pane.Markdown(prompt, width=600 ))) panels.append( pn.Row('Assistant:' , pn.pane.Markdown(response, width=600 , style={'background-color' : '#F6F6F6' }))) return pn.Column(*panels)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import panel as pn pn.extension() panels = [] context = [ {'role' :'system' , 'content' :""" 你是OrderBot,一个自动收集披萨餐厅订单的服务。 \ 你首先向客户问好,然后收集订单, \ 然后询问是自取还是送货。 \ 你等待收集整个订单,然后总结它并最后检查一次 \ 如果客户想要添加其他东西。 \ 如果是送货,你会询问地址。 \ 最后你收集付款。\ 确保澄清所有选项,额外的和大小以唯一 \ 从菜单中识别出项目。\ 你以简短,非常会话友好的风格回应。 \ 菜单包括 \ pepperoni pizza 12.95, 10.00, 7.00 \ cheese pizza 10.95, 9.25, 6.50 \ eggplant pizza 11.95, 9.75, 6.75 \ fries 4.50, 3.50 \ greek salad 7.25 \ Toppings: \ extra cheese 2.00, \ mushrooms 1.50 \ sausage 3.00 \ canadian bacon 3.50 \ AI sauce 1.50 \ peppers 1.00 \ Drinks: \ coke 3.00, 2.00, 1.00 \ sprite 3.00, 2.00, 1.00 \ bottled water 5.00 \ """ } ] inp = pn.widgets.TextInput(value="Hi" , placeholder='Enter text here…' ) button_conversation = pn.widgets.Button(name="Chat!" ) interactive_conversation = pn.bind(collect_messages, button_conversation) dashboard = pn.Column( inp, pn.Row(button_conversation), pn.panel(interactive_conversation, loading_indicator=True , height=300 ), ) dashboard
1 2 3 4 5 6 7 8 9 messages = context.copy() messages.append( {'role' :'system' , 'content' :'创建上一个食品订单的json摘要。为每个项目明细价格\ 字段应为1) 披萨,包括大小 2) 配料列表 3) 饮料列表,包括大小 4) 侧菜列表,包括大小 5)总价格 ' }, ) response = get_completion_from_messages(messages, temperature=0 ) print (response)
如果您喜欢此博客或觉得它对您有用,则欢迎对此发表评论。 也欢迎您分享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与我联系以将其删除。 谢谢 !