AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


新加坡提示工程大赛冠军最强Prompt工程技巧分享,仅用大模型也能做数据分析
发布日期:2024-06-01 12:09:47 浏览次数: 2466


新加坡政府科技局 (GovTech) 举办的首届 GPT-4 提示工程大赛冠军Sheila Teo分享了她的一些提示撰写技巧及案例分析。

内容包含四个部分:

  • [基础] 使用 CO-STAR 框架构建提示

  • [基础] 使用分隔符分段提示

  • [高级] 使用 LLM 护栏创建系统提示

  • [高级] 仅使用 LLM 分析数据集,无需插件或代码 (使用 GPT-4 分析真实 Kaggle 数据集的示例)

以下是结合其内容的简单总结:

1.使用 CO-STAR 框架撰写Prompt
CO-STAR是结构化的Prompt模版六大要素的首字母缩写,即:
(C) Context 上下文:为任务提供背景信息 通过为大语言模型(LLM)提供详细的背景信息,可以帮助它精确理解讨论的具体场景,确保提供的反馈具有相关性。
(O) Objective 目标:明确你要求大语言模型完成的任务 清晰地界定任务目标,可以使大语言模型更专注地调整其回应,以实现这一具体目标。
(S) Style 风格:明确你期望的写作风格 你可以指定一个特定的著名人物或某个行业专家的写作风格,如商业分析师或 CEO。这将指导大语言模型以一种符合你需求的方式和词汇选择进行回应。
(T) Tone 语气:设置回应的情感调 设定适当的语气,确保大语言模型的回应能够与预期的情感或情绪背景相协调。可能的语气包括正式、幽默、富有同情心等。
(A) Audience 受众:识别目标受众 针对特定受众定制大语言模型的回应,无论是领域内的专家、初学者还是儿童,都能确保内容在特定上下文中适当且容易理解。
(R)  Response响应:规定输出的格式 确定输出格式是为了确保大语言模型按照你的具体需求进行输出,便于执行下游任务。常见的格式包括列表、JSON 格式的数据、专业报告等。对于大部分需要程序化处理大语言模型输出的应用来说,JSON 格式是理想的选择。

具体实例比较:

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

  •  不使用CO-STAR

Prompt:

写一篇Facebook帖子为我公司的新产品做广告。我公司的名字叫Alpha,产品叫Beta,一种新型的超快吹风机。

GPT-4输出:

亲爱的网友们,
我很高兴能在这里向大家介绍Alpha公司新推出的产品——Beta超快吹风机!
Beta不仅仅是一款吹风机,它是我们对美与速度的独特诠释。这款产品采用尖端科技,能以迅雷不及掩耳之势将你的头发吹干。更不用说,Beta能在保护你的发丝免受热损的前提下,而实现快速吹干。
我们Beta的设计理念是结合速度与舒适,我们相信,通过使用Beta,你也将能享受到这种特别的体验。在早上忙碌的日程中,或是赶着出门的时候,Beta都将是你的最佳伴侣。
我们在Alpha,始终坚持以客户满意度为中心的服务理念,Beta正是对此承诺的实现。所以,尝试一下吧,让我们的Beta超快吹风机带给你的生活更多的便利和乐趣。
期待您的反馈,让我们共同体验以客户为中心的Alpha服务。
#Alpha #Beta超快吹风机
  • 使用CO-STAR:

