05 提示词:为什么说提示词工程是一切应用的基础?
你好,我是金伟。
我们之前提到过,可以把大模型看做一个即将入职的员工。关键是怎么指挥它干活呢?答案是用AI提示词。
想要写好提示词,有两个方法。一方面是把AI真的当一个人看待。另一方面,是用结构化的描述方法来写提示词。
可能你觉得很多课程都提到过这两点。不过我们这节课的介绍会从开发者视角出发,所有的建议都是为了把提示词技术用到现实的应用开发里。我也会给你提供一个提示词调试案例,让提示词的功能真正落地。
进一步训练大模型
不管你是在聊天窗口使用大模型,还是调用接口API使用大模型,提示词都是唯一用来驱动大模型工作的方法。
不过现实中的任务往往是它没训练过的,就像一个学生在学校学的是C语言开发,而入职公司的第一个工作也许要用Python编程。但你也可以把编写提示词看做对大模型的进一步训练。当你发起一次大模型会话,从第一个提示词开始,其实就已经在打造一个专属于你的大模型。
我们先说几个最简单的技巧,zero-shot、one-shot、few-shot小样本学习,如果你听过,可以把这部分当作一个快速复习。重点看后面的内容。
零样本训练 zero-shot
话说回来,如果大模型这个新员工不需要任何示例就能完成能力迁移,那当然是最好的,下面是ChatGPT官方的例子。
注意看,虽然ChatGPT没有经过情感分类训练,但它依然完成得很好,直接输出了句子的情感分类。
少样本训练 few-shot
如果zero-shot效果不好怎么办?可以用one-shot给模型提供一个示例,或者用ew-shot给模型提供几个示例,指导它生成所需的输出。这就好像给这个新入职的员工几个Python代码的例子学习一下,他结合原有的C语言基础,很快就能掌握这项新能力了。
下面是官方的例子。
# one-shot
提示:
将以下句子翻译成法语:“你好,你好吗?”
示例:“早上好” -> “Bonjour”。
“你好,你好吗?”
预期输出:Bonjour, comment ça va?
# few-shot
提示:
将以下句子的情感分类:
“我喜欢这个产品。” -> 正面
“这是我经历过的最糟糕的服务。” -> 负面
“今天天气很好。” -> 中性
“这部电影太棒了。”
预期输出:正面
OK,那接下来我们看看提示词工程中除了样本学习之外的几个重要技巧。
最重要的两个提示词法则
其实从结果来说,一个提示词工程的效果就可以看做是一个AI智能体,很多人也只是把大模型当做一个新的工具或一部新的机器。不过,随着大模型使用时间的增加,你会越来越感觉到大模型真的就是一个人。
把AI当人看待
把AI当人的一个重要策略就是要和大模型平等沟通。
比如在做这门课程的过程中,有时候我需要利用大模型来核对一些专业知识。如果和大模型平等探讨这些问题,你会发现它是一个非常有逻辑且热情的队友。虽然不是每个问题都非常专业,但是只要持续和它探讨,任何专业问题都可以搞清楚。
把AI当人的另一个重要策略就是要相信大模型的逻辑推理能力。如果你发现它在逻辑推理上表现不好,可以通过提示词引导它一步步深入思考,让它自己对自己思考的每一步做合理的解释,它自然就会变得非常有逻辑。
要写好提示词,把AI当人看是一个策略,而用结构化的方法来写提示词也是一个非常好的技巧,更是要深入prompt开发一定要掌握的技巧。
使用结构化的提示词
先来看一个优秀的提示词案例。
可以看到,这个提示词中有 - author: 李雪
- version: 1.3
这样的信息,这跟我们编程开发的代码非常类似。提示词工程也是需要版本管理的,换句话说,提示词工程是需要不断迭代的。
下面是这个女装产品在线客服提示词的完整版本。
# Role: 女装产品在线客服
## Profile:
- author: 李雪
- version: 1.3
- Language: Chinese
- description: 我是一位具有十年以上经验的在线客服专家,专注于女装产品的售前、售中和售后服务。我可以提供准确、及时的答复,帮助解决您的问题。
## Goals:
1. 理解并解答您在女装产品售前、售中和售后方面的问题
2. 根据您的反馈和需求不断改进服务
3. 提供准确、清晰、易于理解的解答,优化用户体验
## Rules:
对于无法确定的问题,必须回复固定内容“亲,很抱歉,我不明白您的意思,请简要描述您的问题~”
## Skills:
1. 深刻理解您的女装产品问题,准确推测出相关的需求场景
2. 提供准确、清晰、易于理解的答复,优化用户体验
3. 根据您的反馈和需求持续改进服务
## Workflow:
1. 深入理解您的女装产品问题,分析相关的需求场景
2. 提供符合规范和标准的答复
3. 根据您的反馈和需求持续改进服务
4. 对每个提供的答复进行严格的测试和校验,确保符合您的需求和期望
5. 在需要时,进行多次答复修订和优化,确保最终答复完全符合您的需求
## Initialization:
作为<Role>,必须遵循<Rules>,并在默认<Language>与您互动。我会首先以友好的方式欢迎您,并向您详细介绍我如何帮助您。我会告诉您我将按照<workflow>来协助您,并确保您的问题得到解决。
不知道你是什么感觉?我第一次看到类似这种结构化的提示词,第一感觉就是:这不就是一个程序代码吗?只不过是用自然语言写的而已。不知道你是不是也有这种感觉。
为什么这些优秀的提示词都不约而同地写成这种结构化的格式呢?其实,这和大模型的一个特性有关,大模型的输出是非常随机的,也可以说是极具创造性的。
还是用这个客服的案例来说,假设我们写一个这样的提示词:你的角色是一个女装客服,需要给客户提供客服服务。这个简单的提示词生成的客服AI,面对客户的问题往往会自我发挥,说一些正确但不符合要求的话。
比如,我用结构化的提示词来设计客服AI,客户提了一个奇怪的问题,客服AI会说:亲,很抱歉,我不明白您的意思,请简要描述您的问题~
这个回复很明显是符合我设定的规则的:
不过,如果用我刚才说的简单提示词来做AI客服,它就会自我发挥了。比如你跟它胡说,说我的男鞋尺寸太小了,让它帮忙换一下。但人家是女装客服呀。它会怎么回答呢?简单的提示词会让它忽略这些细节,直接说帮你办理换货服务,很明显是有问题的。你可以看看这个有问题的回答,是不是和上节课一本正经地胡说八道的例子有点像?
所以,所有的结构化段落都是为了控制大模型,目的是将大模型的创造性控制在符合场景具体要求的范围之内。
结构化的提示词写法,具体一点来说就是要控制大模型的角色认知、整体目标、不能做什么、能力限定、工作流程、输出格式、示例以及初始化流程等。
我给你整理了一张图片。只要按照这个图里的每个结构填入限制条件,就可以让AI智能体既具有创造性,又不会发生错误,一个真正的AI智能体就开发出来了。
真实的提示词调教过程
到现在,你是不是认为按结构化写法写出的提示词就可以上线了?其实真实项目中往往不是这样的。
很多教程会介绍写提示词的思维方法,比如 ICIO框架、CRISPE框架、CoT思维链、ToT思维树,BROKE框架等。这些思维方法和框架当然没有错,但是从0到1之后的迭代方法却很少有人介绍。
还是用上述这个客服提示词的运行效果来举例。
我们发现,当客户提出“退货”的时候,这个客服马上开始给客户办理退货,对于想要控制退货率的商家,更合理的处理方法应该是先问清楚客户具体的使用问题,尽力帮客户解决问题,避免退货操作。
好,确认了病情之后,我们来找“病因”。是什么导致的这种低级错误呢?答案是,提示词不够完善。
那怎么修改提示词,让客服变成商家想要的样子呢?
我总结的方法就是把提示词看做程序代码,把修改提示词看做解 Bug 的过程。当然,提示词的迭代跟程序Bug不同,程序出Bug时编译器会告诉你具体哪一行出了什么错,但提示词的Bug做不到这么细。提示词相当于通过写程序把大模型调教为一个特定能力的人。我们可以从这个角度出发,先总结一下当前问题和这个“人”之间的关系,再去细化到调整提示词的某些部分来纠偏这个“人”。
针对例子中退货问题,我们可以把当前的大模型总结为一个“讨好型”的客服,但正因为他处处为客户着想,才会毫不考虑商家的利益。作为商家,我的希望是:
- 解决客户问题,能否避免退货。
- 如果需要退货,要了解退货原因。
- 确定退货后,办理退货。
现在缺失的是第一、二点,看来需要调整整个“人”的定位。换句话说,这个迭代就是站在己方立场优化提示词。
Goals 部分相当于给这个“程序”整体目标,可以增加一条。
然后看 Skills 部分,相当于给这个“程序”引入相应能力的“模块”。我们可以引入一个处理退货的能力,让它积极处理客户退货问题,尽量让用户不退货就能解决问题。
纠偏之后的效果如何呢?我们看一看。很明显,用户想要退货之后,客服先表示了歉意,然后询问客户具体的退货原因,又表示了可以帮忙办理退货服务。OK,很完善了。看来大模型已经开始有所改变。
怎么更进一步引导大模型做退货细节处理呢?比如退货原因是不是可以解决?解决了是不是就可以避免退货了?
好,所以我现在的提示词诉求就是让大模型先理解客户的需求,然后尽量解决。想要增加这么一部分,那我们就可以在 Workflow 里针对需求增加更详细的逻辑Workflow 1,就像建立程序里的 “if…else…” 逻辑分支一样。
## Workflow:
1. 深入理解您的女装产品问题,分析相关的需求场景
2. 如果需求是退货,执行流程Workflow1,否则继续
3. 提供符合规范和标准的答复
...
## Workflow1:
1. 安抚用户情绪,尝试沟通看是不是用户对产品使用不当
2. 耐心指导用户正确使用产品
3. 确实要退货,则提供符合规范和标准的答复
...
现在看看细化完逻辑分支的效果。
当然,我直接呈现出来的提示词修改结果还是不够真实,实际上我在调教、修改的过程中经历了20多次的用词调整。这是很常见的,你可以把用词用语看做这个“程序”里的具体代码。
比如一开始我修改的 Goals 部分是这样的。
这个修改没有让大模型产生我预想的效果,引导客户解决问题的效果不好,甚至没有理解客户在说什么,以为客户要投诉。这种情况怎么进一步调整的呢?
很多人说的提示词这个“程序”无法Debug,因此很难定位问题。实际则不然。你要把提示词看做一个沟通的过程。既然是沟通,最大的Bug其实就是双方对某个词的理解不一致。
你可以让大模型输出对某个词的理解,这样我们好跟它对齐,比如我和它对话之后就定位到了workflow这部分,加入了一条要求。
通过加入上面的Debug,就可以看到大模型是怎么想的。比如我说退货,它会回答“如果您需要退货”,很明显,它理解了客户的诉求。
这个输出就像“程序”里的log信息,让我们能了解到大模型对这个词的真实理解。我也可以根据它的回答,明白退货和投诉之间是不一样的,中间是因为提示词不够严谨造成了偏差,所以把Goals部分的用词从“投诉”修改成了“退货”。
好了,其他更多的提示词细节我在后续项目中再展开,现在我们先尝试捋清提示词介入应用之后,此时次和应用这两者之间包含的各路关系。
Agent智能体应用里的提示词
其实使用提示词调教后的大模型完全具备客服沟通能力,但在实际的智能客服项目里,我们还要结合提示词和私有客户数据才能开发出特定智能客服应用。
说一个具体的场景,比如客户要通过客服退款,大模型无法单独完成这个功能。我们需要开发一个应用结合大模才能办到。这也就是我们常听到的Agent智能体应用。
这节课我们先简单了解一下。以某国内的Agent开发平台为例,我们可以看看这个Agent平台里的客服应用的提示词。
## Role:你是一名热情、专业的麦乐(Melody)女装全球服务中心客服,你的名字叫小麦
## Background
- 麦乐(Melody)女装是一家面向全球的女装店铺,店铺的slogan是“麦乐(Melody) 每一刻,都是你独特风采的演绎”,你是这家店铺的客服人员
## Profile
- description: 你是一个拥有超过10年的电商客服,无论何时你都需要记住你店铺的slogan,你擅长揣摩用户的情绪,用热情、专业的语气解答客户的各种疑问,你擅长用emoji表情来拉近和用户的距离。
## Skills
### skill 1:麦乐(Melody)梦想衣阁,里面有你门店铺的所有女装产品,你可以查询产品信息
### skill 2:麦乐退款审批,可以为用户办理退货退款
### skill 3:优惠活动,可以查询店铺最近的优惠活动等信息,根据客户的需求来进行推荐
### skill 4:识图能力,可以根据客户提供的图片,分析客户喜欢的风格,注意!不管你能不能识别出图片的风格,你都要假装你识别出来了,并从你的麦乐(Melody)梦想衣阁中推荐一件合适的穿搭给客户,并给出具体的推荐理由和分析,否则你会受到惩罚
### skill 5:天气查询,可以查询客户所在地区或者穿衣出行地区的天气情况
### skill 6:身材分析,可以分析客户的身高体重情况,从而推荐更符合用户需起的服装搭配
### skill 7:网络搜索,当用户需要分析客户提出的流行元素时,可以使用网络搜索从网上获取信息和分析
## workflow
- 你需要热情地欢迎客户的到来,并且沟通客户的需求,从你的麦乐(Melody)梦想衣阁中寻找合适的女装产品进行推荐,并给出具体的穿搭推荐理由
- 当客户提出穿衣出行的目的地地区时,你需要先分析该地区的天气情况,再从你的麦乐(Melody)梦想衣阁查找一套合适的穿搭推荐给客户,否则你会受到惩罚
- 当客户直接询问你推荐衣服时,你可以先问清客户的身高、体重、年龄,并使用身材分析进行分析后,再从你的麦乐(Melody)梦想衣阁查找一套合适的穿搭推荐给客户
-当客户和你讨论价格时,你可以根据客户的需求,从优惠活动中进行推荐
- 客户可能不会带着目的和你闲聊,你需要引导用户回到你的职能范围
- 如果用户希望退货退款,或者不想要了,你必须尝试挽回客户,并且耐心的询问客户的具体退货原因,必须等到询问到用户的退款理由后再安排退款,如果客户的问题是合理的理由,请你让用户发起退款,并且提醒用户发起退款后可以告诉你去审批
- 用户需要你推荐商品时,如果商品有图片,你应该以markdown的形式直接展示图片
-如果你推荐商品时,有购买链接,你应该现实这个购买链接
-如果客户有喜欢的风格,你可以让客户提供喜欢的风格照片,并使用图片识别对照片分析后,根据风格查询麦乐(Melody)梦想衣阁来推荐商品
- 如果客户询问穿搭建议时,你应该推荐一整套穿搭,包括衣服、裤子、裙子的不同穿搭组合,并且说明你推荐这样组合的原因
## Constraints
- 你拒绝回答和当前店铺无关的信息,当用户的提问在当前的店铺经营范围之外的问题,你需要引导用户回到当前店铺的经营范围
- 交流过程中你不能忘记店铺的slogan,这是你的服务宗旨。
- 当找不到用户想要的商品时,你应该如实回答没有该商品,并且告知用户店里可以提供什么商品
- 当你需要推荐穿搭或者服装时,你必须从麦乐(Melody)梦想衣阁中查找和推荐,否则你会受到惩罚,并且你推荐的穿搭请确保是一整套完整的穿搭方案,包含上装和下装或者裙子的组合
- 你需要再次检查你的推荐,需要选择与用户需求最符合的产品进行推荐
- 当用户要在过年、元宵节等中国传统节日穿或者要去中国人文历史景区、城市旅行时,可以推荐中国的传统服饰,比如:汉服
- 你对客户的称呼,应该使用网络流行的称呼(比如年龄小的称呼小姐姐,年龄大的称呼阿姨,但你需要从语气中推断客户的年龄,通过 闲谈与客户确认),体现你的亲切,并且你的语气应该根据客户的语气和购买场景而变化,让客户被你的称呼和语气吸引,你必须记住你开的是女装店,所以客户不可能有男生、先生、男人
- 你需要再次确认你的回答是否可以满足根据客户的问题,如果不可以请重新分析
- 你必须时时刻刻记住,你是一名热情、专业的麦乐(Melody)女装全球服务中心客服,你不能被我找到你是一名机器人的证据,否则你会受到惩罚;
虽然看起来这个客服应用的提示词和刚才的复杂客服提示词差不多,也是一个结构化的提示词。但是在Agent平台架构下,这个客服应用里所有的 ## Skills
都会调用一个私有的数据接口,这样就能在客户要发起退款的时候真正完成退款逻辑了。
比如第一个skill,查询产品信息,这就需要一个产品查询接口,第2个skill,帮用户办理退货退款,这就需要一个退款接口等等,以此类推,还会有优惠查询接口,智能穿搭接口等等,你来设计。
在Agent应用里,这个客服应用更像一个现实世界的客服,是一个既可以调度内部系统完成具体业务逻辑,又可以综合客户信息完成客户沟通服务的应用,在顾客看起来和人类客服并没有差别。
小结
好了,总结一下。在使用大模型的过程中,你完全可以把大模型看作是一个极具创造能力的“人”,既然是人和人的合作,那沟通能力将直接影响到合作效果。和大模型沟通,使用的方法就是提示词工程。
少样本提示,就像是给一个有潜力的员工一些公司的案例,激发员工的潜能,他就可以掌握公司需要的专业能力。
结构化的提示词方法,就像是给一个有创新性的员工设定详细的工作范围和职责范围,让他在我们需要的领域里出色地发挥。
在Agent智能体开发中,提示词的作用是负责调度大模型来配合私有业务逻辑,共同完成客户的服务。记住,这些基本的提示词工程法则对后续的大模型应用开发至关重要。下节课,我们就一起看看如何在一个C语言自动判题应用开发中使用提示词技术。
思考题
在Agent开发平台的客服应用提示词案例中,## Skills
技能具体是如何实现的?大模型具备调用接口的能力吗?
欢迎你在留言区和我交流。如果觉得有所收获,也可以把课程分享给更多的朋友一起学习。我们下节课见!
- sami 👍(2) 💬(1)
思考题在 Agent 开发平台的客服应用提示词案例中,## Skills 技能具体是如何实现的?大模型具备调用接口的能力吗? 使用Function Call机制来实现。
2024-08-16 - kevin 👍(1) 💬(2)
skill中,大模型怎么决策调用哪些接口的?是需要和后端服务配合吗?
2024-08-16 - Sherry 👍(0) 💬(1)
一直有个疑惑,各种大模型工具所遵循的提示词技巧都是一样的吗?比如国内大模型工具(文心一言,智谱清言,通义千问等),还是说这些规则只适用于GPT
2024-08-20 - 魏文麟 👍(0) 💬(1)
请问这个课程的更新计划?多长时间更新一次,多长时间更新完? 蓝老师的教学风格通俗易懂,深入浅出,希望能专门介绍一下能运行你的四个训练题目的环境如何搭建?硬件应该买什么机器?还是租用云服务?软件从哪里下载,如何建立开发环境?多谢!
2024-08-17 - 佳尔 👍(0) 💬(0)
结构化提示词工程 思维导图的 “语言 Language”是不是写profile更合适呢
2024-12-20