提示工程:CO-STAR框架

news2024/11/24 11:58:02

在人工智能领域,尤其是大型语言模型(LLM)的应用中,提示工程已成为一项至关重要的技能。它不仅需要对技术有深刻的理解,还需要创造力和战略思维的结合。本文将探讨提示工程的重要性,详细介绍CO-STAR框架的使用,分隔符的运用,LLM护栏的概念,以及何时使用LLM进行数据分析的决策指南。

 

40e23ae9685c9b7ed8b4beb47b919767.png

提示工程的重要性

提示工程是与LLM有效沟通的艺术。一个好的提示可以引导模型提供准确、相关且有用的回答。提示工程要求我们不仅要理解我们想要模型做什么,还要了解如何表达这些需求,使其能够以最有效的方式执行。

CO-STAR框架

CO-STAR框架是一种系统化的方法,用于构建有效的提示词,以从大型语言模型(LLM)中获取最佳回复。这个框架由新加坡政府科技部的数据科学与人工智能团队开发,它包含六个关键要素:上下文(Context)、目标(Objective)、风格(Style)、语气(Tone)、受众(Audience)和回复(Response)。下面我们将深入探讨每个要素,并提供实际应用的示例。

 

82c10750f0e9420b55a3dd4697614090.jpeg

上下文(Context)

上下文是提示的背景信息,它帮助LLM理解任务的具体情况。在构建提示时,提供充分的上下文可以确保LLM的回答是相关和准确的。

示例:
假设你正在为一款新手机撰写产品描述,上下文可能包括手机的品牌、型号、主要功能和技术规格。

目标(Objective)

目标是你想通过LLM完成的具体任务。明确的目标可以让LLM集中精力生成符合需求的回答。

示例:
目标可能是“创建一个吸引人的产品描述,突出手机的创新特性,以吸引技术爱好者”。

风格(Style)

风格指导LLM在生成回答时采用特定的写作方式。这可以是模仿特定名人的风格,或者符合特定行业标准的风格。

示例:
风格可以是“技术性且充满激情的,类似于史蒂夫·乔布斯的产品发布会演讲”。

语气(Tone)

语气决定了回答的情感色彩,它可以是正式的、幽默的、鼓舞人心的,等等。

示例:
语气可以是“兴奋和启发性的,传达出对最新技术进步的热情”。

受众(Audience)

受众是你希望接收LLM回答的目标群体。了解受众可以帮助定制化回答,以满足他们的期望和需求。

示例:
受众可能是“年轻的、对最新科技趋势有高度认知的技术爱好者”。

回复(Response)

回复是LLM输出的格式和结构。它可以根据需要是一段文本、列表、图表或其他任何形式。

示例:
回复格式可能是“一个结构化的段落,首先介绍手机的主要特点,然后是技术规格,最后是一个强有力的号召性结论”。

CO-STAR框架的实际应用

应用示例:社交媒体经理的Facebook帖子

假设你是一名社交媒体经理,需要为公司的新产品——一款新型超快速吹风机——在Facebook上创建一个帖子。

没有CO-STAR的提示:

37fa88bef11961400f854a39ab2e0997.png

使用CO-STAR的提示:

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

# 目标 #
为我创建一个Facebook帖子,目的是让人们点击产品链接购买它。

# 风格 #
效仿戴森等宣传类似产品的成功公司的写作风格。

# 语气 #
有说服力的。

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

# 回复 #
Facebook上的帖子,简明扼要而又富有感染力。

 

6fdd6ea0782566bbddeeff52108c7a15.png

LLM的交互技巧

为了进一步优化与LLM的交互,以下是一些额外的技巧:

  1. 明确具体:在提供上下文和目标时,尽可能具体明确,避免模糊不清的描述。
  2. 风格一致性:确保所选风格与品牌声音和目标受众的期望一致。
  3. 语气匹配:语气应该与内容的风格和受众的偏好相匹配。
  4. 受众研究:深入了解目标受众,包括他们的喜好、厌恶和行为模式。
  5. 回复格式化:在请求中指定回复的格式,使LLM的输出可以直接用于所需的上下文。

 

CO-STAR框架提供了一种结构化的方法来构建有效的提示,可以显著提高LLM生成内容的质量和相关性,通过深入理解每个要素并结合实际应用示例,我们可以更有效地利用LLM的能力,创造出符合我们需求的内容。

分隔符的使用

分隔符在提示工程中扮演着至关重要的角色,尤其是在处理复杂任务时。它们帮助LLM识别提示的不同部分,识别提示中不同的逻辑单元,使用如###===>>>>>>等特殊字符序列作为分隔符,可以显著提高复杂任务的处理效果,从而更准确地理解和回应用户的需求。

