一、什么是Prompt
简单来说, 其实是一套你和大模型交互的一种语言模板。
通过这个模版,你可以输出你对于大模型响应的指令, 用于大模型应该具体做什么指定, 完成什么任务, 如何处理具体的任务, 并最终输出你期望的结果。
虽然大模型具有基础的文字能力, 能够理解你对于模型说的大部分话,但是为了达成大模型更好的回答效果, 需要通过 Prompt, 来提升模型返回的准确性 。
如果说, 过去的时代, 人机交互的主要方式是通过代码, 那么我认为在大模型时代, 交互语言的主要方式其实是 Prompt。
二、用更加专业的方式定义
大模型的本质是一个基于语言的概率模型, 他返回他觉得概率最大的内容。
如果是直接问大模型, 没有提供 Prompt,相当于大模型随机给出他的答案。
有了 Prompt, 其实是给了一个模板, 这个模板包括了对于模型的要求, 输入和输出的限制, 大模型在这个限制之下, 去得到概率最大的答案。
三、用数学的方式理解Prompt
传统的机器学习是 p(y|x; a) 假设 a 是我们训练出来的模型。
【训练】 我们用大量人工标志, 训练出来一个模型a。给了大量猫的照片,就返回 cat。模型里面包含了大量猫照片的特征。
【预测 】给一个新的照片,根据模型特征按照一定概率返回猫或者其他动物。
大模型是 p(y|x; a) 假设 a 我们训练出来的通用模型。这个模型没有经过人工的标注,但是他什么都可以学会。
我们给出的 Prompt 其实就是 x, 然后让大模型基于这个 x 知道概率最大的 y,这样就避免了人工的标注, 但是依赖于 x 给入的信息, 去更大概率找到合适的 y。
我们给一张照片, 然后我们输入这是一个动物, 这是什么, 然后大模型根据这个输入, 提取照片的特征和我们的提示作为输入, 最终返回猫。
四、为什么 Prompt 可以减少幻觉
在刚刚开始使用 ChatGPT的时候, 其实我们只是会把这个对话框理解问题的输入框。或者我们天然的认为这个是一个搜索框, 所以就自动的输入了我们的问题。
这个时候, 大模型完全没有上下文,也没有任何例子可以去参考, 所以他只能按照自己的模型的内容, 随意的去发挥,看看碰到模型的那一部分, 就返回对应的结果。
这个就是大模型最被人诟病的地方, 所谓的幻觉问题。
其实这个不能怪大模型, 就算两个人, 面对面的沟通, 可能由于知识、经历的差别,其实不可能完全的去理解另外一个的意思, 何况这只是一个模型。
所以,为了让 大模型更好的理解我们的问题, 我们需要给大模型更多的输入,更多的限定, 更多的上下文, 更加明确的结果输出, 这样大模型才更有可能返回我们期望的结果。
Prompt 其实也就是用这个思路解决问题的, 限定的上下文, 更多的输入, 更多的限定,从而输出得到更好的结果。
五、高质量的Prompt典型构成
- 角色:给 LLM定义一个典型的角色,收窄问题域,减少二义性,如你是一个翻译、你是一位老师...
- 指示:具体要完成的任务,如写论文、解决问题... 上下文:提供任务相关的背景信息,描述越精准越具体越丰富,大模型越能理解你的问题
- 输入:说明输入的格式,使用标识符明确输入信息,如翻译下面{}里面的内容
- 输出:指定输出格式,如SON、HTML等,结合下面的例子效果更好
- 例子:给出具体的例子,可以是输入、输出、输入+输出
六、为什么使用框架的效果好
- 第一,明确目标和需求,一个广泛的需求会让大模型放飞自我,明确的需求可以让他产出很好的答案。正如,你在管理一个下属,你给他一个明确的需求,他可以做出来。你不给明确的需求,他可能就随心所欲的做,然后可能结果就不满意了。
- 第二,设定一个明确角色,目前的模型是一个通用的大模型,明确的角色,可以让大模型选择明确的知识范围,从而输出更加精确的结果。各行各业的的知识差别还是很大的。让一个文科生去回答计算机的问题,肯定是没法回答好的。
- 第三,让大模型一步一步执行。这个我感觉有点像我们的大脑。我们大脑有一个快系统一个慢系统。快系统主要是使用直觉,优点是快,但是不够深度系统。慢系统,其实就是让大模型按照逻辑,大任务拆解成小任务,一步步执行。
- 第四,为什么对大模型礼貌效果好。这个我觉得是一个玄学
问题,但是有这样一个解释,使用礼貌用语的数据,一般的质量会高一些。因为大模型是没有感情,也没有所谓的是否礼貌,就是使用对应的数据的不同差别。 - 第五,使用思维链的行为模式,为什么效果好。本质也是让大模型将任务进行拆解,按照特定的任务去一步步思考和演进,这样有顺序和逻辑的思考,就可以获得很好的思考结论。