我如何赢得新加坡 GPT-4 即时工程竞赛

207 阅读29分钟

声明:该篇文章是转载文章,我相信这篇文章会对大家有一个新的启发,也为了掘金的小伙伴能原汁原味的阅读,不夹杂我个人错误的见解(真相是本人文案水平有限)。文章原作者:Sheila Teo,全文约2.3万字,大概需要阅读时间是30分钟,有兴趣的朋友可以继续往下看。

庆祝一个里程碑——真正的胜利是无价的学习经历!

上个月,我非常荣幸地赢得了新加坡首届 GPT-4 快速工程竞赛,该竞赛汇集了由新加坡政府技术局 (GovTech) 组织的 400 多名快速优秀的参赛者。

快速工程是一门融合了艺术和科学的学科——它既是对技术的理解,也是对创造力和战略思维的理解。这是我一路上学到的即时工程策略的汇编,它推动任何LLM做你需要的事情,甚至更多!

**作者注: **在撰写本文时,我试图摆脱已经在网上广泛讨论和记录的传统即时工程技术。相反,我的目标是带来我通过实验学到的新见解,以及对理解和处理某些技术的不同的、个人的看法。我希望您会喜欢阅读这篇文章!

本文涵盖以下内容,其中🔵指适合初学者的提示技巧,而🔴指高级策略:

1. [  🔵  ] [使用 CO-STAR 框架构建提示]

2. [  🔵  ] [使用分隔符进行分段提示]

3. [  🔴  ] [使用LLM护栏创建系统提示]

4. [  🔴  ] [仅使用 LLM 分析数据集,无需插件或代码] — 通过使用 GPT-4 分析现实世界 Kaggle 数据集的实践示例

1. [🔵] 使用 CO-STAR 框架构建提示

有效的提示结构对于获得LLM的最佳反应至关重要。 CO-STAR 框架是 GovTech Singapore 数据科学与人工智能团队的创意,是构建提示的便捷模板。它考虑了影响LLM响应的有效性和相关性的所有关键方面,从而产生更优化的响应。

CO-STAR 框架 — 图片由作者提供

它的工作原理如下:

(C) 上下文:提供任务的背景信息

这有助于LLM了解正在讨论的具体场景,确保其响应是相关的。

(O) 目标:定义您希望LLM执行的任务是什么

明确您的目标有助于LLM将其回应集中于实现该特定目标。

(S) 风格:指定您希望LLM使用的写作风格

这可能是某个特定名人的写作风格,也可能是某个专业的特定专家,例如业务分析师专家或首席执行官。这将指导LLM以符合您需求的方式和措辞做出回应。

(T) 语气:设定回应的态度

这确保了LLM的回应与预期的情绪或所需的情感背景产生共鸣。例子包括正式的、幽默的、善解人意的等等。

(A) 受众:确定响应的目标受众

针对受众(例如某个领域的专家、初学者、儿童等)定制LLM的回应,可确保其在您所需的背景下是适当且易于理解的。

(R) 响应:提供响应格式

这可确保 LLM 以下游任务所需的确切格式输出。示例包括列表、JSON、专业报告等。对于大多数以编程方式处理 LLM 响应以进行下游操作的 LLM 应用程序,JSON 输出格式将是理想的选择。

CO-STAR 的实际应用

下面是一个真实示例,说明了 CO-STAR 框架为何有用。假设您是一名社交媒体经理,您需要帮助起草 Facebook 帖子来宣传您公司的新产品。

没有CO-STAR 的快速提示可能如下所示:

写一篇 Facebook 帖子来宣传我公司的新产品。我公司的名字叫Alpha,产品叫Beta,是一种新型超快速吹风机。

这是 GPT-4 的输出:

Alpha 推出革命性的 Beta 吹风机!

  • 告别漫长、乏味的吹风过程! Alpha 很自豪地推出 Beta,这是我们在护发技术方面的最新创新。
  • 超快速干燥:Beta 配备先进、强大的电机,可将干燥时间缩短一半。更快地做好准备,享受更多时间做自己喜欢的事情! 立即购买:[产品页面链接]

