跳转到内容

从原理到应用一次讲清楚 Prompt

🎨

原创 小宝聊 AI 小宝聊AI 2024-01-30 00:12 发表于浙江

小宝聊AI

十年大厂架构师, 专注于大模型技术和应用

29篇原创内容

公众号

本文长度 5000 字 阅读时长预计需要 20 分钟本文目录 一 、什么是 Prompt

二、用更加专业的方式定义 Prompt

三、用数学来理解 Prompt

四、 NLP 发展的四大范式

五、为什么 Prompt 可以减少幻觉

六、 Open AI()提供的最佳实践

七、可以直接使用 Prompt 的关键框架

八、为什么使用框架的效果好

1、什么是 Prompt

简单来说, 其实是一套你和大模型交互的一种语言模板。通过这个模版,你可以输出你对于大模型响应的指令, 用于大模型应该具体做什么指定, 完成什么任务, 如何处理具体的任务, 并最终输出你期望的结果。虽然大模型具有基础的文字能力, 能够理解你对于模型说的大部分话,但是为了达成大模型更好的回答效果, 需要通过 Prompt, 来提升模型返回的准确性 。如果说, 过去的时代, 人机交互的主要方式是通过代码, 那么我认为在大模型时代, 交互语言的主要方式其实是 Prompt。

2、用更加专业的方式定义

Prompt大模型的本质是一个基于语言的概率模型, 他返回他觉得概率最大的内容。如果是直接问大模型, 没有提供 Prompt,相当于大模型随机给出他的答案。有了 Prompt, 其实是给了一个模板, 这个模板包括了对于模型的要求, 输入和输出的限制, 大模型在这个限制之下, 去得到概率最大的答案。

3、用数学来理解 Prompt

传统的机器学习是 p(y|x; a) 假设 a是我们训练出来的模型。【训练】 我们用大量人工标志, 训练出来一个模型a。给了大量猫的照片,就返回 cat。模型里面包含了大量猫照片的特征。 【预测】给一个新的照片,根据模型特征按照一定概率返回猫或者其他动物。大模型是 p(y|x; a) 假设 a我们训练出来的通用模型。这个模型没有经过人工的标注,但是他什么都可以学会。我们给出的 Prompt 其实就是 x, 然后让大模型基于这个 x 知道概率最大的 y,这样就避免了人工的标注, 但是依赖于 x 给入的信息, 去更大概率找到合适的 y。 我们给一张照片, 然后我们输入这是一个动物, 这是什么, 然后大模型根据这个输入, 提取照片的特征和我们的提示作为输入, 最终返回猫。

4、 NLP 发展的四大范式

在整个自然语言的发展过程中, 经历了四个阶段

(1)非神经网络的特征工程在非神经网络时代, 人工智能主流的计算都是使用完全监督的机器学习的方法。这个方法最大的特点是完全的依赖于统计和传统的机器学习算法(比如贝叶斯算法、决策树)等等, 这些算法的最大的特点是需要先对于存量的数据进行人工的标注, 比如这个是猫那个是狗, 通过这样的方式, 让模型建设先验的知识, 然后当给到一张新的图片之后, 可以基于这个图片进行决策, 得到一个新的结论。这个方式最大的问题,就是标准的数量和质量决定了模型的质量的上限, 同时成本非常巨大。

(2)基于神经网络的完全监督学习第二个阶段, 基于神经网络的深度学习的时代。这个时代的优势是不需要手动去给训练数据进行单独标注, 而是找到合适的数据进行足够的训练, 就可以获取很好的训练的效果。

(3)预训练 第三个阶段,其实就是大模型的雏形了。这个阶段的最大的特点是无监督。我们一直说的通用智能, 其实就说大模型,其实已经将我们的大部分的知识, 沉淀到自己的模型中。本质就是讲模型, 用信息压缩的方式记录了起来。所以一花一世界,一模型也是一个世界。通过无监督的预训练得到的通用的大模型之后, 使用特定的数据集, 对模型进行针对性的训练, 使得模型更加适应新的数据。这个就是这次大模型最大的升级。无论 是 GPT 还是 Bert 其实都是一样的方案。通过大模型大量的数据海量的训练,大力出奇迹,然后再用小量的数据, 进行针对性的微调。

(4)Prompt 工程第四个阶段, 就是我们今天重点要讲的Prompt。通过引入合适的模板, 去管控模型的输入、处理和输出的结果。使用这种模型, 可以用 zero shot(零样本),few shot 少量样本的方式去调试模型, 充分利用了模型的推理能力, 让模型按照 Prompt 中对于模型的要求进行输出, 满足各个行业, 各个场景的个性化的需求。