# CONTEXT #我想为我公司的新产品做广告。我公司的名字叫Alpha,产品叫Beta,是一种新型的超快吹风机。# OBJECTIVE #为我创建一个Facebook帖子,旨在让人们点击产品链接进行购买。# STYLE #遵循成功公司为类似产品做广告的写作风格,比如戴森。# TONE #有说服力的# AUDIENCE #我公司在Facebook上的受众群通常是老一辈。定制你的帖子,以针对这些受众在头发产品中通常想要的东西。# RESPONSE #Facebook上的帖子简洁而有影响力。
GPT-4输出:
??【Alpha公司新品发布】??
致亲爱的朋友们,我们很高兴地向您推出我们新一代的产品——Beta超快吹风机!??
沿着戴森的卓越传统,Beta吹风机结合了快速、高效和温柔-全部装在一台设计精美的工具里。?
您是否厌倦了等待头发干燥的漫长时间?是否在寻找一款吹风机,既可以快速干燥头发,又能全程呵护秀发,避免发质受损?Beta是您一直在寻找的答案!❤️?
它速度快,能够在最短的时间内达到最佳的干燥效果。更重要的是,我们的独家温控科技确保了温度始终适中,既不会对头发造成损害,也不会让您的头皮感到不适。?✨
走到人群中,洋溢着自信,让人眼前一亮的那个人,就是您!点击下方的链接,立即购买我们的Beta超快吹风机,走在最前端的流行趋势上,给您的日常生活带来便利!??
Alpha公司与您一起,让美丽变得如此简单!??[产品链接]
立即行动,让我们一起享受快乐,享受美丽,享受生活吧!?
可以看出,应用了CO-STAR的Prompt的输出更加有针对性,也更具体,有效。

2.使用分隔符给Prompt分段

善于利用分隔符,帮助大模型更好的理解提示内容。Prompt内容越复杂,分隔符的作用就越重要。分隔符可以自己设计,但不应与标点符号等相同,容易发生歧义,常见的分隔符可以是###、===、<<<>>>等。同时,也可以使用xml标签来分隔Prompt。

示例:

Classify the sentiment of each conversation in <<<CONVERSATIONS>>> as‘Positive’ or ‘Negative’. Give the sentiment classifications without any other preamble text.
###
EXAMPLE CONVERSATIONS
[Agent]: Good morning, how can I assist you today?[Customer]: This product is terrible, nothing like what was advertised![Customer]: I’m extremely disappointed and expect a full refund.
[Agent]: Good morning, how can I help you today?[Customer]: Hi, I just wanted to say that I’m really impressed with yourproduct. It exceeded my expectations!
###
EXAMPLE OUTPUTS
Negative
Positive
###
<<<[Agent]: Hello! Welcome to our support. How can I help you today?[Customer]: Hi there! I just wanted to let you know I received my order, andit’s fantastic![Agent]: That’s great to hear! We’re thrilled you’re happy with your purchase.Is there anything else I can assist you with?[Customer]: No, that’s it. Just wanted to give some positive feedback. Thanksfor your excellent service!
[Agent]: Hello, thank you for reaching out. How can I assist you today?[Customer]: I’m very disappointed with my recent purchase. It’s not what I expected at all.[Agent]: I’m sorry to hear that. Could you please provide more details so I can help?[Customer]: The product is of poor quality and it arrived late. I’m reallyunhappy with this experience.>>>

该例子使用 ### 进行分段,并使用大写“EXAMPLE CONVERSATIONS”对话和“EXAMPLE OUTPUTS”以进行区分。Prompt最前面描述已经指出要分类的对话会使用 <<<CONVERSATIONS>>> 分隔,这些对话随后在提示的底部提供给 LLM,虽然没有任何解释性文本,但 LLM 可以理解这是它应该分类的对话,因为存在分隔符 <<< 和 >>>。

3.利用 LLM 防护措施创建系统提示

由于大模型记忆能力有限,对于需要重复设置的指令,可以通过OpenAI中的System Prompt设置,这些提示会和User Prompt合并后每次都提交给大模型,从而减少记忆丢失和提示繁琐的问题。一般可以设置以下类别:

  • 任务定义: 这样 LLM 在整个聊天过程中始终记得它需要做什么。

  • 输出格式: 这样 LLM 将始终记得它应该如何响应。

  • 护栏: 这样 LLM 将始终记得它不应该如何响应。护栏指的是 LLM 允许操作的配置边界。比如一些避免提示攻击的一些防御性说明。

    比如:


    功能定义 说明
    任务定义 你将使用这段文字来回答问题:[插入文本]
    输出格式 你将以这样的JSON对象格式来响应:{'问题': '答案'}
    护栏(幻觉) 如果文本没有足够的信息来回答问题,不要编造信息,答案给出'NA'
    护栏(范围) 只允许你回答有关[插入范围]的问题,不得回答任何与年龄,性别和宗教等人口信息相关的问题