分隔符的类型

  1. 特殊字符序列:如###===>>>>>等,这些不常见的字符组合可以让LLM识别出提示的不同部分。
  2. XML标签:利用LLM对XML格式的熟悉,使用如<对话><类>等标签来组织提示信息。

实际应用示例

假设我们需要对一系列客户反馈进行情感分析,区分积极和消极反馈。

无分隔符的提示

客户反馈如下:
- 产品非常好,我非常满意。
- 产品与描述不符,我不满意。
请分类这些反馈。

使用分隔符的提示

# 客户反馈 #
- 产品非常好,我非常满意。
- 产品与描述不符,我不满意。

# 分类 #
积极
消极

在这个例子中,通过使用#符号作为分隔符,清晰地区分了输入数据和所需的操作,从而帮助LLM更准确地理解任务。

<类>

积极

消极

</类>

 

<对话示例>

[Agent]:早上好,有什么可以帮你?

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

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

 

[Agent]:早上好,有什么可以帮你?

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

</对话示例>
 

<示例类>

积极

消极

</示例类>
 

<对话>

[Agent]:你好!欢迎来到我们的支持中心。有什么可以帮你?

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

[Agent]:很高兴听到这个消息!还有什么需要我帮忙的吗?

[顾客]:没有了。我只想给你一些积极的反馈。谢谢你们的优质服务!

 

[Agent]:你好,感谢你的联系。有什么可以帮你?

[顾客]:我对最近购买的产品非常失望。和我预期的完全不一样。

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

[顾客]:产品的质量很差,而且很晚才送到。我对这次经历非常不满意。

</对话>

LLM护栏

LLM护栏是指在与LLM交互时设置的一系列规则和限制,以确保对话的安全性和适当性。它包括任务定义、输出格式和安全规则,确保LLM在预设的参数内运行,输出符合特定的要求和标准。

LLM护栏的组成

  1. 任务定义:明确LLM在整个交互过程中需要完成的任务。
  2. 输出格式:指定LLM输出的格式,如JSON、文本段落等。
  3. 安全规则:设置LLM在回答问题时应遵守的规则,如避免敏感话题。

实际应用示例

假设我们正在开发一个聊天机器人,需要确保其回答既准确又安全。

系统提示设置

你将使用此文本回答问题。你将以JSON格式回复,格式为{"问题": "答案"}。
如果问题无法回答,答案应为"NA"。避免回答任何涉及敏感话题的问题。

在这个设置中,定义了任务、输出格式和安全规则,配置用户与LLM之间的预期对话流,从而在聊天的不同点设置不同的护栏,使动态护栏随着聊天的进行而发展,为LLM提供了清晰的指导。

优化LLM交互

  1. 任务拆分:将复杂任务拆分为简单的步骤,并使用分隔符明确每个步骤。
  2. 明确指令:在提示中明确指出期望的输出格式和任何特定的回答规则。
  3. 使用XML标签:对于需要结构化输出的任务,使用XML标签来指导LLM的输出结构。
  4. 动态护栏:在交互的不同阶段根据需要调整LLM护栏,例如使用编程接口动态设置安全规则。
  5. 反馈循环:分析LLM的输出,根据结果调整提示和护栏设置,形成一个持续优化的循环。

使用LLM分析数据集

在数据分析领域,LLM可以作为一个强大的工具,但其应用需要根据分析任务的具体需求来决定。选择使用LLM分析数据集还是传统编程方法,取决于分析任务的性质。对于需要精确计算的任务,传统方法更为适合,而对于模式识别和趋势分析等任务,LLM可以提供快速且全面的分析。

LLM分析数据集

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

优势:

  1. 模式识别:LLM擅长在大量数据中识别模式和趋势,适用于异常检测、聚类分析、文本分析和趋势分析等任务。
  2. 无需精确计算:当任务不要求严格的数学精度时,LLM可以提供快速的洞察和概括性分析。
  3. 探索性数据分析:在数据探索阶段,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],行列表]。


 

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


 

#开始分析#

如果你能理解,请向我索要我的数据集。

 

提示工程技术

有效的提示工程需要以下技巧:

