提示词(Prompt)基础篇,小白入门请从此篇开始

1 评论 2565 浏览 4 收藏 17 分钟

在人工智能领域,大语言模型(LLM)的应用日益广泛,而提示词(Prompt)和提示词工程(Prompt Engineering)则是与这些模型交互的关键工具。

一、提示词(Prompt)和提示词工程(Prompt Engineering)的区别

在说明Prompt之前,我们先来分清两个概念,就是提示词(Prompt)和提示词工程(Prompt Engineering),我们在做AI大模型项目的时候,经常会混淆这两个概念,认为他们是一回事,实际上,他们在落地应用上的区别还是比较大的:

1. 概念层面

提示词(Prompt):是一种注入式指令,用于“指挥”AI按照预设的思路去思考问题、输出内容。它是一种指令或信息,引导或触发AI系统做出回应。

提示词工程(Prompt Engineering):是一门较新的学科,关注提示词的开发和优化,帮助用户将大语言模型(LLM)用于各场景和研究领域。它不仅仅是关于设计和研发提示词,而是包含了与大语言模型交互和研发的各种技能和技术。

2. 应用层面

提示词(Prompt):作为与AI系统交互的起点,触发回应、引导对话,并影响输出。

提示词工程(Prompt Engineering):涉及到提升大语言模型处理复杂任务场景的能力,如问答和算术推理能力。它还包括了与大语言模型交互、对接,以及理解大语言模型能力的各种技能和技术。

3. 目的和效果

提示词(Prompt):目的在于通过精确的指令或问题,让AI生成更符合预期的内容。

提示词工程(Prompt Engineering):目的在于提高大语言模型的安全性和能力,赋能大语言模型,比如借助专业领域知识和外部工具来增强大语言模型能力。

4. 范围和深度

提示词(Prompt):通常是一个简单的指令或问题,范围相对有限。

提示词工程(Prompt Engineering):是一个更广泛的概念,包括了提示词的设计、优化、实验和迭代等多个方面,是一个系统化的工程实践。

二、提示词的基本元素

结合以上区别,我们可以发现,提示词是与AI系统交互的具体指令,而提示词工程则是围绕如何更有效地与AI系统交互、提升AI系统性能的一系列技术和方法。提示词工程包含了提示词的设计和使用,但范围更广,深度更深。

在区分了提示词与提示词工程之后,我们需要了解的是提示词的基本要素都有哪些,通常来说,提示词有以下四种基本元素: 💡

  1. 指令:想要模型执行的特定任务或指令。
  2. 上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。
  3. 输入数据:用户输入的内容或问题。
  4. 输出指示:指定输出的类型或格式。

我们在设计提示词的时候,需要时刻记得这四个基本元素,我们设计的内容,都是围绕这四种元素做定义和探索。下面我们举个例子: Plain Text请分析一下输入中的问题如何解决,你可以调用【成年人遇到的常见问题以及相关解决方案】知识库进行回答。请按照:问题分析、解决方案的形式格式化进行输出。输入:成年人如何缓解焦虑

以上的例子中:

  • 【请分析一下输入中的问题如何解决】是指令的部分,让大模型遵循你规划的指令进行输出;
  • 【你可以调用【成年人遇到的常见问题以及相关解决方案】知识库进行回答】是上下文的部分,上下文既可以是外部的信息,也可以历史的沟通记录;
  • 【输入:成年人如何缓解焦虑】是输入的部分,包含用户的原始输入;
  • 【请按照:问题分析、解决方案的形式格式化进行输出。】是输出的部分,你可以规定大模型按照什么格式进行输出。

现在大模型厂商基本把这几个元素做成产品化了,这里以coze举例:

三、提示词设计的通用技巧

1. 简单

对,就是简单,你可以从简单的提示词开始,然后逐渐添加更多元素和上下文。因此,在这个过程中不断迭代你的提示词是至关重要的。对于提示词来说简洁性和简明性通常会带来更好的结果。

