网站开发汇报ppt模板,自己做网站怎么上传,网络科技公司门户网站,湖州住房和城乡建设部网站引言 关于chatGPT的Prompt Engineer#xff0c;大家肯定耳朵都听起茧了。但是它的来由#xff1f;#xff0c;怎么能用好#xff1f;很多人可能并不觉得并不是一个问题#xff0c;或者说认定是一个很快会过时的概念。但其实也不能说得非常清楚#xff08;因为觉得没必要深…引言 关于chatGPT的Prompt Engineer大家肯定耳朵都听起茧了。但是它的来由怎么能用好很多人可能并不觉得并不是一个问题或者说认定是一个很快会过时的概念。但其实也不能说得非常清楚因为觉得没必要深究。但我觉得它毕竟存在过火过我们还是必须对它有更深入的理解所以我花时间认真了解了一下。 对于提示词的理解我也是经历过好几个阶段。 最初我第一次听说什么提示词工程认为是chatGPT的缺陷所致也就是GPT不够聪明提示词是为了让我们迁就它绕开它的一些不足。但仔细一看发现不对大多数提示词的技巧实际上就是对人与人进行良好沟通的要求并不过分不能认为是GPT的缺陷。 于是我开始关注提示词的细节和原理但始终是记不住感觉无非就是要学会说人话要和人好好沟通要能理解你想问领域的基础知识似乎并没啥可学的也就没关注了。 后来Agent开始火热开始了解Agent才发现原来提示词在这里有用因为基于GPT编程实际上很多时候是在使用提示词。那就不能象在chat里那么随意了需要固化下来抽象出模板而且要关注这里提示词在不同版本的准确度。可以理解提示词就是在编程序只是在使用自然语言编程。 讲到这里容我打一下岔。我们一定要来说说人与计算机如何交互的问题 人与计算机交互的方式也就是人给计算机派任务。经历了几个阶段因为计算机本质是在处理0/1数据处理计算任务。最早我们可以认为计算机比较蠢人自然就要多做一些事情就像你的邻家小孩很笨沟通起来很困难你就得牵就他。所以人需要写晦涩的汇编指令甚至用过打孔纸带没办法谁让它那么笨。但慢慢的机器变得越来越聪明人就开始使用C语言C语言然后是 Java语言到现在最流行的Python与计算机的交互变得越来越简单我们可以理解为计算机变聪明了对于人的要求不断在后退计算机理解能力提升不断在前进。 直到今天GPT的出现人可能再退一步使用自然语言来和计算机交流。这可是人类倒退的一小步计算机进步的一大步。我们在使用Prompt的时候发现使用自然语言就可以让计算机完成任务。所以你不得不重视提示词它不仅仅是用来聊天的输入是未来与AI交流的第一语言当然也可能会被工程化变成GPT的内置功能但至少目前没有 我不知道有没有引起大家的好奇。铺垫就说这么多了。
Prompt 的产生 对于大模型的技术有一种四阶的说法提示词工程应该属于最上层的应用层技术面向的人群是所有终端用户门槛最低最易于上手。 我们今天的重点是讲提示词工程也就是Prompt。 简单来说Prompt就是我们与大模型之间的沟通话术。 我们以前经常会接触一些职场沟通销售话术和大模型一起工作就象人与人配合工作一样需要有很好的沟通技巧。好了言归正传我们说说Prompt的来源。 那Promtpt是如何产生的呢我们必须从GPT的历史说起。 我们来看看GPT的历史 1.0 时代在Goolge发明Transformer之后开始大力发展BERTOpenAI 的同学觉得Transformer挺好的把Transformer改了改用了解码器的生成式架构改成了可以纯并发的架构并且采用无监督的方法省了标注使用了约50G数据7000本书通过预训练 专业数据fine-tune的方式生成一个 1 亿参数的模型效果还行在特定的测试集上获得一定的结果。方法嘛 那是相当的简单粗暴。但产生一个重要理论范式PreTrain Fine-tune 的模式。这个时候并没有什么人关注GPT。那时是BERT的天下。 2.0 时代继续扩大参数扩到15亿12倍相对于GPT-1预训练使用了更多的数据。将Fine-tune的量减少争取一次搞定预训练和微调变成一个阶段。PreTrain做更多的事情。无监督学习增加掩码语言模型增强自监督。这仍然是一个暴力美学但效果确实得到很大增强相应的范式发生变化PreTrain做了更多的事情基础模型的能力大大增强。
In-context learning的产生 到了3.0增加更多的数据4100亿tokens模型参数量更大1700亿参数相对于GPT-2大了100倍这时就有问题了如果要传统的fine-tune成本会太高。因此这时候出现了 In-Context learning 让模型能够在上下文中学习其实就是把问题前移要求提问的人把问题问得更清楚并且给出一些解答问题的示例 。这样可以让大模型针对上下文进行推理做到在不改变预训练模型的情况下通过增强输入达到最好的结果。 这和提示词有啥关系当然有关系这实际上就是提示词一个原理就是提示词的前身这是一个很简单的道理一点不深奥仍然是敌退我进的方法邻家傻儿子能力不强咋办呢我把问题讲清楚一点。它减少了对fine-tune的依赖支持对上下文的推理但要求对方把上下文给清楚甚至给出示例 然后根据模型的常识能力直接获得答案。对于in-context learning有三类 1Zero shot 不给示例 给明确的指示 2: One-shot 给一个示例 3: Few-shot 给小于10个以内的多个案例 上图可以看出参考示例越多效果越好。模型越大效果越好。 再回顾一下GPT的发展过程如下 即然 In-Context learning的效果这么好那我们提问者是不是可以更进一步呢
Prompt 实际上是在In-context learning的基础上更进一步 In-Context Learing提供参考示例的学习方式。 Prompt-Learning 是在 in-context learning的基础上更进一步利用好上下文来影响模型的输出。 两者的区别是Prompt Learning 是设计好的提示来引导更好的输出。而 in-context learning则关注的是如何利用输入序列的上下文信息来影响模型输出。其实我觉得大概都是一回事。 Prompt的理论
在学习如何写好提示词之前我们先看看理论虽然理论实际上我觉得有点扯。
其实就是三篇论文
1Chain-of-Throught 思维链
论文Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
原理作为用户把需求描述更清楚更适合对方的理解具体的方法如下
* 大问题分解成小问题。职场OKR的做法。逐步思考按问题解决的步骤。让LLM多步骤思考。会消耗额外资源但会多次思考。
* 多步骤输出如何解决。让LLM给出中间结果。就象高中生数学考试不给过程要扣分滴。这样更容易发现错误可以从错误的步聚重新开始
* 对于数学应用题一定要用步骤逐步解决问题。
* 只能在大模型上用少量样本包含思路。才有用。小模型没啥效果。原因是什么越是复杂的问题越有效。类似 Few-Shot
举例
提问中给出推理过程帮助大模型在上下文中学习知识。然后举一反三答对问题有点相当于老师把饭给你喂到嘴边先告诉你大概的解题思路。 说实话这个有点扯一般我们并不会为了问第二个问题去构造那么复杂的例子一。这实际上是有一定复杂度的。
我的理解就是为了让大模型具备某一些能力可以找到解决该类问题的多步骤解决的方法。把它当成上下文给到模型然后模型可以学会按上下文的解法来分步骤解决新问题。 对于ChatGPT的高版本可能已经内置了相应的提示词模板会自动带上模板提升准确率当然因为是分步骤执行可能会导致消耗更多的算力。对于GPT API你需要自行按CoT的思想去构造提示词。 除了添加按步骤示例的方法以外还有一个小技巧 在问题的后面追加说明Think step-by-step 请按步骤思考和回答这个问题 在某些情况会获得更好的答案。 2: 自洽性多路径推理
论文self-consistency improve Chain of Throught Reasoning in Language Models
原理多路径推理如何提升思维链的能力。三个臭皮匠顶个诸葛亮多回答几次投票选择最优解。
初一看到这个觉得挺好笑为啥这也是重要的论文之一这顶维期刊的论文也太显而易见了吧 如上图所示可以根据多个路径形成多解然后投票获取答案。
非常可惜的是目前大模型在计算方面的能力不强另外对于人脑具德的有意识的行为大模型基本上是做不到的。我们通过CoT 其实可以看出大模型并没有带来意识展开来看它仍然是一种复读机式的鹦鹉学舌式的智能。 好消息是通过规模提升带来智能拥现。好像有智能了。坏肖息是看起来还是鹦鹉学䇢还是很弱智并非产生了意识。对于意识是脑科学范畴人类自已也没有弄明白人到底是怎么回事人类的本质是复读机吗 今天看到腾讯小马哥提出人工智能的技术必须是可知的也就是可以掌握可以解释的。其实有一定到底否则到时可能控制不住会出大问题。目前深度学习比较黑盒不知是好事还是坏事。
3: 思维树Tree of Throughts)
论文Tree of thoughtDeliberate Problem Solving with Large Language Models
原理能不能打破从左到右的有局限性的问题解决顺序。类似BIRT的做法。
如下图类似搜索算法可以进行遍历解空间找到全局最优解。 从理论上可以看看ToT的思路正如人是如何解决复杂问题的
那就是不断发掘如何做
Step 1利用CoT把问按多步骤拆解思维分解。
Step 2思维生成器——给出K个侯选项进行抽样提供多样性。
Step 3选择进行价值评估。对每个状态进行独立评估。或者进行投票。 或者让大语言模型自已来评估。
注意在寻找答案时需要搜索。可以使用广度或者深度。
说实话并没有弄明白我们如何使用ToT至少感觉在ChatGPT中简单利用提示词很难如果是编程在做AutoGPT或者Agent时好像可以按此思路来解决问题。但这和大模型本身的关系不大确实又是一个工程方法。 提示词如何写 好了我们终于写到重点了以下都是网上截抄的但我自已实验过 原则把大模型当成你的同事一个小伙伴。 这里提供的思路并不是实际的例子对于不同应用的例子可以在网上搜索或者选择提示词工具和插件。 角色设定减少范围有点相当于直接选了MoE 下面的示例中System就是系统级的设定如果在ChatGPT中可以先单独开一条消息提前做一下说明后续就不用再重复了。
指令注入强调本次上下文一直要注意的信息 问题拆解帮计算机拆解一下问题不要太为难它 这个例子不太好大概的意思就是把问题的步骤帮助做一下拆解。
分层设计这个知道答案是分层的那就按层来提问 编程思维注意大模型是可以支持自然语言编程的 问题实际上就是一段程序可以有逻辑判断可以有输出定义。
Few-Shot给例子给例子给例子。
对于打样给例子上面已经给出例子。 另外网上提供的一个比较好的例子生成标注数据挺好用。 这个例子也很有用在分析BUG时可以参考。 提示词工程是啥 随着ChatGPT的工程能力越来越强可能写好提示词的价值会越来越小。你可能在使用chatGPT过程中会发现之前的一些提示词黑魔法在高版ChatGPT会变得没必要了。因为相应的提示词会在ChatGPT中自动引用。但目前而言GPT API是没有开放相应的能力的还需要我们通过程序来进行封装。 我们需要将手工变成自动把手工的Prompt变成程序自动生成实际上是抽象变量。这样变成一个固定的做法。变成一个工程问题。可以通过抽象模板来完成。 比如我要将{文字}翻译成{中文} 这实际上就是一个翻译工具 比如我要创作一个{}的文案。 定义模板抽取参数它就变成一个自动化的工具。 将Prompt当作编程语言把多个prompt串在一起就可以完成复杂的任务。 作为提示词工程师会按照一定的规则去写提示词。
使用LangChane时可以很好的使用Prompt因为它有一个Promt Templates
1PromtTemplate.from_template()可以添加变量使用时传入。输出格式也可以规范。
可以检查传参。无变量也是可以的。
2使用构造函数生成PromptTemplate。和1没啥区别。只是更严格确定参数
这个有点怪但你可以认为实际上就是将自然语言封装了变量。
ChatPromptTemplate 与之类似。
可以在System中添加变量。要以在user_input中定义变量。
使用fromatf进行参数传入
FewShotPromptTemplate——给参考示例。
给示例集解包定义字典模板还可以嵌套。
注意SematicSimilarityExampleSelector 可以查找相近的语义词。这个很有用噢。
如下是一个简单的示例图只要学过一点点编程很容易理解这个。 对于复杂的情况我们还可以生成思维链完成复杂的流程也就是类似上面讲到的ToT了。我觉得ToT的落地就在这里了。
比如我需要提供一个工具有大模型来生成戏剧另外针对生成的戏剧在理解后进行评论使用另一个大模型。对于此类的问题就需要比较复杂的对待了。
如下使用的框架是开源的LangChain框架 好了大概写这么多提示词大家确实没必要太关注我也觉得它是一个过渡的技术。
它的起因是为了给基础大模型减压模型能力问题 它的发展是因为低版本的ChatGPT的工程能力弱没有对提示词封装API没有提供相应的模板支持但是很可能后续很快会被补上。
当然了解一下原理并没有什么坏处。
但没有必要满世界去学习提示词模板在需要的时候去搜一下就好了。 但是要注意提示词模板并不是通用的要看具体的大模型和大模型的版本。