提示工程技术

  1. 任务分解:将复杂任务分解为简单的步骤,使LLM能够逐步处理。LLM擅长完成简单的任务,但对于复杂的任务就不那么擅长了。因此,对于像这样的复杂任务,重要的是要把任务分解成简单的步骤说明,让LLM遵循。这样做的目的是,向LLM提供你自己执行任务时会采取的步骤。
  2. 中间产出引用:为每个步骤的输出定义明确的变量名,并在后续步骤中引用这些变量。如在向LLM提供分步流程时,我们会给每个步骤的中间输出一个大写的变量名,即 CLUSTERS、CLUSTER_INFORMATION、CLUSTER_NAME、MARKETING_IDEAS和RATIONALE。

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

  1. 格式规范:指定LLM回复的格式,确保输出的可读性和实用性。如要求使用markdown报告格式,以美化LLM的回复。可结合第二步中间输出中的变量名,调整报告的结构。
  2. 指令与数据分离:先提供任务指令,再提供相关数据,避免LLM在处理长提示时遗漏信息。把指令和数据集分开可以帮助LLM保持对每条指令的清晰理解,降低遗漏信息的可能性,尤其是像本任务这样指令较长的复杂任务。即避免LLM「不小心遗忘」了作为较长提示的一部分给出的某个指令。

 

结语

提示工程是与LLM有效合作的关键。通过理解并应用CO-STAR框架、分隔符、LLM护栏和适当的任务分解技术,我们可以最大化LLM的潜力,获得更准确、更有用的输出。

与LLM交互时可参考流程:

  1. 数据预处理:在将数据集提供给LLM之前,进行必要的清洗和格式化,以确保LLM能够正确理解数据。
  2. 逐步引导:通过分步提示,逐步引导LLM完成任务,而不是一次性给出所有指令。
  3. 反馈循环:根据LLM的输出结果,不断调整和优化提示,以提高准确性和相关性。
  4. 利用LLM的创造性:在分析中不仅要求模式识别,还可以要求LLM提出假设或创造性的见解。
  5. 结合定量分析:在需要精确计算的情况下,将LLM的定性分析与定量分析工具相结合,以获得更全面的视角。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0209-开发状态切换(场景切换)功能

一、设置场景状态 1、已有方法 2、实现步骤 引用API&#xff1a;using UnityEngine.SceneManagement 写设置场景状态的方法 场景名字切换&#xff0c;需要获取mSceneName&#xff0c;他是私有的&#xff0c;给一个getset 3、问题 &#xff08;1&#xff09;同步加载 加载场…

【Web开发手礼】探索Web开发的秘密(十六)-Vue2(2)前端工程化、Element组件表格、分页

主要介绍了前端工程化Vue的开发流程、Element组件介绍以及常见的Element组件表格、分页&#xff01;&#xff01;&#xff01; 目录 前言 前端工程化 Vue项目-创建 Vue项目-目录结构 Vue项目-启动 Vue项目-配置端口 Vue项目开发流程 Element组件 快速入门 常见组件 表格…

2024杭电多校(4) 1008. 树形DNA【01Trie、哈希】

题意 给定两颗二叉树 S S S 和 T T T&#xff0c;如果对于 S S S 的某个子树 S ′ S^\prime S′&#xff0c;删除若干个&#xff08;或不删除&#xff09;其子树后&#xff0c;可以和 T T T 相同&#xff08;左子树与左子树匹配&#xff0c;右子树与右子树匹配&#xff0…

C++入门基础知识

在之前我们学习了C语言和初阶数据结构的相关知识&#xff0c;现在已经有了一定的代码能力和对数据结构也有了基础的认识&#xff0c;接下来我们将进入到新的专题当中&#xff0c;这个专题就是C。在C中我们需要花费更大的精力和更长的时间去学习这门建立在C语言基础之上的计算机…

新一代AI软件基础设施 | ZStack AIOS平台“智塔”发布

新一代 IT 基础设施&#xff0c;将从通用算力云平台转型为AI算力AIOS平台。 AI正在重构世界。正如世界是立体的&#xff0c;AI重构也正从多维度开启&#xff1a;基础设施重构&#xff0c;业务应用重构&#xff0c;交互模式重构&#xff0c;数据价值重构&#xff0c;生态系统重…

移动IP:让你的设备随时随地保持连接

随着无线网络技术的迅猛发展&#xff0c;在移动中进行数据通信已成为可能。成千上万的人正在使用移动设备畅享互联网&#xff0c;无论是在火车上、汽车内&#xff0c;还是在其他移动场景中。本文将带你了解移动IP&#xff08;Mobile IP&#xff09;的工作原理及其对网络应用的影…

LLM在线理解;神将网络理解;transform架构