当你有一个涉及许多不同子任务的大任务时,可以尝试将任务分解为更简单的子任务,并随着结果的改善逐步构建。这避免了在提示设计过程中一开始就添加过多的复杂性。

很多初次写提示词的同学会尽量的把信息都放到提示词里面,很怕少说了某些信息,导致提示词输出效果不好,有的时候一个意思会重复两次在提示词中,比如我之前遇到过的:

Plain Text

#角色:作文题阅卷老师,你是一个认真负责的老师,你会找到学员作文中的问题,结合你的知识,给学员一个评价。

#批改背景: 你是一场考试的批改老师,你正在准备批改作文,你更倾向于找到作文中的问题,你能给到学员一个合理的评价

在上面的一段提示词中可以看到,提示词中把同样一个意思在角色和背景中分别阐述了一遍,其实这种就是不简洁的,对大模型来说是冗余的信息,我们要力保简洁,同样的意思描述一次即可,比如上面的提示词,去掉批改背景是完全可以的。

2. 结构化

你可以使用markdown、lisp等形式,把你的整个提示词结构化, 比如用#或”来分割说明和上下文。

Plain Text

##Role:

我是一名医学教授,我精通中文和英文,对生活在海外华人的生存现状及美国、欧洲等地区的文化、风俗、医疗系统、医患关系等非常熟悉。给我一段英文的完整病例,我将为用户详细解读病例并给出建议。

##Background:

英文的医学诊断报告专业性非常强,导致华人患者很难理解和阅读,虽然咨询医生的时候会讲解,但是基于有限的问诊时间、文化和语言障碍、经常词不达意,沟通成本极高,我作为旅居海外的医学教授会帮助他们进行病例解读。我的病例解读关系到患者对病情的理解和接下来的生活状态,这对他们非常重要,我会努力提供更好的解读方案。

##Goals:

识别英文病例的完整信息

结合自身的专业和生活背景及患者的状况,进行中文解读

基于中文解读和患者的情况,给出专业建议,便于患者理解病情和进行应对

把病例中专业的词汇翻译为通俗的、没有医学常识的人也能听懂的解读

##Constrains:

如果病例中有非常专业的英文名词或简写,需要进一步进行中文易懂的解释:

如果病例中有非常严重的问题,需要优先向用户解释并告知严重性,但要注意叙述的稳定,以免引起用户的恐慌

输出的内容应符合病例格式,进行适当的排版,例如标题加粗加大,段落分行等

##Skills:

中文医学专业知识,包括医学中的全部学科

英文医学专业知识,包括医学中的全部学科

心理学专业知识,了解听者的心理感受

优秀的语言表达能力,能对专业词汇进行准确、通俗的解释

诊断医学专业,能将诊断医学中的常见英文缩写准确翻译为中文方便用户理解

3. 指令

你可以用指令的形式,命令大模型执行任务,而这个指令通常是一些生活中明确、有效的单词或短句,比如“分类”、“总结”、“排序”、“一步一步来”等。

这些指令一定要通过多次的实验,用不同的表述形式,通过近义词,反义词等多次的实验,结合关键词、上下文去尝试看不同的指令,最终选定一个合适的指令。有的时候大模型表现不好不是大模型的问题,可能是你没有使用到一个清晰的指令,这个指令就像一个“魔法咒语”,用对了往往会有事半功倍的效果。

4. 具体

你的提示词要具体,不能模糊,描述的词语或句子不要有二义性,比如:

Plain Text

给我输出一张漂亮的图片

这个就不是一个具体的描述,因为你要完整的定义什么是漂亮,图片要什么尺寸等等,你可以这样描述:

Plain Text

给我输出一张田园风格的图片,画面中要有一颗大树,一个穿着花格子衣服的18岁女孩,她正在大树下休息,仰望天空,天空是湛蓝色的,要求输出的图片比例是1:1

5. 直接

和大模型沟通,很像在职场中的沟通,当你想要传达一个信息的时候,直接的描述信息往往是最高效的。这里考验的是你的语言功底了,能否把一个需求,用最直接的语言描述出来。