另外,利用 NeMo Guardrails(https://github.com/NVIDIA/NeMo-Guardrails)之类的库还可以让护栏动态化,来结合实际情况调整护栏。

4.仅使用 LLM 分析数据集,无需插件或编码

大模型不擅长精确数学计算或复杂、基于规则的任务处理,但大模型擅长识别模式和趋势分析,这种能力源于它们在大量不同数据上的广泛训练,使它们能够识别可能并不那么明显的复杂模式。这使得它们非常适合基于数据集内模式查找的任务,能在更短的时间内产生比使用代码更好的结果

例如:

  • 异常检测:根据一个或多个列值识别偏离规范的异常数据点。
  • 聚类:将具有相似特征的数据点分组到各个列中。
  • 跨列关系:识别跨列的组合趋势。
  • 文本分析(针对基于文本的列):基于主题或情感进行分类。
  • 趋势分析(针对具有时间方面的数据集):识别列中跨时间段的模式、季节性变化或趋势。
示例《仅使用LLM分析 Kaggle 数据集 》:

Kaggle真实数据集(https://www.kaggle.com/datasets/imakash3011/customer-personality-analysis),该数据集是为客户个性分析准备,试图细分其客户群,以便更好地了解其客户。

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


目标是利用客户信息数据集来指导营销工作。可细分为两步任务:
1)使用该数据集生成有意义的客户分群。
2)针对每个分群提出最佳营销策略。
这是一个实际的业务问题,其中 LLM 的模式识别(用于步骤 1)能力可以真正发挥作用。
以下是Prompt使用 4 种提示工程技巧创建提示,如下所示:

1. 将复杂任务分解为简单步骤。

2. 引用每个步骤的中间输出。

3. 格式化 LLM 的响应。

4. 将指令与数据集分开。

具体操作流程:

1)系统配置及任务指令输入:

System Prompt:

I want you to act as a data scientist to analyze datasets. Do not make up information that is not in the dataset. For each analysis I ask for, provide me with the exact and definitive answer and do not provide me with code or instructions to do the analysis on other platforms.

User Prompt:

# CONTEXT #I sell wine. I have a dataset of information on my customers: [year of birth, marital status, income, number of children, days since last purchase, amount spent].
#############
# OBJECTIVE #I want you use the dataset to cluster my customers into groups and then give me ideas on how to target my marketing efforts towards each group. Use this step-by-step process and do not use code:
1. CLUSTERS: Use the columns of the dataset to cluster the rows of the dataset, such that customers within the same cluster have similar column values while customers in different clusters have distinctly different column values. Ensure that each row only belongs to 1 cluster.
For each cluster found,2. CLUSTER_INFORMATION: Describe the cluster in terms of the dataset columns.3. CLUSTER_NAME: Interpret [CLUSTER_INFORMATION] to obtain a short name for the customer group in this cluster.4. MARKETING_IDEAS: Generate ideas to market my product to this customer group.5. RATIONALE: Explain why [MARKETING_IDEAS] is relevant and effective for this customer group.
#############
# STYLE #Business analytics report
#############
# TONE #Professional, technical
#############
# AUDIENCE #My business partners. Convince them that your marketing strategy is well thought-out and fully backed by data.
#############
# RESPONSE: MARKDOWN REPORT #<For each cluster in [CLUSTERS]>— Customer Group: [CLUSTER_NAME]— Profile: [CLUSTER_INFORMATION]— Marketing Ideas: [MARKETING_IDEAS]— Rationale: [RATIONALE]
<Annex>Give a table of the list of row numbers belonging to each cluster, in order to back up your analysis. Use these table headers: [[CLUSTER_NAME], List of Rows].
#############
# START ANALYSIS #If you understand, ask me for my dataset.

