微信扫码
与创始人交个朋友
我要投稿
内容包含四个部分:
[基础] 使用 CO-STAR 框架构建提示
[基础] 使用分隔符分段提示
[高级] 使用 LLM 护栏创建系统提示
[高级] 仅使用 LLM 分析数据集,无需插件或代码 (使用 GPT-4 分析真实 Kaggle 数据集的示例)
以下是结合其内容的简单总结:
具体实例比较:
场景:假设你是一名社交媒体经理,你需要帮助起草一篇 Facebook 帖子来宣传你公司的新产品。
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上的帖子简洁而有影响力。
??【Alpha公司新品发布】??
致亲爱的朋友们,我们很高兴地向您推出我们新一代的产品——Beta超快吹风机!??
沿着戴森的卓越传统,Beta吹风机结合了快速、高效和温柔-全部装在一台设计精美的工具里。?
您是否厌倦了等待头发干燥的漫长时间?是否在寻找一款吹风机,既可以快速干燥头发,又能全程呵护秀发,避免发质受损?
Beta是您一直在寻找的答案!❤️?
它速度快,能够在最短的时间内达到最佳的干燥效果。更重要的是,我们的独家温控科技确保了温度始终适中,既不会对头发造成损害,也不会让您的头皮感到不适。?✨
走到人群中,洋溢着自信,让人眼前一亮的那个人,就是您!点击下方的链接,立即购买我们的Beta超快吹风机,走在最前端的流行趋势上,给您的日常生活带来便利!??
Alpha公司与您一起,让美丽变得如此简单!??
[产品链接]
立即行动,让我们一起享受快乐,享受美丽,享受生活吧!?
2.使用分隔符给Prompt分段
示例:
Classify the sentiment of each conversation in <<<CONVERSATIONS>>> as
‘Positive’ or ‘Negative’. Give the sentiment classifications without any other preamble text.
EXAMPLE CONVERSATIONS
[ ]: Good morning, how can I assist you today?
[is terrible, nothing like what was advertised! ]: This product
[ ]: I’m extremely disappointed and expect a full refund.
[ ]: Good morning, how can I help you today?
[ ]: Hi, I just wanted to say that I’m really impressed with your
product. It exceeded my expectations!
EXAMPLE OUTPUTS
Negative
Positive
<<<
[ ]: Hello! Welcome to our support. How can I help you today?
[let you know I received my order, and ]: Hi there! I just wanted to
it’s fantastic!
[ ]: That’s great to hear! We’re thrilled you’re happy with your purchase.
Is there anything else I can assist you with?
[ ]: No, that’s it. Just wanted to give some positive feedback. Thanks
for your excellent service!
[for reaching out. How can I assist you today? ]: Hello, thank you
[ ]: I’m very disappointed with my recent purchase. It’s not what I expected at all.
[ ]: I’m sorry to hear that. Could you please provide more details so I can help?
[is of poor quality and it arrived late. I’m really ]: The product
unhappy 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 分析数据集,无需插件或编码
大模型不擅长精确数学计算或复杂、基于规则的任务处理,但大模型擅长识别模式和趋势分析,这种能力源于它们在大量不同数据上的广泛训练,使它们能够识别可能并不那么明显的复杂模式。这使得它们非常适合基于数据集内模式查找的任务,能在更短的时间内产生比使用代码更好的结果。
例如:
Kaggle真实数据集(https://www.kaggle.com/datasets/imakash3011/customer-personality-analysis),该数据集是为客户个性分析准备,试图细分其客户群,以便更好地了解其客户。
为了更轻松地验证 LLM 的分析结果,将此数据集拆分为 50 行,并仅保留最相关的列。之后,用于分析的数据集如下所示,其中每一行代表一个客户,列表示客户信息:
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回答及用户提供待分析数据
验证 LLM 的分析正确性
简单选择 LLM 生成的 2 个客户群体进行验证——例如,年轻家庭和眼光敏锐的爱好者。
LLM 生成的用户画像:出生于 1980 年之后,已婚或同居,收入中等偏低,有孩子,经常进行小额购买。
查看实际的数据集:
这与 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每个步骤生成中间输出。
3.格式化 LLM 的响应
在这里, LLM 的响应为 markdown 报告格式。同时,从中间输出中使用变量名来设定报告的结构也非常方便。
<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.
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-04-11
2024-08-21
2024-07-09
2024-08-13
2024-07-18
2024-10-25
2024-07-01
2024-06-17