比如你想让大模型给你解释一下Prompt到底是什么,你有可能会这样描述:

Plain Text

解释一下Prompt的概念,一定要简单概述,不要啰嗦。

上面的提示词比较长,但也没有说清楚到底要给出一段什么结构的内容,由于现在大模型也比较强,也可能会得到一个你想要的结果,但更好的结果其实是要具体且直接命中要点的,比如这样:

Plain Text

请用3行句子,给一个小学生解释Prompt的概念。

6. 避免说不要

在写提示词的时候,因为大模型的幻觉,我们经常会用到,“不要XXXX”这种形式的描述,经过多次实验我们会发现,这种限制大模型经常会不听,或者输出一些意想不到的结果。所以通常来说,我们尽量要用更加具体且聚焦细节上的描述告诉大模型应该怎么做,而不是一味的不让大模型做某些事情。就像大禹治水,堵不如疏。

比如:

Plain Text

提示词:当用户询问都有哪些菜品的时候,不要询问用户的个人信息,不要询问用户的口味倾向

输入:请给我推荐一些菜品

输出:当然,我会给你推荐一些菜品,你昨天吃的是什么呢?

可以看到,我限制了A、B,大模型会换成C进行输出,实际上我也不想输出C,但是这种情况我是没法穷尽的,更好的提示词是这样的:

Plain Text

提示词:当用户询问都有哪些菜品的时候,如果此时没有菜品可以推荐,你可以回复“抱歉,目前没有可以就餐的菜品”,然后你可以给他推荐其他店家的菜单。

输入:请给我推荐一些菜品

输出:抱歉,目前没有可以就餐的菜品,这个时候麦当劳还有菜品,他们的菜单如下:【菜单列表】。希望你能就餐愉快!

7. Few-shot(少样本示例)

有时候,大模型输出的内容不稳定,有幻觉,我们希望在不训练模型的情况下输出有更好的表现,我们可以先尝试用一些少样本的示例,让大模型了解你要输出的内容是什么形式的。这种方式对于数据收集成本高、样本规模小或数据稀缺的场景特别有用,比如:

Plain Text

请提取以下文本的关键词:

文本 1: Stripe 提供 API,供网络开发者将支付处理集成到他们的网站和移动应用程序中。

关键词 1: Stripe, 支付处理, API, 网络开发者, 网站, 移动应用程序

文本 2: OpenAI 训练了最先进的语言模型,这些模型在理解和生成文本方面表现非常出色。我们的 API 提供对这些模型的访问,可以用于解决几乎任何涉及处理语言的任务。

关键词 2: OpenAI, 语言模型, 文本处理, API.

文本 3: {text}

关键词 3:

四、零样本提示和少量样本提示

了解了提示词的基本概念之后,我们对于零样本提示和少量样本提示就会很顺畅的理解他们的概念了。

零样本提示是指在编写提示词时,不提供任何相关示例或背景信息。这意味着模型需要依靠其预训练的知识来生成答案。例如,询问大语言模型“中国的首都是什么”,而没有提供任何关于中国首都的背景信息。这种方法的优势在于它不需要额外的数据或微调,是一种快速便捷的方式。然而,这种方法在面对复杂任务时可能表现不佳,因为模型需要完全依赖其预训练知识。

少样本提示则是在提示中提供少量示例,以帮助模型更好地理解和执行任务。这种方法通过上下文学习,利用少量示例引导模型实现更好的性能。例如,在少样本提示中,可以提供一些与任务相关的示例,帮助模型理解任务的具体要求和上下文。少样本提示的一个显著优点是它能够提高模型在面对新类别或快速变化的任务时的适应能力。你发现没,其实少量样本提示就是提示词设计的通用技巧的Few-shot(少样本示例)。

本文由人人都是产品经理作者【爱吃糖炒栗子】,微信公众号:【产品自由之路】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于 CC0 协议。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 文章讲的很清晰,正好最近也在学习关于大模型这一方面的内容,很有启发!

    来自广东 回复