万字长文总结提示词技巧!新加坡首届GPT-4提示工程大赛冠军最新分享
新智元报道
新智元报道
【新智元导读】提示工程已经成为了热门话题,无论是CO-STAR框架构建提示词,使用分隔符将提示词分段,使用LLM护栏创建系统提示,还是仅使用LLM(无需插件或代码)分析数据集,用户都将拥有全新的使用体验。
新加坡(GovTech)举办了首届GPT-4提示工程竞赛,Sheila Teo很幸运地取得了胜利。
具体操作如下:
(C)上下文:提供任务的上下文信息
这有助于LLM了解正在讨论的具体情景,确保其答复具有相关性。
(O)目标:确定你希望LLM执行的任务是什么
明确你的目标有助于LLM把回答的重点放在实现这一具体目标上。
(S)风格:指明你希望LLM使用的写作风格
这可以是某个名人的写作风格,也可以是某个行业的某个专家,如商业分析专家或首席执行官。这将引导LLM以符合你需求的方式和用词做出回复。
(T)语气:确定回复的态度
这可确保LLM的回复与所需的情感或情绪背景产生共鸣。例如,正式的、幽默的、善解人意的等。
(A)受众:确定回复的对象
根据受众(如某一领域的专家、初学者、儿童等)量身定制LLM的回复,确保其在所需的语境中是恰当的、可以理解的。
(R)回复:提供回复格式
这可确保LLM按照下游任务所需的准确格式输出。例如,列表、JSON、专业报告等。大多数LLM应用程序都会以编程方式LLM回复进行下游操作,对于这些应用程序来说,JSON输出格式是最理想的。
介绍Alpha公司革命性的Beta吹风机! - 告别冗长乏味的吹发过程!阿尔法隆重推出贝塔型吹风机,这是我们在护发技术方面的最新创新。 - 超快吹干:得益于先进、强劲的电机,Beta可以将你的吹干时间缩短一半。让你更快做好准备,有更多时间做自己喜欢的事情!
这种输出方式虽然够用,但却非常普通,缺乏必要的细微差别和有针对性的吸引力,无法引起公司受众的共鸣。
#上下文# 我想为我公司的新产品做广告。我的公司名叫Alpha,产品名叫Beta,是一种新型超快吹风机。 #目标# 为我创建一个Facebook帖子,目的是让人们点击产品链接购买它。 #风格# 效仿戴森等宣传类似产品的成功公司的写作风格。 #语气# 有说服力的。 #受众# 我公司在Facebook上的受众通常是老一代人。请针对这部分受众通常对美发产品的要求,量身定制你的帖子。 #回复# Facebook上的帖子,简明扼要而又富有感染力。
用Alpha Beta拥抱轻松优雅--智慧一代的超快吹风机。
使用Alpha Beta,重新找回简单有效的护发乐趣。我们的最新创新产品不仅仅是一款吹风机,它还是一个承诺,为那些热爱生活的人提供快速、轻柔、可靠的头发造型。 - 简单直观:告别复杂的小工具。Alpha Beta为舒适和简便而设计,非常适合那些看中直接、无忧技术的人。 - 省心技术:我们知道你的时间非常宝贵。因此,Alpha Beta可以大大缩短吹干时间,让你有更多时间享受生活的乐趣。使用Alpha Beta,让每一天都成为美好的一天。体验精致与简约的完美融合。
CO-STAR框架指导你有条不紊地向LLM提供有关任务的所有关键信息,确保根据你的需求提供量身定制的优化回复。
2. 使用分隔符将提示词分段
将分隔符用作特殊字符
### === >>> >>>
将<<<CONVERSATIONS>>中每段对话的情绪分类为「积极」或「消极」。给出情感分类,无需任何其他前言文本。
###
对话示例
[Agent]:早上好,有什么能帮你的吗?
[顾客]:这个产品太糟糕了,和广告上说的完全不一样!
[顾客]:我非常失望,希望全额退款。
[Agent]:早上好,有什么可以帮你?
[顾客]:你好,我只想说你们的产品留下了深刻印象。它超出了我的预期!
###
输出示例
「消极」
「积极」
###
<<<
[Agent]:你好,欢迎来到我们的支持中心。有什么可以帮你的吗?
[顾客]:你好!我只是想让你们知道我收到了我的订单,而且太棒了。
[Agent]:很高兴听到这个消息!我们很高兴你对购买的产品感到满意。还有什么需要我帮忙的吗?
[顾客]:没有了。我只想给你一些积极的反馈。谢谢你们的优质服务。
[Agent]:你好,感谢你的联系。有什么可以帮你?
[顾客]:我对最近购买的产品非常失望。和我预期的完全不一样。
[Agent]:很遗憾听到这个消息。能否请你提供更多详细信息,以便我提供帮助?
[顾客]:产品质量很差,而且到货很晚。我真的不满意。
>>>
「积极」 「消极」
将分隔符用作XML标签
使用分隔符的另一种方法是将其作为XML标签。XML标签是用角括号括起来的带有开头和结尾的标签。<tag>和</tag>就是一个例子。
根据给出的示例,将以下对话的情感分为两类。在没有任何其他前言文本。
<类>
积极
消极
</类>
<对话示例>
[Agent]:早上好,有什么可以帮你?
[顾客]:这个产品太糟糕了,和广告上说的完全不一样!
[顾客]:我非常失望,希望全额退款。
[Agent]:早上好,有什么可以帮你?
[顾客]:你好,我只想说你们的产品留下了深刻印象。它超出了我的预期!
</对话示例>
<示例类>
积极
消极
</示例类>
<对话>
[Agent]:你好!欢迎来到我们的支持中心。有什么可以帮你?
[顾客]:你好!我只是想让你们知道我收到了我的订单,而且太棒了。
[Agent]:很高兴听到这个消息!还有什么需要我帮忙的吗?
[顾客]:没有了。我只想给你一些积极的反馈。谢谢你们的优质服务!
[Agent]:你好,感谢你的联系。有什么可以帮你?
[顾客]:我对最近购买的产品非常失望。和我预期的完全不一样。
[Agent]:很遗憾听到这个消息。能否请你提供更多详细信息,以便我提供帮助?
[顾客]:产品的质量很差,而且很晚才送到。我对这次经历非常不满意。
</对话>
在XML标签中,使用与你在说明中用来描述它们的词相同的名词,是有好处的。
用给出的例子,将以下对话的情感分为两类,不要使用任何其他序言文本。
「积极」
「消极」
3. 使用LLM护栏创建系统提示
「系统提示」和 「系统消息」是通过聊天完成API以编程方式与ChatGPT进行交互时使用的术语。
另一方面,「自定义指令」是通过ChatGPT用户界面与ChatGPT交互时使用的术语。
什么是系统提示?
何时使用系统提示?
系统提示应包括哪些内容?
任务定义,这样LLM就能在整个聊天过程中始终记住要做什么。 输出格式,以便LLM始终记住应该如何回复。 安全护栏,这样LLM就能始终记住它应该如何「不」回复。安全护栏是LLM管理中的新兴领域,指的是LLM允许在其中运行的配置范围。
你将使用此文本回答问题:「插入文本」。 你将以这种格式回复一个JSON对象:{「问题」:「答案」}。 如果文本中没有足够的信息来回答问题,请不要编造信息,并将答案填写为 「NA」。 你只能回答与「插入范围」相关的问题。切勿回答任何与年龄、性别和宗教信仰等人口统计信息相关的问题。
但是,「正常」的聊天提示又是什么呢?
你将使用此文本回答问题:[插入文本]。
你将以这种格式回复一个JSON对象:{「问题」:「答案」}。
你将使用此文本回答问题:[插入文字]。
至
你将使用提供的文本回答问题。
此外:使LLM护栏动态化
4. 仅使用LLM(无需插件或代码)分析数据集
你可能听说过OpenAI在ChatGPT的GPT-4中推出的高级数据分析插件,高级(付费)账户可以使用该插件。
它允许用户将数据集上传到ChatGPT,并直接在数据集上运行代码,从而进行精确的数据分析。
但你知道吗,使用LLM分析数据集并不一定需要这样的插件?让我们先来了解一下单纯使用LLMs分析数据集的优势和局限性。
LLM「不擅长」的数据集分析类型
描述性统计:通过平均值或方差等指标对数字列进行定量总结。 相关性分析:获取列之间的精确相关系数。 统计分析:如假设检验,以确定各组数据点之间是否存在统计意义上的显著差异。 机器学习:在数据集上执行预测建模,如使用线性回归、梯度提升树或神经网络。
LLM擅长的数据集分析类型
异常检测:根据一个或多个列值,识别偏离常规的异常数据点。 聚类:将各列中具有相似特征的数据点进行分组。 跨列关系:识别跨列的综合趋势。 文本分析(针对基于文本的列):根据主题或情感进行分类。 趋势分析(针对有时间方面的数据集):识别跨时间列内的模式、季节性变化或趋势。
仅使用LLM分析Kaggle数据集
由LLM综合得出的特征:1980年以后出生、已婚或同居、中低收入、有子女、经常小额消费。 按LLM聚类为该组的行:3、4、7、10、16、20 深入研究数据集,这些行的完整数据是:
由LLM合成的特征:年龄跨度大、婚姻状况不限、收入高、子女状况各异、购物花费高。 通过LLM聚类到该组的行:2、5、18、29、34、36 深入研究数据集,这些行的完整数据是:
如果我们使用ChatGPT的高级数据分析插件呢?
那么,何时使用LLM分析数据集?
提示:
#上下文#
我是卖酒的。我有一个关于客户信息的数据集:[出生年份、婚姻状况、收入、孩子数量、距上次购买的天数、消费金额]。
#############
#目标#
我希望你利用这个数据集将我的客户分组,然后告诉我如何针对每个组别开展营销活动。请按以下步骤操作,不要使用代码:
1. 聚类:使用数据集的列对数据集的行进行聚类,使同一聚类中的客户具有相似的列值,而不同聚类中的客户具有明显不同的列值。确保每一行只属于一个聚类。
对于找到的每个聚类:
2. CLUSTER_INFORMATION:根据数据集列描述聚类。
3. 聚类名称:解释[CLUSTER_INFORMATION]以获得该聚类客户的简短名称。
4. marketing_ideas:产生向该客户聚类推销我的产品的想法。
5. RATIONALE:解释为什么[MARKETING_IDEAS]与该客户聚类相关且有效。
#############
#风格#
商业分析报告
#############
#语气#
专业、技术
#############
#受众#
我的商业伙伴。让他们相信你的营销策略是经过深思熟虑的,并有充分的数据支持。
#############
#回复:markdown报告#
<对于[CLUSTERS]>中的每个聚类
- 客户聚类:[CLUSTER_NAME]
- 简介:[CLUSTER_INFORMATION]
- 营销理念:[RATIONALE]
- 原因:[RATIONALE]
<附件>
列出属于每个聚类的行号列表,以支持你的分析。使用这些表头:[[CLUSTER_NAME],行列表]。
#############
#开始分析#
如果你能理解,请向我索要我的数据集。
技巧 1:将复杂任务分解成简单步骤
LLM擅长完成简单的任务,但对于复杂的任务就不那么擅长了。因此,对于像这样的复杂任务,重要的是要把任务分解成简单的步骤说明,让LLM遵循。这样做的目的是,向LLM提供你自己执行任务时会采取的步骤。
在本例中,步骤如下:
请按以下步骤操作,不要使用代码:
1. CLUSTERS:使用数据集的列对数据集的行进行聚类,使同一聚类中的客户具有相似的列值,而不同聚类中的客户具有明显不同的列值。确保每一行只属于一个聚类。
对于找到的每个聚类
2. CLUSTER_INFORMATION:根据数据集列描述聚类。
3. CLUSTER_NAME:解释[CLUSTER_INFORMATION]以获得该聚类客户的简短名称。
4. MARKETING_IDEAS:产生向该客户聚类推销我的产品的想法。
5. RATIONALE:解释为什么[MARKETING_IDEAS]与该客户聚类相关且有效。
有了循序渐进的指导,LLM就更有可能取得正确的结果。
技巧 2:引用每一步的中间产出
技巧 3:规范LLM回复的格式
#回复:markdown报告#
<对于[CLUSTERS]>中的每个聚类
- 客户聚类:[CLUSTER_NAME]
- 简介:[CLUSTER_INFORMATION]
- 营销理念:[MARKETING_IDEAS]
- 原因:[RATIONALE]
<附件>
列出属于每个聚类的行号列表,以支持你的分析。使用这些表头:[[CLUSTER_NAME],行列表]。
#开始分析#
如果你能理解,请向我检索我的数据集。
但为什么要把指令和数据集分开呢?
微信扫码关注该文公众号作者