虽然足够了,但此输出非常笼统,缺乏引起公司受众共鸣所需的具体细微差别和有针对性的吸引力。

下面是使用 CO-STAR 模板的示例,它提醒您将任务的其他方面合并到提示中,特别是先前快速提示中缺少的STYLETONE和方面:AUDIENCE

CONTEXT

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

目标

为我创建一个 Facebook 帖子,旨在让人们点击产品链接来购买。

风格

遵循为类似产品做广告的成功公司的写作风格,例如戴森。

语气

有说服力

受众

我公司在 Facebook 上的受众群体通常是老一代。根据受众通常对护发产品的需求来定制您的帖子。

RESPONSE

Facebook 帖子简洁但富有影响力。

通过应用 CO-STAR,GPT-4 的响应变得更加有针对性和有效:

Alpha Beta 拥抱轻松优雅——专为明智一代打造的超快速吹风机。

使用 Alpha Beta 重新发现简单、有效护发的乐趣。我们最新的创新不仅仅是吹风机; 对于那些欣赏生活中美好事物的人来说,这是一个快速、温和、可靠的发型设计承诺。

  • 简单直观的使用:告别复杂的小工具。 Alpha Beta 专为舒适和简单而设计,非常适合那些重视简单、 无忧技术的人。
  • 省时技术:我们了解您的时间非常宝贵。这就是 Alpha Beta 显着缩短干燥时间的原因,让您有更多时间享受生活乐趣。

使用 Alpha Beta,让每一天都是美好的一天。 今天体验精致与简约的融合。

[您的产品链接在这里]

CO-STAR 框架指导您以结构化的方式向LLM提供有关您的任务的所有关键信息,确保针对您的需求提供量身定制和优化的响应。

2. [🔵] 使用分隔符进行分段提示

image.png 图像由 DALL·E 3 生成

分隔符是特殊的标记,可帮助 LLM 区分应将提示的哪些部分视为单个含义单位。这很重要,因为您的整个提示会作为单个长令牌序列到达 LLM。分隔符通过隔离提示的特定部分以进行不同的处理,从而为该标记序列提供结构。

值得注意的是,分隔符可能不会影响LLM对简单任务的响应质量。然而,任务越复杂,分段分隔符的使用对 LLM 响应的影响就越大。

作为特殊字符的分隔符

分隔符可以是通常不会一起出现的特殊字符的任何序列,例如:

*###

*===

*>>>

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

以下是如何在提示中使用此类分隔符的示例:

将<<<对话>>>中每个对话的情绪分类为 “积极”或“消极”。给出情感分类,无需任何其他序言文本。

对话示例

[代理]:早上好,今天需要什么帮助吗?

[顾客]:这个产品太糟糕了,和广告上的完全不一样!

[顾客]:我非常失望,希望全额退款。

[代理]:早上好,今天有什么可以帮您的吗?

[顾客]:嗨,我只是想说你们的 产品给我留下了深刻的印象。它超出了我的预期!

输出示例

消极的

积极的

<<< [特工]:您好!欢迎您对我们的支持。今天我能为您提供什么帮助?

[顾客]:您好!我只是想让你知道我收到了我的订单,这太棒了!

[代理]:很高兴听到这个消息!我们很高兴您对购买感到满意。还有什么我可以帮助您的吗?

[顾客]:不,就是这样。只是想提供一些积极的反馈。感谢您的优质服务!

[代理]:您好,感谢您联系我们。今天我能为您提供什么帮助?

[顾客]:我对最近购买的产品感到非常失望。这根本不是我所期望的。

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

[顾客]:产品质量不好,到货晚了。我对这次经历真的很不满意。

上面的示例使用分隔符进行分段###,并使用节标题EXAMPLE CONVERSATIONSEXAMPLE OUTPUTS大写字母来区分它们。序言指出要分类的对话在内部​​进行了分段<<<CONVERSATIONS>>>,这些对话随后在提示的底部提供给 LLM,没有任何解释性文本,但 LLM 知道这些是它应该分类的对话,因为存在分隔符<<<>>>.

这是 GPT-4 的输出,给出了情感分类,没有输出任何其他前导文本,就像我们要求的那样:

积极的

消极的

作为 XML 标签的分隔符

使用分隔符的另一种方法是将它们作为 XML 标记。 XML 标签是用尖括号括起来的标签,带有开始和结束标签。一个例子是<tag></tag>。这是有效的,因为LLM已经接受过大量 XML Web 内容的培训,并且已经学会理解其格式。

下面是与上面相同的提示,但使用 XML 标记作为分隔符来构建:

使用给出的示例,将以下对话的情绪分为两类之一。给出情感分类,无需任何其他 序言文本。

正 负

<示例对话> [代理]:早上好,今天我能为您提供什么帮助吗?

[顾客]:这个产品太糟糕了,和广告上的完全不一样!

[顾客]:我非常失望,希望全额退款。

[代理]:早上好,今天有什么可以帮您的吗?

[顾客]:嗨,我只是想说你们的产品给我留下了深刻的印象。它超出了我的预期!

</示例对话>

<示例类>

负数

积极的

</示例类>

<对话> [特工]:您好!欢迎您对我们的支持。今天我能为您提供什么帮助?

[顾客]:您好!我只是想让你知道我收到了我的订单,这太棒了!

[代理]:很高兴听到这个消息!我们很高兴您对购买感到满意。 还有什么我可以帮助您的吗?

[顾客]:不,就是这样。只是想提供一些积极的反馈。感谢 您的优质服务!

[代理]:您好,感谢您联系我们。今天我能为您提供什么帮助?

[顾客]:我对最近购买的产品感到非常失望。这根本不是我所期望的。

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

[顾客]:产品质量不好,到货晚了。我对这次经历真的很不满意。

</对话>

对 XML 标签使用与在说明中描述它们的单词相同的名词是有益的。我们在上面的提示中给出的说明是:

使用给出的示例,将以下对话的情绪分为两类之一。给出情感分类,无需任何其他 序言文本。

我们使用名词conversationsclasses、 和 的地方examples。因此,我们用作分隔符的 XML 标记是<conversations><classes><example-conversations><example-classes>。这可确保 LLM 理解您的指令与用作分隔符的 XML 标签的关系。

同样,通过使用分隔符以清晰且结构化的方式对指令进行分段可确保 GPT-4 准确地响应您想要的方式:

积极的

消极的

3. [🔴] 使用 LLM Guardrails 创建系统提示

在深入研究之前,需要注意的是,本节仅与具有系统提示功能的LLM相关,这与本文中与任何LLM相关的其他部分不同。具有此功能的最著名的LLM当然是 ChatGPT,因此我们将使用 ChatGPT 作为本节的说明示例。

image.png 图像由 DALL·E 3 生成

系统提示相关术语

首先,让我们弄清楚术语:对于 ChatGPT,存在大量资源,它们几乎可以互换地使用这 3 个术语:“系统提示”、“系统消息”和“自定义指令”。事实证明,这让很多人(包括我!)感到困惑,以至于 OpenAI 发布了一篇文章解释这些术语。这是对其的快速总结:

  • “系统提示”和“系统消息”是通过 Chat Completions API 以编程方式与 ChatGPT 交互时使用的术语。
  • 另一方面,“自定义指令”是通过其用户界面(chat.openai.com/ )与 ChatGPT 交互时使用的术语。

图片来自企业 DNA 博客

不过总的来说,这 3 个术语指的是同一件事,所以不要让这些术语让您感到困惑!接下来,本节将使用术语“系统提示”。现在让我们深入了解一下!

什么是系统提示?

系统提示是一个附加提示,您可以在其中提供有关 LLM 应如何表现的说明。它被认为是额外的,因为它超出了LLM的“正常”提示(更好地称为用户提示)。

在聊天中,每次您提供新提示时,系统提示都会充当过滤器,LLM 在对新提示作出响应之前会自动应用该过滤器。这意味着每次 LLM 在聊天中回复时都会考虑系统提示。

什么时候应该使用系统提示?

您想到的第一个问题可能是:为什么我应该在系统提示中提供说明,因为我也可以在与LLM进一步对话之前在新聊天的第一个提示中提供说明?