目录 LLM在线理解 神将网络理解 transform架构 模型的子结构: 三个计算 计算1 计算2 计算3 LLM在线理解 LLM Visualization 神将网络理解 transform架构 模型的子结构: 词向量(Embedding) 前馈神经网络(Feed Forward) 残差连接(Add)和层标准化(Norm) 线性层(Linear…

Python版本和cuda版本不匹配解决办法

一、检查版本是否匹配 使用Python进入控制台&#xff0c;然后执行&#xff1a; >>>print(torch.cuda.is_available())如果输出为 False&#xff0c;则说明不匹配 退出Python环境&#xff0c;再检查系统版本&#xff1a; exit()nvcc -V 二、安装 去官网 PyTorch …

转载一篇关于对Linux磁盘部分mount和挂载的解释

转载自: http://t.csdnimg.cn/V3lgahttp://t.csdnimg.cn/V3lga

3_stm32_pwm呼吸灯

到目前已经可以进行基础的Led亮灭控制、使用定时器中断控制Led的亮灭。但是发现Led只有“亮”和 “灭”两种状态&#xff0c;那是否可以有更多状态&#xff1f;如何有更多状态呢&#xff1f;更进一步的想法&#xff0c;Led亮是有了电压差&#xff0c;其中一端是地&#xff0c;那…

C#:具体类=>抽象类=>接口的变化过程详解

文章目录 简单复习继承与多态具体类抽象类及成员使用语法 接口抽象类到接口的进化 简单复习继承与多态 下面,我用一个交通工具的例子来快速复习一下. 1.首先我定义一个基类Vehicle,代表交通工具的总称.里面定义了一个可被重写的成员方法Run. class Vehicle{public virtual voi…

Python Flask+Echarts实现葡萄酒质量的影响因素分析可视化

提示&#xff1a;本文章参考了哔哩哔哩的python课程李巍老师的 视频教程 文章目录 前言一、相关技术1.Flask2.Echarts3.词云 二、代码部分1.5个前端页面&#xff1a;2.代码 效果图 前言 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析&#xff0c;将它们加以汇总…

代码随想录算法训练营第六天(一)|242.有效的字母异位词

LeetCode 242 有效的字母异位词 题目&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…

韦东山嵌入式linux系列-mmap

应用程序和驱动程序之间传递数据时&#xff0c;可以通过read、 write函数进行。这涉及在用户态 buffer 和内核态 buffer 之间传数据&#xff0c;如下图所示 应用程序不能直接读写驱动程序中的buffer&#xff0c;需要在用户态 buffer 和内核态 buffer 之间进行一次数据拷贝。这种…

6.1.面向对象技术-面向对象相关概念

基本概念 对象&#xff1a;基本的运行实体&#xff0c;为类的实例&#xff0c;封装了数据和行为的整体(数据和行为就是属性和方法)&#xff0c;如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。 学生有张三、李四等。张三就是具体的个体&#xf…

Java哈希算法

哈希算法 哈希算法1.概述2.哈希碰撞3.常用的哈希算法4.哈希算法的用途4.1校验下载文件4.2存储用户密码MD5加密5.SHA-1加密小结&#xff1a; 哈希算法 1.概述 哈希算法&#xff08;Hash&#xff09;又称摘要算法&#xff08;Digest&#xff09;&#xff0c;它的作用是&#xf…

OrangePi AIpro学习3 —— vscode开发昇腾DVPP程序

目录 一、VScode配置 1.1 下载和安装 1.2 安装和配置需要的插件 二、构建项目 2.1 项目架构 2.2 解决代码高亮显示 2.3 测试编译 2.4 总结出最简单的代码 2.5 vscode报错找不到头文件解决方法 三、代码简单讲解 3.1 初始化部分 3.2 拷贝数据到NPU显存中 3.3 准备裁…

Leetcode每日一题之仅仅反转字母(C++)

在学习之余对于知识的巩固也尤为重要&#xff0c;不论难度高低&#xff0c;都会对代码的理解有所加深&#xff0c;下面我们开始练习 思路解析 关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的&#xff0c;这里用到的知识就是关于 s…

【数据结构与算法 | 二叉树篇】AVL树

1. 前言 AVL树是一种自平衡的二叉搜索树。为什么会出现AVL树。众所周知&#xff0c;虽然普通的二叉搜索树的平均时间复杂度为O(logn)&#xff0c;但最差的情况的时间复杂度为O(n)。为了避免最差的这种情况&#xff0c;出现了AVL树。 我们规定&#xff1a;如果树有个节点它的左…

大模型LLM——微调的七种方法

大模型的七种微调方法 文章目录 大模型的七种微调方法1. LoRA2. QLoRA3. 适配器调整4. 前缀调整5. 提示调整6. P-Tuning7. P-Tuning v2 1. LoRA LoRA的主要步骤包括&#xff1a; 选择微调目标权重矩阵&#xff1a;首先在大型模型&#xff08;如GPT&#xff09;中识别需要微调…