在人工智能领域,尤其是大型语言模型(LLM)的应用中,提示工程已成为一项至关重要的技能。它不仅需要对技术有深刻的理解,还需要创造力和战略思维的结合。本文将探讨提示工程的重要性,详细介绍CO-STAR框架的使用,分隔符的运用,LLM护栏的概念,以及何时使用LLM进行数据分析的决策指南。
提示工程的重要性
提示工程是与LLM有效沟通的艺术。一个好的提示可以引导模型提供准确、相关且有用的回答。提示工程要求我们不仅要理解我们想要模型做什么,还要了解如何表达这些需求,使其能够以最有效的方式执行。
CO-STAR框架
CO-STAR框架是一种系统化的方法,用于构建有效的提示词,以从大型语言模型(LLM)中获取最佳回复。这个框架由新加坡政府科技部的数据科学与人工智能团队开发,它包含六个关键要素:上下文(Context)、目标(Objective)、风格(Style)、语气(Tone)、受众(Audience)和回复(Response)。下面我们将深入探讨每个要素,并提供实际应用的示例。
上下文(Context)
上下文是提示的背景信息,它帮助LLM理解任务的具体情况。在构建提示时,提供充分的上下文可以确保LLM的回答是相关和准确的。
示例:
假设你正在为一款新手机撰写产品描述,上下文可能包括手机的品牌、型号、主要功能和技术规格。
目标(Objective)
目标是你想通过LLM完成的具体任务。明确的目标可以让LLM集中精力生成符合需求的回答。
示例:
目标可能是“创建一个吸引人的产品描述,突出手机的创新特性,以吸引技术爱好者”。
风格(Style)
风格指导LLM在生成回答时采用特定的写作方式。这可以是模仿特定名人的风格,或者符合特定行业标准的风格。
示例:
风格可以是“技术性且充满激情的,类似于史蒂夫·乔布斯的产品发布会演讲”。
语气(Tone)
语气决定了回答的情感色彩,它可以是正式的、幽默的、鼓舞人心的,等等。
示例:
语气可以是“兴奋和启发性的,传达出对最新技术进步的热情”。
受众(Audience)
受众是你希望接收LLM回答的目标群体。了解受众可以帮助定制化回答,以满足他们的期望和需求。
示例:
受众可能是“年轻的、对最新科技趋势有高度认知的技术爱好者”。
回复(Response)
回复是LLM输出的格式和结构。它可以根据需要是一段文本、列表、图表或其他任何形式。
示例:
回复格式可能是“一个结构化的段落,首先介绍手机的主要特点,然后是技术规格,最后是一个强有力的号召性结论”。
CO-STAR框架的实际应用
应用示例:社交媒体经理的Facebook帖子
假设你是一名社交媒体经理,需要为公司的新产品——一款新型超快速吹风机——在Facebook上创建一个帖子。
没有CO-STAR的提示:
使用CO-STAR的提示:
# 上下文 #
我想为我公司的新产品做广告。我的公司名叫Alpha,产品名叫Beta,是一种新型超快速吹风机。
# 目标 #
为我创建一个Facebook帖子,目的是让人们点击产品链接购买它。
# 风格 #
效仿戴森等宣传类似产品的成功公司的写作风格。
# 语气 #
有说服力的。
# 受众 #
我公司在Facebook上的受众通常是老一代人。请针对这部分受众通常对美发产品的要求,量身定制你的帖子。
# 回复 #
Facebook上的帖子,简明扼要而又富有感染力。
LLM的交互技巧
为了进一步优化与LLM的交互,以下是一些额外的技巧:
- 明确具体:在提供上下文和目标时,尽可能具体明确,避免模糊不清的描述。
- 风格一致性:确保所选风格与品牌声音和目标受众的期望一致。
- 语气匹配:语气应该与内容的风格和受众的偏好相匹配。
- 受众研究:深入了解目标受众,包括他们的喜好、厌恶和行为模式。
- 回复格式化:在请求中指定回复的格式,使LLM的输出可以直接用于所需的上下文。
CO-STAR框架提供了一种结构化的方法来构建有效的提示,可以显著提高LLM生成内容的质量和相关性,通过深入理解每个要素并结合实际应用示例,我们可以更有效地利用LLM的能力,创造出符合我们需求的内容。
分隔符的使用
分隔符在提示工程中扮演着至关重要的角色,尤其是在处理复杂任务时。它们帮助LLM识别提示的不同部分,识别提示中不同的逻辑单元,使用如###
、===
或>>>>>>
等特殊字符序列作为分隔符,可以显著提高复杂任务的处理效果,从而更准确地理解和回应用户的需求。
分隔符的类型
- 特殊字符序列:如
###
、===
或>>>>>
等,这些不常见的字符组合可以让LLM识别出提示的不同部分。 - XML标签:利用LLM对XML格式的熟悉,使用如
<对话>
、<类>
等标签来组织提示信息。
实际应用示例
假设我们需要对一系列客户反馈进行情感分析,区分积极和消极反馈。
无分隔符的提示:
客户反馈如下:
- 产品非常好,我非常满意。
- 产品与描述不符,我不满意。
请分类这些反馈。
使用分隔符的提示:
# 客户反馈 #
- 产品非常好,我非常满意。
- 产品与描述不符,我不满意。
# 分类 #
积极
消极
在这个例子中,通过使用#
符号作为分隔符,清晰地区分了输入数据和所需的操作,从而帮助LLM更准确地理解任务。
<类>
积极
消极
</类>
<对话示例>
[Agent]:早上好,有什么可以帮你?
[顾客]:这个产品太糟糕了,和广告上说的完全不一样!
[顾客]:我非常失望,希望全额退款。
[Agent]:早上好,有什么可以帮你?
[顾客]:你好,我只想说你们的产品留下了深刻印象。它超出了我的预期!
</对话示例>
<示例类>
积极
消极
</示例类>
<对话>
[Agent]:你好!欢迎来到我们的支持中心。有什么可以帮你?
[顾客]:你好!我只是想让你们知道我收到了我的订单,而且太棒了。
[Agent]:很高兴听到这个消息!还有什么需要我帮忙的吗?
[顾客]:没有了。我只想给你一些积极的反馈。谢谢你们的优质服务!
[Agent]:你好,感谢你的联系。有什么可以帮你?
[顾客]:我对最近购买的产品非常失望。和我预期的完全不一样。
[Agent]:很遗憾听到这个消息。能否请你提供更多详细信息,以便我提供帮助?
[顾客]:产品的质量很差,而且很晚才送到。我对这次经历非常不满意。
</对话>
LLM护栏
LLM护栏是指在与LLM交互时设置的一系列规则和限制,以确保对话的安全性和适当性。它包括任务定义、输出格式和安全规则,确保LLM在预设的参数内运行,输出符合特定的要求和标准。
LLM护栏的组成
- 任务定义:明确LLM在整个交互过程中需要完成的任务。
- 输出格式:指定LLM输出的格式,如JSON、文本段落等。
- 安全规则:设置LLM在回答问题时应遵守的规则,如避免敏感话题。
实际应用示例
假设我们正在开发一个聊天机器人,需要确保其回答既准确又安全。
系统提示设置:
你将使用此文本回答问题。你将以JSON格式回复,格式为{"问题": "答案"}。
如果问题无法回答,答案应为"NA"。避免回答任何涉及敏感话题的问题。
在这个设置中,定义了任务、输出格式和安全规则,配置用户与LLM之间的预期对话流,从而在聊天的不同点设置不同的护栏,使动态护栏随着聊天的进行而发展,为LLM提供了清晰的指导。
优化LLM交互
- 任务拆分:将复杂任务拆分为简单的步骤,并使用分隔符明确每个步骤。
- 明确指令:在提示中明确指出期望的输出格式和任何特定的回答规则。
- 使用XML标签:对于需要结构化输出的任务,使用XML标签来指导LLM的输出结构。
- 动态护栏:在交互的不同阶段根据需要调整LLM护栏,例如使用编程接口动态设置安全规则。
- 反馈循环:分析LLM的输出,根据结果调整提示和护栏设置,形成一个持续优化的循环。
使用LLM分析数据集
在数据分析领域,LLM可以作为一个强大的工具,但其应用需要根据分析任务的具体需求来决定。选择使用LLM分析数据集还是传统编程方法,取决于分析任务的性质。对于需要精确计算的任务,传统方法更为适合,而对于模式识别和趋势分析等任务,LLM可以提供快速且全面的分析。
LLM分析数据集
- 异常检测:根据一个或多个列值,识别偏离常规的异常数据点。
- 聚类:将各列中具有相似特征的数据点进行分组。
- 跨列关系:识别跨列的综合趋势。
- 文本分析(针对基于文本的列):根据主题或情感进行分类。
- 趋势分析(针对有时间方面的数据集):识别跨时间列内的模式、季节性变化或趋势。
优势:
- 模式识别:LLM擅长在大量数据中识别模式和趋势,适用于异常检测、聚类分析、文本分析和趋势分析等任务。
- 无需精确计算:当任务不要求严格的数学精度时,LLM可以提供快速的洞察和概括性分析。
- 探索性数据分析:在数据探索阶段,LLM可以帮助形成假设或理解数据的初步特征。
示例:一个零售商希望了解客户购买行为的模式。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],行列表]。
#############
#开始分析#
如果你能理解,请向我索要我的数据集。
提示工程技术
有效的提示工程需要以下技巧:
提示工程技术
- 任务分解:将复杂任务分解为简单的步骤,使LLM能够逐步处理。LLM擅长完成简单的任务,但对于复杂的任务就不那么擅长了。因此,对于像这样的复杂任务,重要的是要把任务分解成简单的步骤说明,让LLM遵循。这样做的目的是,向LLM提供你自己执行任务时会采取的步骤。
- 中间产出引用:为每个步骤的输出定义明确的变量名,并在后续步骤中引用这些变量。如在向LLM提供分步流程时,我们会给每个步骤的中间输出一个大写的变量名,即 CLUSTERS、CLUSTER_INFORMATION、CLUSTER_NAME、MARKETING_IDEAS和RATIONALE。
使用大写字母是为了将这些变量名与给出的指令正文区分开来。以后可以用方括号[VARIABLE_NAME]来引用这些中间输出。
- 格式规范:指定LLM回复的格式,确保输出的可读性和实用性。如要求使用markdown报告格式,以美化LLM的回复。可结合第二步中间输出中的变量名,调整报告的结构。
- 指令与数据分离:先提供任务指令,再提供相关数据,避免LLM在处理长提示时遗漏信息。把指令和数据集分开可以帮助LLM保持对每条指令的清晰理解,降低遗漏信息的可能性,尤其是像本任务这样指令较长的复杂任务。即避免LLM「不小心遗忘」了作为较长提示的一部分给出的某个指令。
结语
提示工程是与LLM有效合作的关键。通过理解并应用CO-STAR框架、分隔符、LLM护栏和适当的任务分解技术,我们可以最大化LLM的潜力,获得更准确、更有用的输出。
与LLM交互时可参考流程:
- 数据预处理:在将数据集提供给LLM之前,进行必要的清洗和格式化,以确保LLM能够正确理解数据。
- 逐步引导:通过分步提示,逐步引导LLM完成任务,而不是一次性给出所有指令。
- 反馈循环:根据LLM的输出结果,不断调整和优化提示,以提高准确性和相关性。
- 利用LLM的创造性:在分析中不仅要求模式识别,还可以要求LLM提出假设或创造性的见解。
- 结合定量分析:在需要精确计算的情况下,将LLM的定性分析与定量分析工具相结合,以获得更全面的视角。