答案是因为LLM的对话记忆是有限的。在后一种情况下,随着对话的继续,LLM可能会“忘记”您在聊天中提供的第一个提示,从而使这些说明过时。

另一方面,当在系统提示中提供指令时,这些系统提示指令会与提供给聊天的每个新提示一起自动考虑。这确保了LLM即使在对话继续时也能继续收到这些指令,无论聊天时间有多长。

综上所述:

使用系统提示提供您希望LLM在整个聊天过程中回复时记住的说明。

系统提示应包含哪些内容?

系统提示符中的指令通常包括以下几类:

  • 任务定义,因此LLM将在整个聊天过程中始终记住它必须做什么。
  • 输出格式,因此LLM将永远记住它应该如何响应。
  • 护栏,因此LLM将永远记住它不应该如何回应。护栏是LLM治理中的新兴领域,指的是允许LLM运行的配置边界。

例如,系统提示符可能如下所示:

您将使用以下文本回答问题:[插入文本]。 您将使用以下格式的 JSON 对象进行响应:{“Question”: “Answer”}。 如果文本中没有包含足够的信息来回答问题,请不要编造信息并给出答案“NA”。 您只能回答与[插入范围]相关的问题。切勿回答任何与年龄、性别和宗教等人口统计信息相关的问题。

其中每个部分涉及的类别如下:

分解系统提示符 — 作者图片

那么“正常”的聊天提示又是什么呢?

现在您可能会想:听起来系统提示符中已经给出了很多信息。那么,我应该在聊天的“正常”提示(更好地称为用户提示)中添加什么内容呢?

系统提示概述了手头的一般任务。在上面的系统提示示例中,任务被定义为仅使用特定的文本进行问答,并且指示LLM以格式进行响应{"Question": "Answer"}

您将使用以下文本回答问题:[插入文本]。 您将使用以下格式的 JSON 对象进行响应:{“Question”: “Answer”}。

在这种情况下,聊天的每个用户提示只是您希望使用文本回答的问题。例如,用户提示可能是"What is the text about?"。LLM会回应{"What is the text about?": "The text is about..."}

但让我们进一步概括这个任务示例。在实践中,您更有可能想要询问多段文本,而不仅仅是 1 段。在这种情况下,我们可以编辑上述系统提示符的第一行

您将使用以下文本回答问题:[插入文本]。

您将使用提供的文本回答问题。

现在,聊天的每个用户提示都将包含进​​行问答的文本以及要回答的问题,例如:

<文本> [插入文本] </文本>

<问题> [插入问题] </问题>

在这里,我们还使用 XML 标签作为分隔符,以便以结构化方式向 LLM 提供 2 条必需的信息。 XML 标签中使用的名词text和 与question系统提示中使用的名词相对应,以便LLM了解标签如何与系统提示指令相关。

总之,系统提示应给出总体任务说明,每个用户提示应提供您希望执行任务时使用的确切细节。例如,在这种情况下,这些确切的细节是文本和问题。

额外:让LLM护栏充满活力

上面,是通过系统提示中的几句话来添加护栏的。这些护栏是一成不变的,在整个聊天过程中不会改变。如果您希望在对话的不同点设置不同的护栏怎么办?

不幸的是,对于 ChatGPT 用户界面的用户来说,目前没有直接的方法可以做到这一点。但是,如果您以编程方式与 ChatGPT 交互,那么您很幸运!人们越来越关注构建有效的LLM护栏,开源包的开发使您能够以编程方式设置更详细和动态的护栏。

值得注意的是NVIDIA 团队开发的NeMo Guardrails,它允许您配置用户和 LLM 之间的预期对话流程,从而在聊天的不同点设置不同的护栏,从而允许随着聊天的进展而演变的动态护栏。我绝对建议您检查一下!

4. [🔴] 仅使用 LLM 分析数据集,无需插件或代码

image.png

图像由 DALL·E 3 生成

您可能听说过 ChatGPT 的 GPT-4 中的 OpenAI 高级数据分析插件,该插件可供高级(付费)帐户使用。它允许用户将数据集上传到ChatGPT并直接在数据集上运行代码,从而实现准确的数据分析。

