您现在的位置: 竞技宝电竞首页 > 竞技宝电竞资讯

万字长文总结提示词技巧新加坡首届GPT-4提示工程大赛冠军最新分享

时期:2024-05-14 17:47:36 点击数:

  【新智元导读】提示工程已经成为了热门话题,无论是CO-STAR框架构建提示词,使用分隔符将提示词分段,使用LLM护栏创建系统提示,还是仅使用LLM(无需插件或代码)分析数据集,用户都将拥有全新的使用体验。

  新加坡(GovTech)举办了首届GPT-4提示工程竞赛,Sheila Teo很幸运地取得了胜利。

万字长文总结提示词技巧新加坡首届GPT-4提示工程大赛冠军最新分享

  提示工程是一门融合了艺术和科学的学科——它既是对技术的理解,也包含创造力和战略思维。

  这次她和我们分享了她在学习过程中学到的提示工程策略,这些策略可以让任何LLM都可以完全满足用户的需求,甚至做得更多!

  有效的提示结构对于从LLM那里获取最佳回复至关重要。CO-STAR框架是新加坡政府科技部数据科学与人工智能团队的心血结晶,是构建提示的便捷模板。

  它考虑到了LLM回答的有效性和相关性的所有关键方面,从而使回答更加优化。

  这可以是某个名人的写作风格,也可以是某个行业的某个专家,如商业分析专家或首席执行官。这将引导LLM以符合你需求的方式和用词做出回复。

  这可确保LLM的回复与所需的情感或情绪背景产生共鸣。例如,正式的、幽默的、善解人意的等。

  根据受众(如某一领域的专家、初学者、儿童等)量身定制LLM的回复,确保其在所需的语境中是恰当的、可以理解的。

  这可确保LLM按照下游任务所需的准确格式输出。例如护栏,列表、JSON、专业报告等。大多数LLM应用程序都会以编程方式LLM回复进行下游操作,对于这些应用程序来说,JSON输出格式是最理想的。

  假设你是一名社交媒体经理,你需要帮助起草一篇Facebook帖子来宣传公司的新产品。

  在Facebook上写一篇文章,为我公司的新产品做广告。我的公司名为Alpha,产品名为Beta,是一种新型超快速吹风机。

  - 告别冗长乏味的吹发过程!阿尔法隆重推出贝塔型吹风机,这是我们在护发技术方面的最新创新。

  - 超快吹干:得益于先进、强劲的电机,Beta可以将你的吹干时间缩短一半。让你更快做好准备,有更多时间做自己喜欢的事情!

  这种输出方式虽然够用,但却非常普通,缺乏必要的细微差别和有针对性的吸引力,无法引起公司受众的共鸣。

  下面是一个使用CO-STAR模板的示例,它提醒你将任务的其他方面融入你的提示中,特别是之前的快速提示中缺少的「风格」、「语气」和「受众」方面:

  我想为我公司的新产品做广告。我的公司名叫Alpha,产品名叫Beta,是一种新型超快吹风机。

  我公司在Facebook上的受众通常是老一代人。请针对这部分受众通常对美发产品的要求,量身定制你的帖子。

  使用Alpha Beta,重新找回简单有效的护发乐趣。我们的最新创新产品不仅仅是一款吹风机,它还是一个承诺,为那些热爱生活的人提供快速、轻柔、可靠的头发造型。

  - 简单直观:告别复杂的小工具。Alpha Beta为舒适和简便而设计,非常适合那些看中直接、无忧技术的人。

  - 省心技术:我们知道你的时间非常宝贵。因此,Alpha Beta可以大大缩短吹干时间,让你有更多时间享受生活的乐趣。使用Alpha Beta,让每一天都成为美好的一天。体验精致与简约的完美融合。

  CO-STAR框架指导你有条不紊地向LLM提供有关任务的所有关键信息,确保根据你的需求提供量身定制的优化回复。

  分隔符是一种特殊的标记,可帮助LLM区分提示词的哪些部分应被视为一个意义单元。这一点很重要,因为你的整个提示信息是作为一长串标记符到达LLM的。

  所选特殊字符的数量和类型并不重要,只要它们足够独特,能让LLM将其理解为内容分隔符而非普通标点符号即可。

  将中每段对话的情绪分类为「积极」或「消极」。给出情感分类,无需任何其他前言文本。

  [Agent]:很高兴听到这个消息!我们很高兴你对购买的产品感到满意。还有什么需要我帮忙的吗?

  [Agent]:很遗憾听到这个消息。能否请你提供更多详细信息,以便我提供帮助?

  序言指出,要分类的对话被分在内,这些对话随后在提示的底部提供给LLM,但没有任何解释性文字,但由于分隔符 and的存在,LLM明白这些是它应该分类的对线的输出结果,其中给出了情感分类,但没有像我们要求的那样输出任何其他前言文本:

  使用分隔符的另一种方法是将其作为XML标签。XML标签是用角括号括起来的带有开头和结尾的标签。和就是一个例子。

  这种方法很有效,因为LLM已经接受过大量XML网页内容的训练,并学会了理解其格式。

  [Agent]:很遗憾听到这个消息。能否请你提供更多详细信息,以便我提供帮助?

  在XML标签中,使用与你在说明中用来描述它们的词相同的名词,是有好处的。

  其中我们使用了名词「对话」、「分类」和「示例」。因此,我们用作分隔符的XML标签是对话、类、示例-对话 和 示例-类,确保LLM理解你的指令与用作分隔符的XML标签之间的关系。

  同样,通过使用分隔符,以清晰、有条理的方式对指令进行分段,可确保GPT-4按你希望的方式作出回复:

  在进入正题之前,需要注意的是本节只适用于具有系统提示功能的LLM,而不像本文其他章节那样适用于任何LLM。

  最著名的LLM当然是ChatGPT,因此我们将使用ChatGPT作为本节的示例。

  首先,让我们来理清术语:关于ChatGPT,有大量资源几乎可以互换使用这三个术语:「系统提示」、「系统消息」和 「自定义指令」。

  这让很多人感到困惑,以至于OpenAI发布了一篇文章来解释这些术语。以下是其摘要:

  「系统提示」和 「系统消息」是通过聊天完成API以编程方式与ChatGPT进行交互时使用的术语。

  另一方面,「自定义指令」是通过ChatGPT用户界面与ChatGPT交互时使用的术语。

  系统提示是一种附加提示,你可以在其中提供有关LLM行为方式的指令。它被认为是附加的,因为它不属于你对LLM的「正常」提示(即用户提示)。

  在聊天中,每次你提供新提示时,系统提示都会像过滤器一样,让LLM在回复你的新提示前自动应用。这意味着LLM在聊天中的每次回复都会考虑到到系统提示。

  你首先想到的问题可能是:既然我也可以在与LLM进一步对话之前,在新聊天的第一次提示中说明,为什么还要在系统提示中说明呢?

  答案是,因为LLM的对话内存是有限的。在后一种情况下,随着对话的继续,LLM很可能会「忘记」你在聊天中提供的第一条提示,从而遗忘这些提示。

  另一方面,如果在系统提示自带指令,那么这些系统提示就会与聊天中的每个新提示一起被自动考虑。

  总之:在整个聊天过程中使用系统提示,可提供你希望LLM在回复时记住的提示。

  安全护栏,这样LLM就能始终记住它应该如何「不」回复。安全护栏是LLM管理中的新兴领域,指的是LLM允许在其中运行的配置范围。

  如果文本中没有足够的信息来回答问题,请不要编造信息,并将答案填写为 「NA」。

  你只能回答与「插入范围」相关的问题。切勿回答任何与年龄、性别和宗教信仰等人口统计信息相关的问题。

  现在你可能会想:听起来系统提示中已经提供了很多信息。那我应该在聊天的 「正常」提示(即用户提示)中放点什么呢?

  系统提示概述了当前的任务。在上面的系统提示示例中,任务被定义为只使用一段特定文本来回答问题,并且LLM被指示以{「问题」:「答案」}格式。

  在这种情况下,聊天的每个用户提示都是你希望使用文本回答的问题。例如,用户提示可能是「文本是关于什么的」而LLM会回答{文本是关于什么的?文本是关于......}。

  但是,让我们进一步概括这个任务示例。在这种情况下,我们可以将上述系统提示的第一行编辑为:

  现在,聊天的每个用户提示,都会包括要回答问题的文本和要回答的问题,例如:[插入文本]:

  XML标签「文本」和「问题」中使用的名词,与系统提示中使用的名词相对应,这样LLM就能理解标签与系统提示指令之间的关系。

  总之,系统提示应给出总体任务指令,而每个用户提示应提供你需要任务执行的具体细节。在本例中,这些具体内容就是文本和问题。

  以上是通过系统提示中的几句话添加的护栏。这些护栏是一成不变的,在整个聊天过程中不会改变。

  不幸的是,对于ChatGPT用户界面的用户来说,现在还不能直接做到这一点。

  随着人们对构建有效的LLM护栏的关注度越来越高,一些开源软件包也应运而生,它们可以让你以编程方式设置更详细、更动态的护栏。

  其中值得注意的是英伟达团队开发的NeMo护栏,它允许你配置用户与LLM之间的预期对话流,从而在聊天的不同点设置不同的护栏,使动态护栏随着聊天的进行而发展。非常推荐你去看一看!

  它允许用户将数据集上传到ChatGPT,并直接在数据集上运行代码,从而进行精确的数据分析。

  但你知道吗,使用LLM分析数据集并不一定需要这样的插件?让我们先来了解一下单纯使用LLMs分析数据集的优势和局限性。

  你可能已经知道,LLM进行精确数学计算的能力有限,因此它们不适合从事需要对数据集进行精确定量分析的工作,例如:

  统计分析:如假设检验,以确定各组数据点之间是否存在统计意义上的显著差异。

  机器学习:在数据集上执行预测建模,如使用线性回归、梯度提升树或神经网络。

  在数据集上执行此类定量任务,是OpenAI高级数据分析插件存在的原因,这样编程语言就可以在数据集上运行代码来执行此类任务。

  LLM擅长识别模式和趋势。这种能力源于它们在多样化和海量数据方面接受的广泛培训,使他们能够辨别可能无法立即察觉的复杂模式。

  趋势分析(针对有时间方面的数据集):识别跨时间列内的模式、季节性变化或趋势。

  对于这类基于模式的任务,仅使用LLM可能比使用代码在更短的时间内获得更好的结果!让我们用一个例子来充分说明这一点。

  我们将使用一个流行的Kaggle数据集,该数据集是为客户个性分析而策划的,其中一家公司试图对其客户聚类进行细分,以便更好地了解客户。

  为便于稍后验证LLM的分析结果,我们将把该数据集子集为50行,并只保留最相关的列。

  之后,用于分析的数据集将如下所示,其中每一行代表一位客户,每一列描述客户信息:

  其次,就如何对每个细分市场进行最佳营销提出想法。现在,这是一个实际的商业问题,LLM的模式发现(第一步)能力在这个问题上确实可以大显身手。

  为简洁起见,我们选取两个由LLM生成的客户聚类进行验证,例如年轻的家庭成员和挑剔的发烧友。

  由LLM综合得出的特征:1980年以后出生、已婚或同居、中低收入、有子女、经常小额消费。

  由LLM合成的特征:年龄跨度大、婚姻状况不限、收入高、子女状况各异、购物花费高。

  这个例子展示了LLM在发现模式、解释多维数据集并将其提炼为有意义的见解方面的能力,同时确保其分析深深植根于数据集的事实真相。

  为了完整起见,我用同样的提示尝试了同样的任务,但要求ChatGPT使用代码来执行分析,这就激活了它的高级数据分析插件。

  我的想法是让该插件使用K-Means等聚类算法直接在数据集上运行代码,以获得每个客户聚类,然后再综合每个聚类的概况,从而提供营销策略。

  然而,尽管数据集只有50行,但多次尝试后都出现了以下错误信息,并且没有任何输出:

  对于需要精确数学计算或复杂、基于规则的处理的任务,传统的编程方法仍然更胜一筹。

  对于基于模式识别的任务,使用传统的编程和算法方法可能具有挑战性或更耗时。然而,LLM擅长此类任务,甚至可以提供额外的输出,如支持其分析的附件和markdown格式的完整分析报告。

  最终,是否使用LLM取决于当前任务的性质,要在LLM在模式识别方面的优势与传统编程技术提供的精确性和特定性之间取得平衡。

  在本节结束之前,让我们回过头来看看用于生成本数据集分析的提示,并对所使用的关键提示工程技术进行分析:

  我是卖酒的。我有一个关于客户信息的数据集:[出生年份、婚姻状况、收入、孩子数量、距上次购买的天数、消费金额]。

  我希望你利用这个数据集将我的客户分组,然后告诉我如何针对每个组别开展营销活动。请按以下步骤操作,不要使用代码:

  1. 聚类:使用数据集的列对数据集的行进行聚类,使同一聚类中的客户具有相似的列值,而不同聚类中的客户具有明显不同的列值。确保每一行只属于一个聚类。

  4. marketing_ideas:产生向该客户聚类推销我的产品的想法。

  我的商业伙伴。让他们相信你的营销策略是经过深思熟虑的,并有充分的数据支持。

  列出属于每个聚类的行号列表,以支持你的分析。使用这些表头:[[CLUSTER_NAME],行列表]。

  LLM擅长完成简单的任务,但对于复杂的任务就不那么擅长了。因此,对于像这样的复杂任务,重要的是要把任务分解成简单的步骤说明,让LLM遵循。这样做的目的是,向LLM提供你自己执行任务时会采取的步骤。

  1. CLUSTERS:使用数据集的列对数据集的行进行聚类,使同一聚类中的客户具有相似的列值,而不同聚类中的客户具有明显不同的列值。确保每一行只属于一个聚类。

  4. MARKETING_IDEAS:产生向该客户聚类推销我的产品的想法。

  不要简单地把总体任务交给LLM,而是让它「把客户分成几组,然后就如何向每组客户进行营销提出想法」。

  使用大写字母是为了将这些变量名与给出的指令正文区分开来。以后可以用方括号[VARIABLE_NAME]来引用这些中间输出。

  在这里,我们要求使用markdown报告格式,以美化LLM的回复。在这里,中间输出中的变量名又派上了用场,可以决定报告的结构。

  列出属于每个聚类的行号列表,以支持你的分析。使用这些表头:[[CLUSTER_NAME],行列表]。

  事实上,你甚至可以随后要求ChatGPT以可下载文件的形式提供报告,以便你在撰写最终报告时参考其答复。

  你会注意到,在第一个提示中,我们从未将数据集交给LLM。相反,提示中只给出了数据集分析的任务说明,并将其添加到了底部:

  ChatGPT随后回复说它能理解,我们在下一个提示中将数据集作为CSV字符串传递给它:

  这样做可以帮助LLM保持对每条指令的清晰理解,降低遗漏信息的可能性,尤其是像本任务这样指令较长的复杂任务。

  你可能遇到过这样的情况,即LLM「不小心遗忘」了你作为较长提示的一部分给出的某个指令。例如,如果你要求给出100字的回复,而LLM给你的回复是一个较长的段落。

  通过先接收指令,再接收指令所针对的数据集,LLM可以先消化它应该做的事情,然后再对接下来提供的数据集执行指令。

  不过请注意,只有聊天LLM才能实现指令和数据集的分离,因为聊天LLM会保留会话记忆,而用于补全的LLM不会。

Copyright © 2018-2024 竞技宝电竞首页·(中国)平台网址 版权所有  xml地图  网站地图  备案号:晋ICP备16004736号-2