5、为什么 Prompt 可以减少幻觉

在刚刚开始使用 ChatGPT()的时候, 其实我们只是会把这个对话框理解问题的输入框。或者我们天然的认为这个是一个搜索框, 所以就自动的输入了我们的问题。

这个时候, 大模型完全没有上下文,也没有任何例子可以去参考, 所以他只能按照自己的模型的内容, 随意的去发挥,看看碰到模型的那一部分, 就返回对应的结果。这个就是大模型最被人诟病的地方, 所谓的幻觉问题。 其实这个不能怪大模型, 就算两个人, 面对面的沟通, 可能由于知识、经历的差别,其实不可能完全的去理解另外一个的意思, 何况这只是一个模型。 所以,为了让 大模型更好的理解我们的问题, 我们需要给大模型更多的输入,更多的限定, 更多的上下文, 更加明确的结果输出, 这样大模型才更有可能返回我们期望的结果。 Prompt 其实也就是用这个思路解决问题的, 限定的上下文, 更多的输入, 更多的限定,从而输出得到更好的结果。

6、 Open AI提供的最佳实践

  • 在 OpenAI() 官方文档中, 强调了, 跟大模型交互最重要的点, 是需要描述清晰, 具体的需求。你需要给到他没有任何歧义的需求, 大模型才能给你更加准确的反馈。 他用了一个很有趣, 但是精准的描述, 给大模型讲 Prompt 就跟给外星人讲人类世界是一样的。
  • 1 包括更多的信息这样要点的关键是让大模型了解你问问题的场景和上下文。正如我们日常沟通中, 一般也是基于具体的场景 进行沟通,在这个特定的上下文中, 所有的人都知道具体的场景是什么意思, 这样的沟通效率就会更高一些。bad case :帮我规划一个杭州的旅游行程good case:帮我规划一个杭州 3 天的行程, 我带上我的两个小朋友, 我们希望当地的美食, 可以多推荐一些当地好吃的饭店, 我们更加喜欢人文的景观
  • 2 指定一个特定的角色这个是在很多原则都会比较通用的使用的一种方式。角色可以对于具体的知识, 输入, 输出做出更多的限制, 让结果更加符合个人的意愿的诉求bad case :帮我实现一个功能goog case:假设你是一个丰富编码经验的程序员,需要你帮我实现一个功能,这个功能具有良好的可阅读, 命名清晰, 鲁棒性, 没有边界问题。
  • 3 使用分隔符拆分输入的不同部分在我们跟大模型的交互过程中, 其实会有不同的部分, 比如说角色, 背景, 目标、任务、输出的方式, 需要有明确的分隔符, 讲这些内容进行良好的拆解,这样可以获得更好的输出结果
  • 4 将任务拆解不同的步骤在现实生活中, 对于团队, 我们会将目标进行拆解到个人的小目标。对于每个具体的任务来说, 我们也会将大的任务进行拆解成小任务来做, 毕竟罗马不是一天建成的, 胖子也不是一天吃成的。badcase :帮我把大象放进冰箱good case:将大象放进冰箱分成几步:1 打开冰箱 2 将大象放进冰箱 3 关上冰箱
  • 5 提供例子对于有一些复杂的场景,其实我们很能用一些很好的文字去描述, 这个时候更好的办法是直接告诉大模型。就像你教育一个小孩子, 最好的方式, 永远是给他树立一个好的榜样, 让他有样学样。
  • 6 给 GPT 多一些思考的时间在匆忙给出结论之前, 让大模型自己多思考一下, 寻找对应的解决方案。让大模型将完整的推理结果列出来, 这样方便大模型自己进一步的检查。让大模型检查自己的逻辑是否有一些遗留的点, 保证逻辑的完整性。

7 、可以直接使用 Prompt 的关键框架

1 ICIO 框架*指令

执行的具体任务*背景信息:提供执行任务的背景信息, 上下文内容, 让大模型更好的回答*输入信息:大模型需要用到的一些信息*输出信息:明确输出的具体信息的要求,比如字数, 比如风格 比如格式2 BROKE框架通过GPT 的设计提示,来提升整体反馈的效率。

2、背景

提供足够背景信息,让大模型可以理解问题的上下文*角色 设定特定的角色,让 GPT 根据特定的角色能力的特点来形成响应*目标 明确任务的目标,让大模型知道你想让他做什么*结果 定义明确可以衡量的结果,让大模型清楚自己做的情况*调整 根据具体的情况,来调整具体的结果3 CRISPIE 框架*能力和角色 你期望大模型扮演的角色洞察 , 提供幕后洞察力、背景信息和上下文*声明, 简洁明了的说明希望完成的任务*个性, 回应的风格、个性或者方式*实验:提供多个回答的示例