但您是否知道您并不总是需要此类插件来使用LLM来很好地分析数据集?让我们首先了解纯粹使用LLM来分析数据集的优点和局限性。

不擅长的数据集分析类型

您可能已经知道,LLM执行精确数学计算的能力有限,这使得它们不适合需要对数据集进行精确定量分析的任务,例如:

  • 描述性统计: 通过均值或方差等度量定量总结数值列。
  • 相关分析: 获取列之间精确的相关系数
  • 统计分析: 例如假设检验以确定数据点组之间是否存在统计显着差异。
  • 机器学习: 对数据集执行预测建模,例如使用线性回归、梯度提升树或神经网络。

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

那么,为什么有人想要仅使用LLM而不使用此类插件来分析数据集呢?

擅长的数据集分析类型

LLM擅长识别模式和趋势。这种能力源于他们对多样化和大量数据的广泛训练,使他们能够辨别可能不会立即显现的复杂模式。

这使得它们非常适合基于数据集中模式查找的任务,例如:

  • 异常检测: 根据一个或多个列值识别偏离正常值的异常数据点。
  • 聚类: 将具有相似特征的数据点跨列分组。
  • 跨列关系: 识别跨列的组合趋势。
  • 文本分析( 对于基于文本的列):根据主题或情绪进行分类。
  • 趋势分析(对于具有时间方面的数据集):识别随时间变化的列内的模式、季节性变化或趋势。

对于这种基于模式的任务,单独使用LLM实际上可能比使用代码在更短的时间内产生更好的结果!让我们用一个例子来充分说明这一点。

仅使用 LLM 分析 Kaggle 数据集

我们将使用一个流行的现实世界Kaggle 数据集来进行客户个性分析,其中一家公司试图对其客户群进行细分,以便更好地了解其客户。

为了稍后更轻松地验证 LLM 的分析,我们将此数据集划分为 50 行,并仅保留最相关的列。之后,用于分析的数据集如下所示,其中每一行代表一个客户,列描述客户信息:

数据集的前 3 行 — 作者图片

假设您在公司的营销团队工作。您的任务是利用此客户信息数据集来指导营销工作。这是一个分为两步的任务:首先,使用数据集生成有意义的客户群。接下来,就如何针对每个细分市场进行最佳营销提出想法。现在,这是一个实际的业务问题,LLM的模式发现(步骤 1)能力可以真正发挥作用。

让我们使用 4 种提示工程技术(稍后会详细介绍!)为该任务制作一个提示:

  1. 将复杂的任务分解为简单的步骤
  2. 引用每个步骤的中间输出
  3. 格式化 LLM 的响应
  4. 分离数据集中的指令

系统提示: 我希望你扮演数据科学家来分析数据集。不要编造数据集中没有的信息。对于我要求的每项分析,请为我提供准确且明确的答案,并且不要向我提供在其他平台上进行分析的代码或说明。

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

#############

目标

我希望您使用该数据集将我的客户分组,然后为我提供有关如何针对每个组进行营销工作的想法。使用此分步过程并且不使用代码:

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

对于找到的每个集群, 2. CLUSTER_INFORMATION:根据数据集列描述集群。

  1. CLUSTER_NAME:解释[CLUSTER_INFORMATION]以获取该集群中客户组的短名称。
  2. MARKETING_IDEAS:产生向该客户群推销我的产品的想法。
  3. 基本原理:解释为什么 [MARKETING_IDEAS] 与该客户群相关且有效。

#############

STYLE

业务分析报告

#############

#TONE# 专业、技术

#############

#观众# 我的商业伙伴。让他们相信您的营销策略经过深思熟虑并且有充分的数据支持。

#############

响应:降价报告

<对于 [CLUSTERS] 中的每个集群> — 客户组:[CLUSTER_NAME] — 个人资料:[CLUSTER_INFORMATION] — 营销理念:[MARKETING_IDEAS] — 理由:[RATIONALE]

<附件> 给出属于每个簇的行号列表的表格,以支持您的分析。使用这些表头:[[CLUSTER_NAME],行列表]。