2)GPT回答及用户提供待分析数据

3)GPT 生成分析报告

验证 LLM 的分析正确性

简单选择 LLM 生成的 2 个客户群体进行验证——例如,年轻家庭和眼光敏锐的爱好者。

  • 年轻家庭
  1. LLM 生成的户画像:出生于 1980 年之后,已婚或同居,收入中等偏低,有孩子,经常进行小额购买。

  2. LLM 将这些行聚类到此组中:3、4、7、10、16、20

查看实际的数据集:

这与 LLM 识别的用户画像完全一致。它甚至能够在没有预处理的情况下将具有空值的条目进行聚类!

  • 眼光敏锐的爱好者

  • LLM 生成的户画像:年龄范围广,任何婚姻状况,高收入,子女状况多样,购买支出高。

  • LLM 将以下条目聚类到此组:2、5、18、29、34、36


查看实际的数据集


这与 LLM 识别出的特征非常吻合!

与此同时,笔者使用数据分析插件的方式却无法正常进行工作。


在这个案例里用到了具体用到了以下提示工程技巧。

1.一个复杂的任务分解成简单的步骤 。

LLM擅长执行简单的任务,但不太擅长执行复杂的任务。因此,对于像这样的复杂任务,重要的是将任务分解成简单的、逐步的指令,供大型语言模型遵循。

与简单地将整体任务交给 LLM,例如这样的指令“将客户进行分组,然后给出针对每个组的营销策略”相比,通过逐步的指令,LLM 更有可能提供正确的结果。

如:

Use this step-by-step process and do not use code:
1. CLUSTERS: Use the columns of the dataset to cluster the rows of the dataset, such that customers within the same cluster have similar column values while customers in different clusters have distinctly different column values. Ensure that each row only belongs to 1 cluster.For each cluster found,2. CLUSTER_INFORMATION: Describe the cluster in terms of the dataset columns.3. CLUSTER_NAME: Interpret [CLUSTER_INFORMATION] to obtain a short name for the customer group in this cluster.4. MARKETING_IDEAS: Generate ideas to market my product to this customer group.5. RATIONALE: Explain why [MARKETING_IDEAS] is relevant and effective for this customer group

2.引用LLM每个步骤生成中间输出。

当向 LLM 提供每步过程时,将每个步骤的中间输出赋予一个大写的变量名,即 CLUSTERS、CLUSTER_INFORMATION、CLUSTER_NAME、MARKETING_IDEAS 和 RATIONALE。

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

3.格式化 LLM 的响应

在这里, LLM 的响应为 markdown 报告格式。同时,从中间输出中使用变量名来设定报告的结构也非常方便。

# RESPONSE: MARKDOWN REPORT #<For each cluster in [CLUSTERS]>— Customer Group: [CLUSTER_NAME]— Profile: [CLUSTER_INFORMATION]— Marketing Ideas: [MARKETING_IDEAS]— Rationale: [RATIONALE]
<Annex>Give a table of the list of row numbers belonging to each cluster, in order to back up your analysis. Use these table headers: [[CLUSTER_NAME], List of Rows].

4.将任务指令与数据集分离 

在第一个Prompt中从未将数据集提供给 LLM。相反,Prompt仅给出了数据集分析的任务说明,并添加了以下内容:

# START ANALYSIS #If you understand, ask me for my dataset.
ChatGPT 随后表示理解,我们在下一个提示中以 CSV 字符串的形式将数据集传递给了它:


这样做的好处是帮助 LLM 更清晰地理解每个指令,降低遗漏信息的可能性,尤其是在像这样指令较长的复杂任务中。通过首先接收指令,然后再接收指令所针对的数据集,LLM 可以先消化它应该做什么,然后再在提供的数据集上执行它。
原文链接:https://towardsdatascience.com/how-i-won-singapores-gpt-4-prompt-engineering-competition-34c195a93d41#183c


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询