8、为什么使用框架的效果好

在梳理所有的这些原则的过程中,我发现了让大模型更好工作的关键点。

第一,明确目标和需求,一个广泛的需求会让大模型放飞自我,明确的需求可以让他产出很好的答案。正如,你在管理一个下属,你给他一个明确的需求,他可以做出来。你不给明确的需求,他可能就随心所欲的做,然后可能结果就不满意了。

第二,设定一个明确角色,目前的模型是一个通用的大模型,明确的角色,可以让大模型选择明确的知识范围,从而输出更加精确的结果。各行各业的的知识差别还是很大的。让一个文科生去回答计算机的问题,肯定是没法回答好的。

第三,让大模型一步一步执行。这个我感觉有点像我们的大脑。我们大脑有一个快系统一个慢系统。快系统主要是使用直觉,优点是快,但是不够深度系统。慢系统,其实就是让大模型按照逻辑,大任务拆解成小任务,一步步执行。

第四,为什么对大模型礼貌效果好。这个我觉得是一个玄学 问题,但是有这样一个解释,使用礼貌用语的数据,一般的质量会高一些。因为大模型是没有感情,也没有所谓的是否礼貌,就是使用对应的数据的不同差别。

第五 使用思维链的行为模式,为什么效果好。本质也是让大模型将任务进行拆解,按照特定的任务去一步步思考和演进,这样有顺序和逻辑的思考,就可以获得很好的思考结论。

9、模型的几个关键的研究方法

Zero-shot 零样本零样本的 Prompt,其实就是我们不给大模型任何的提示, 直接问大模型的问题。这个其实是一个判断大模型能力的一个重要的手段。

对于用户来说, 可以直接使用,使用是比较简单而友好的。但是问题也很明显, 因为没有给大模型任何的提示, 那么大模型就会随心所欲的返回。

few-shot 少样本实例和 Zero-shot 不一样的是, 在 Prompt 中给出简单的例子。

这个其实是大模型非常优秀的推理能力, 根据你给出来的例子, 大模型可以很好的推理出来你的需求, 并且按照你的需求给出具体的回答。 使用 few-shot 能够有更好的回答效果的原因是因为你提供了更多的上下文的信息, 或者叫额外的知识, 有了这些知识,大模型就可以更好的回答你的问题了。

COT() 思维链COT 实际上就是 Chain-of-thought Prompt 就是让大模型使用推理去解决困难复杂的问题, 比如数学题目。对于这个思维链, 有一个标准的咒语叫做 let the model think step by step。根据阅读的论文, 每次说这句话的时候, 模型真的就好好按照逻辑进行思考。

从论文中, 我们知道, 假设我们给予大模型一个包含了连续的中间步骤的思维链的推理过程, 大模型会去模范思维链的思考过程, 从而让模型具有了推理的能力, 可以对数学、常识进行推理。对于大模型具有了推理能力之后, 自然就可以做很多进一步更加复杂的任务, 从而更加接近人类的思考方式。

TOT 思维树虽然语言模型解决的问题越来越多, 推理的过程越来越复杂, 并不是思维链那样一个单纯的线性决策的过程。为了解决这个模型的问题 , 引入了新的语言模型推理框架《思维树(), 它其实是可以 用于解决比思维链更加复杂的问题。他允许模型在解决某个复杂任务的时候, 可以将模型拆解到更加小的粒度。通过使用思维树的推理模型, 让大模型的复杂规则的推理能力进一步增强, 甚至可以解决包括 24 点这样复杂的数学问题。 跟人类相识有系统 1 的基于直觉的反应, 也是系统 2 的基于深思熟虑的思考的反映, 通过使用思维树的思考方式, 可能更加有机会找到一个全局最优的回答。通过使用树的结构, 对树的节点进行搜索、回溯, 使得大模型具有了更加复杂的推理能力,可以对问题进行深思熟虑, 可以胜任更加复杂和具有挑战的任务。

总结这一篇其实是一篇 Prompt 的纯原理干货文, 基本说清楚了, 什么是 Prompt, 为什么使用Prompt , 以及如何更好的使用Prompt, 但是对于没有计算机或者人工智能基础的人来说, 他们更加需要的是, 直接给他们一个可以用的模板, 这也是 GPTs 产生的必要原因。 虽然 Prompt已经极大的降低了和大模型的交互门槛, 但是其实还是有门槛的, 其实并没有直接对话沟通那么简单直接。