#############

开始分析

如果你明白了,请向我索要我的数据集。

下面是 GPT-4 的回复,我们继续将数据集以 CSV 字符串的形式传递给它。

GPT-4 的回应 — 作者图片

随后,GPT-4 以我们要求的 Markdown 报告格式回复其分析:

image.png GPT-4 的回应 — 作者图片

image.png

GPT-4 的回应 — 作者图片

GPT-4 的回应 — 作者图片

验证 LLM 的分析

为了简洁起见,我们将选择LLM生成的 2 个客户群体进行验证 - 例如,年轻家庭和挑剔的爱好者。

年轻家庭

  • LLM综合资料:1980 年以后出生、已婚或同居、中低收入、有孩子、频繁小额采购。
  • 由 LLM 聚类到该组的行:3、4、7、10、16、20
  • 深入研究数据集,这些行的完整数据为:

年轻家庭的完整数据 — 图片由作者提供

这与LLM确定的个人资料完全一致。它甚至能够对具有空值的行进行聚类,而无需我们事先对其进行预处理!

**挑剔的爱好者 **- 由LLM合成的个人资料:广泛的年龄范围、任何婚姻状况、高收入、不同的儿童状况、高购买支出。

  • 由 LLM 聚类到该组的行:2、5、18、29、34、36
  • 深入研究数据集,这些行的完整数据为:

为挑剔的爱好者提供的完整数据 ****— 图片由作者提供

这再次与LLM确定的个人资料非常吻合!

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

如果我们使用ChatGPT 的高级数据分析插件会怎么样?

为了完整起见,我尝试使用相同的提示执行相同的任务,但要求 ChatGPT 使用代码执行分析,这会激活其高级数据分析插件。这个想法是让插件直接在数据集上使用 K-Means 等聚类算法运行代码来获取每个客户组,然后综合每个集群的配置文件以提供营销策略。

然而,尽管数据集只有 50 行,但多次尝试导致出现以下错误消息且没有输出:

image.png 尝试 1 出现错误且无输出 — 作者图片

尝试 2 出现错误且无输出 — 图片由作者提供

现在使用高级数据分析插件,似乎可以轻松实现在数据集上执行更简单的任务,例如计算描述性统计或创建图表,但需要计算算法的更高级任务有时可能会导致错误并且没有输出,因为计算限制或其他。

那么……何时使用LLM分析数据集?

答案是这取决于分析的类型。

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

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

最终,使用LLM的决定取决于手头任务的性质,平衡LLM在模式识别方面的优势与传统编程技术提供的精度和特异性。

现在回到提示工程!

在本节结束之前,让我们回到用于生成此数据集分析的提示并分解所使用的关键提示工程技术:

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

#############

目标

我希望您使用该数据集将我的客户分组,然后为我提供有关如何针对每个组进行营销工作的想法。使用此分步过程并且不使用代码:

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

对于找到的每个集群, 2. CLUSTER_INFORMATION:根据数据集列描述集群。

  1. CLUSTER_NAME:解释[CLUSTER_INFORMATION]以获取该集群中客户组的短名称。
  2. MARKETING_IDEAS:产生向该客户群推销我的产品的想法。
  3. 基本原理:解释为什么 [MARKETING_IDEAS] 与该客户群相关且有效。

#############

STYLE

业务分析报告

#############

#TONE# 专业、技术

#############

#观众# 我的商业伙伴。让他们相信您的营销策略经过深思熟虑并且有充分的数据支持。

#############

响应:降价报告

<对于 [CLUSTERS] 中的每个集群> — 客户组:[CLUSTER_NAME] — 个人资料:[CLUSTER_INFORMATION] — 营销理念:[MARKETING_IDEAS] — 理由:[RATIONALE]

<附件> 给出属于每个簇的行号列表的表格,以支持您的分析。使用这些表头:[[CLUSTER_NAME],行列表]。

#############

开始分析

如果你明白了,请向我索要我的数据集。

