Prompt原理详解

devtools/2024/11/29 22:35:00/

一、什么是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等,结合下面的例子效果更好
  • 例子:给出具体的例子,可以是输入、输出、输入+输出

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

  • 第一,明确目标和需求,一个广泛的需求会让大模型放飞自我,明确的需求可以让他产出很好的答案。正如,你在管理一个下属,你给他一个明确的需求,他可以做出来。你不给明确的需求,他可能就随心所欲的做,然后可能结果就不满意了。
  • 第二,设定一个明确角色,目前的模型是一个通用的大模型,明确的角色,可以让大模型选择明确的知识范围,从而输出更加精确的结果。各行各业的的知识差别还是很大的。让一个文科生去回答计算机的问题,肯定是没法回答好的。
  • 第三,让大模型一步一步执行。这个我感觉有点像我们的大脑。我们大脑有一个快系统一个慢系统。快系统主要是使用直觉,优点是快,但是不够深度系统。慢系统,其实就是让大模型按照逻辑,大任务拆解成小任务,一步步执行。
  • 第四,为什么对大模型礼貌效果好。这个我觉得是一个玄学
    问题,但是有这样一个解释,使用礼貌用语的数据,一般的质量会高一些。因为大模型是没有感情,也没有所谓的是否礼貌,就是使用对应的数据的不同差别。
  • 第五,使用思维链的行为模式,为什么效果好。本质也是让大模型将任务进行拆解,按照特定的任务去一步步思考和演进,这样有顺序和逻辑的思考,就可以获得很好的思考结论。

http://www.ppmy.cn/devtools/7733.html

相关文章

测试大语言模型在嵌入式设备部署的可能性——模型TinyLlama-1.1B-Chat-v1.0

测试模型TinyLlama-1.1B-Chat-v1.0修改推理参数,观察参数变化与推理时间变化之间的关系。 本地环境: 处理器 Intel Core™ i5-8400 CPU 2.80GHz 2.80 GHz 机带 RAM 16.0 GB (15.9 GB 可用) 集显 Intel UHD Graphics 630 独显 NVIDIA GeForce GTX 1050 主…

SpringCloud技术—Docker详解、案例展示

简介:Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。 总体来说,…

【数据结构-树和二叉树-森林-哈夫曼树】

目录 1 树1.1 树的描述(基本术语) 2 二叉树(树的度最大为2)2.1 注意事项-五种基本形态2.2 二叉树的抽象数据类型定义 3 二叉树的性质3.1 两种特殊形式的二叉树-重点会计算3.2 题目练习: 4 二叉树的存储结构4.1 顺序存储…

Mac 下安装PostgreSQL经验

使用homebrew终端软件管理器去安装PostgreSQL 如果没有安装brew命令执行以下命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 沙果开源物联网系统 SagooIoT | SagooIoT 1.使用命令安装postgreSQL brew i…

算法课程笔记——STL题目

长度为2的字符串,当in下标为一,也就是\n,当i!n,就是输出空格 &&且 city从citys里面取 加速后就不能混用scanf

骑砍2霸主MOD开发(6)-使用C#-Harmony修改本体游戏逻辑

一.C#-Harmony反射及动态注入 利用C#运行时环境的反射原理,实现对已加载DLL,未加载DLL中代码替换和前置后置插桩. C#依赖库下载地址:霸王•吕布 / CSharpHarmonyLib GitCodehttps://gitcode.net/qq_35829452/csharpharmonylib 根据实际运行.Net环境选择对应版本的0Harmony.dll…

IOS 32位调试环境搭建

一、背景 调试IOS程序经常使用gdb,目前gdb只支持32位程序调试,暂不支持IOS 64位程序调试。IOS 32位程序使用GDB调试之前,必须确保手机已越狱,否则无法安装和使用GDB调试软件。下面详细介绍GDB调试IOS 32位程序的环境搭建。 二、I…

子组件向父组件传参的方式?

在Vue.js中,子组件向父组件传参通常通过自定义事件($emit)来实现。子组件通过触发一个事件,并将需要传递的参数作为事件的负载,父组件在模板中监听这个事件,并在事件处理函数中接收这些参数。 以下是一个简…