技术 1:将复杂的任务分解为简单的步骤 **LLM非常擅长执行简单的任务,但不擅长执行复杂的任务。因此,对于像这样的复杂任务,将任务分解为简单的分步说明以供LLM遵循非常重要。我们的想法是向LLM提供您自己执行任务所需的步骤。

在此示例中,步骤如下:

使用此分步过程并且不使用代码:

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

对于找到的每个集群, 2. CLUSTER_INFORMATION:根据数据集列描述集群。

  1. CLUSTER_NAME:解释[CLUSTER_INFORMATION]以获取该集群中客户组的短名称。
  2. MARKETING_IDEAS:产生向该客户群推销我的产品的想法。
  3. 基本原理:解释为什么 [MARKETING_IDEAS] 与该客户群相关且有效。

而不是简单地将总体任务交给LLM将客户分组,然后就如何向每个组进行营销提出想法”。

通过分步说明,LLM更有可能提供正确的结果。

技术2:引用每个步骤的中间输出 **在向LLM提供分步过程时,我们给每个步骤的中间输出一个大写的VARIABLE_NAME,即CLUSTERSCLUSTER_INFORMATIONCLUSTER_NAMEMARKETING_IDEASRATIONALE

大写用于区分这些变量名称和给定指令的主体。这些中间输出稍后可以使用方括号引用为[VARIABLE_NAME]

技术3:格式化LLM的回复 **在这里,我们要求一个markdown报告格式,它美化了LLM的回复。中间输出中的变量名称在这里再次派上用场,可以指示报告的结构。

响应:降价报告

<对于 [CLUSTERS] 中的每个集群> — 客户组:[CLUSTER_NAME] — 个人资料:[CLUSTER_INFORMATION] — 营销理念:[MARKETING_IDEAS] — 理由:[RATIONALE]

<附件> 给出属于每个簇的行号列表的表格,以支持您的分析。使用这些表头:[[CLUSTER_NAME],行列表]。

事实上,您甚至可以随后要求 ChatGPT 以可下载文件的形式提供报告,以便您根据其响应编写最终报告。

image.png 将 GPT-4 的响应保存为文件 — 作者图片

技术 4:将任务指令与数据集分离** 您会注意到,我们在第一个提示中从未将数据集提供给 LLM。相反,提示仅提供数据集分析的任务说明,并将其添加到底部:

开始分析

如果你明白了,请向我索要我的数据集。

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

GPT-4 的回应 — 作者图片

但为什么要将指令与数据集分开呢?

这样做可以帮助LLM保持对每一项任务的清晰理解,降低遗漏信息的可能性,尤其是在更复杂的任务中,例如这个具有较长指令的任务。您可能遇到过这样的情况:LLM“意外地忘记”了您在较长提示中给出的某些指令 - 例如,如果您要求 100 字的回复,而LLM给您更长的段落。通过在指令所针对的数据集之前首先接收指令,LLM 可以首先消化它应该做什么,然后再在接下来提供的数据集上执行它。

但请注意,指令和数据集的这种分离只能通过聊天 LLM 来实现,因为它们维护会话记忆,而完成 LLM 则不然。

结束语

在本文结束之前,我想分享一些对这段令人难以置信的旅程的个人感想。

首先,衷心感谢新加坡政府科技局精心策划了如此精彩的比赛。如果您对 GovTech 如何组织这场史无前例的竞赛的机制感兴趣,请查看首席组织者 Nicole Lee 本人撰写的这篇文章!

决赛现场现场对决!

其次,我要向我的杰出竞争对手们大声喝彩,他们每个人都带来了一些特别的东西,使比赛变得既丰富又充满挑战!我永远不会忘记最后一轮,我们在舞台上决出胜负,现场观众为我们加油——这是我永远铭记的经历。

对我来说,这不仅仅是一场比赛;更是一场比赛。这是对才华、创造力和学习精神的庆祝。我非常兴奋地想看看接下来会发生什么!

我写这篇文章很开心,如果你读得开心,如果你花点时间鼓掌和关注,我将非常感激

##########结束#############

【大拇指】能看到里人,我想一定是一位特别优秀爱学习的人,祝你学习进步,事业有成!

原文地址:towardsdatascience.com/how-i-won-s…