人人都需要掌握的Prompt Engineering技巧

人人都需要掌握的Prompt Engineering技巧

首页枪战射击机器法则游戏更新时间:2024-06-03

ChatGPT的爆火,让大语言模型(Large Language Model, 简称LLM)成了当下最热门的前沿技术之一。国内外的科技公司开启了“百模大战”,都在投入大量的人力、物力搞自己的大模型。目前处在第一梯队的还是美国的OpenAI,领先优势还比较明显。

LLM爆火的背后,是人们看到了通用人工智能(AGI)的曙光 --- 让机器像人一样,拥有学习、推理和解决各种问题的能力,听起来就让人既震惊、又兴奋

很多人把当前的人工智能技术,比做是继机械、电力、信息技术之后的第四次工业革命。

在以往每一次工业革命的浪潮中,新技术都极大的提升了原有的生产效率,给人类创造了福祉,促进了社会的进步。

人工智能技术,本质上也是一种新型的生产力。它将极大提升各行各业的生产效率,推动人类社会进步。

每一次新的技术革命到来,总会听到人们说“XX要取代人类了”、“人类要没有工作了”等等。回过头来看,每一次工业革命,在旧生产力被淘汰的过程中确实会有一批人会失去工作;但与此同时,新的生产力也创造出大量新的岗位,给积极拥抱新生产力的人带来大量的机会。

做为一个普通大众,到底该如何才能积极拥抱新的技术浪潮呢?

之前看到一个投资人分享的观点“人对技术的理解,比技术本身更为重要”,深以为然。

的确如此,做为一个普通大众,我们并不需要一定要去创造新技术,我们需要做的是去把技术理解到位,并把技术应用到适合的地方,让技术创造价值,这就够了。

举个例子,对于电力技术而言,不是需要每个人都去搞懂发电的原理,去自己发电;而是有少数一些人发电,更多的人是把电用起来,用在各自的领域,让其创造价值就够了。最终电力技术所产生的最大的社会价值,不是都属于发电的人,更多是属于用电力应用创造价值的人。

LLM作为迈向AGI的核心技术之一,作为普通大众的我们,要积极拥抱这项新技术的关键,就是掌握提示词工程(Prompt Engineering)的基本原理和技巧,用LLM的超能力来武装我们,只有这样,我们才能在新的技术浪潮中不被淘汰。

前面铺垫了这么多,核心想表达的就是:Prompt Engineering真的非常重要,值得每个人都好好花时间认真学习并掌握

今天这篇文章,就是介绍一些这段时间以来,我自己学习过Prompt Engineering之后,所掌握的一些基本的方法。

这篇文章是想写给每一个想用LLM武装自己的普罗大众的,所以我会尽最大努力去不谈技术细节,只讲基本的原理和如何使用,争取让没有任何技术背景的人也都能看懂、学会。

什么是Prompt?

Prompt,又称提示词,在本文中我们特指人们跟LLM进行交互时,发送给LLM的指令。

更广义地讲,Prompt是人类发给各种人工智能模型、用以完成特定任务的指令。这里的人工智能模型,包含LLM,也包含各种其它生成式AI模型,比如文生图、文生视频等。

Prompt的基本形式就是我们人类的语言,在人工智能这个领域,有一个专门的分支,叫自然语言处理(Natural Language Processing),它就是LLM背后的核心技术。

在文本中后续的介绍中,如果没有特别的说明,提到的Prompt就特指是在LLM这个领域中的。

什么是Prompt Engineering?

Prompt Engineering,又称提示词工程,它是指我们为了让LLM能够更好地完成我们给它的任务,我们对Prompt进行优化、调整的过程。

可能会有人这么问,LLM已经这么强了,直接丢给它个指令,让他去执行就好了,为什么还需要Prompt Engineering呢?

确实像OpenAI的GPT4这样的LLM已经非常强了,很多简单的任务,我们直接用自然语言丢给他就去执行就好了。

但是,对于一些复杂的问题,Prompt写得好不好,直接影响着大模型给出答案的正确与否。

本质上,LLM是一个概率模型,它只是在给定的信息的前提下,给出概率最大的结果,它并不保证结果的合理性和正确性。

要让LLM给出的结果尽可能地合理、正确,这是我们使用LLM的人的职责。

这就是我们要去学习Prompt Engineering的原因。另外,也有人说Prompt Engineer(提示词工程师)将会成为未来非常有竞争力的一种职业。

写好Prompt,需要注意哪些方面?

前段时间,AI界的大佬 --- Andrew NG推出过一个Prompt Engineering的短课程《ChatGPT Prompt Engineering for Developers》。

这是面向程序员的一个课程,其他人听起来可能稍微有些吃力。我把他在这个课程中的核心思想,在这里进行总结,用大白话帮助大家掌握写好Prompt的一些基本理念。

1. 明确、具体是关键

我们发给LLM的批令,越明确、越具体,对于LLM越友好。

举个例子,我们让LLM对一段文字进行总结:

Prompt1:请给我总结一下这段文字的要点:要总结的文字

Prompt 2:你的任务是帮我总结给定文字的要点,总结的要点请按下面的格式输出,这里'###'是分隔符: ### -{{要点1}} -{{要点2}} -… -{{要点n}} ### ,每个要点不要超出20个字。这是要你总结的文字: ### 要总结的文字 ###

Prompt 2相比Prompt 1,对输出有了更加明确具体的要求,这样LLM输出的内容也会更加贴合我们的需求。另外,我们还用了'###'作为分隔符,进一步帮LLM明确要求。

我们在给LLM发指令的时候,第一个关键点,就是我们要把给LLM做的任务尽可能细化,把要求尽可能明确、具体地描述出来。

2. 给LLM更多的时间去思考

《思考快与慢》这本书里介绍了我们人类大脑的“系统1”和“ 系统2”。

系统1是快思考系统,反应很快,但可能会出错。

系统2是慢思考系统,需要更长的反应时间,进行思考、推理,但结果会更加靠谱。

默认情况下,LLM就像是一个快思考的系统,他利用自己已掌握的知识,快速给出答案,但并不能保证结果的正确性。

为了让LLM给出的答案更加靠谱,我们需要通过Prompt Engineering 的方式,把LLM的慢思考调动起来。

这就是“给LLM更多的时间去思考”背后的大致逻辑。

给LLM更多的时间去思考,一个简单的技巧是在你的Prompt后面,加上这样一句话“Let’s think step by step”。这句话会引导LLM,会去分步骤思考,效果会比不加这句话要好。

另一个技巧,在Prompt中加入一些例子,让LLM照着例子进行推理、思考。这一块的技巧性很强,我们在接下来的部分,介绍几种具体的技巧。

思维链技术:Chain-of-Thought

这是《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》这篇论文里讲的一个Prompt Engineering的技巧。

CoT(Chain-of-Thought)的核心思想是,在Prompt中加入一些示例,来引导LLM展现出更好的推理能力。

这里的关键是在Prompt中加入的示例,在这些示例中,我们会用自然语言描述一系列的推理过程,并最终引导出示例问题的正确结果。

这个过程有点像,我们教小孩做应用题,我们先给小孩子分析讲解一些示例。然后再把新的问题让小孩子来解决。小孩子根据从示例中学习到的推理、分析能力,最终解出了新的问题。

下面我们来看论文中给的CoT的例子:

上图中,左侧是常规的Prompt,右侧是CoT Prompt。蓝色标记出的部分是提供给LLM的示例。绿色标记出的部分是LLM输出的推理过程。

在使用CoT这种Prompt Engineering技巧的时候,有几个注意点:

(1)CoT是LLM足够大(参数足够多,通常是在1000亿参数)时才涌现出来的能力。因此,在一些不够大的LLM上,CoT的效果并不明显。

(2)通常,在Prompt中加入的示例不是1条,而是多条。具体要考虑解决的问题类型,以及Prompt的长度(因为LLM的Prompt长度通常都是有长度限制的)。

自一致性技术:Self-Consistency

这是《Self-Consistency Improves Chain of Thought Reasoning in Language Models》 这篇论文里讲的另一个Prompt Engineering的技巧。

Self-Consistency技术是在CoT技术的基础之上,进行的进一步优化,目的是为了让LLM的推理能力能够更进一步提升。

Self-Consistency的大致原理是这样:

(1)利用CoT Prompting技巧,写好Prompt;

(2)不要让LLM只生成最合适的唯一一个结果,而是利用LLM结果的多样性,生成多种不同推理路径所得的结果的集合;

(3)从结果集合中投票选择,选出投票最多的结果,做为最终的答案。

这里有像我们人类解决问题的过程,如果我们用多种不同的方法去求解,大多数方法求解出来结果都一样的答案,那很有可能就是我们最终的答案。

下面我们来看论文中给的Self-Consistency的例子:

在上面的例子中,虚线之上是标准的CoT的过程,它得到的结果是错的。虚线之下是Self-Consistency的过程,得到的三个答案中,有1个是错的,有2个是正确的。最终答案是大多数投票的结果,是正确的。

从易至难技术:Least-to-Most

这是《Least-to-Most Prompting Enables Complex Reasoning in Large Language Models》 这篇论文中介绍的方法。

CoT的特点是同类型问题的迁移思考,因此,如果给的例子是比较简单的问题,而给的问题却是难度大很多的问题,这时候CoT的效果就不尽如人意。

LtM(Least-to-Most)主是为了解决CoT这种从易到难的迁移能力不足而诞生的。

LtM的核心思想是:教LLM把复杂问题,拆解成一系列的简单问题,通过解决这一系列的简单问题,来最终得到复杂问题的结果。

LtM的过程包含两个阶段:

(1)分解阶段:把复杂问题分解成一系列的简单子问题。这个阶段的Prompt中要包含分解问题的示例,要和分解的问题;

(2)解决子问题阶段:这个阶段的Prompt中包含三部分内容:一是完整的LtM的例子;二是已解决的子问题及其答案列表;三是接下来要解答的子问题。

这里也非常像我们人类学习解决复杂问题的过程,我们通过把复杂问题拆解成一个个的简单问题,通过把一个个的简单问题解决掉,最终把复杂问题也解决了。

下面我们来看看论文中LtM的例子:

从上图中,我们可以对LtM Prompting有一个直观的认知,通过引导LLM解决子问题,一步步引导LLM得出复杂问题的结果。

最后的话,Prompt Engineering当下还是一个非常年轻的领域,未来肯定还会有更加优秀的成果出来,我们持续保持关注。

引用链接

[1] 《ChatGPT Prompt Engineering for Developers》: https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/
[2] 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》: https://arxiv.org/pdf/2201.11903.pdf
[3] 《Self-Consistency Improves Chain of Thought Reasoning in Language Models》: https://arxiv.org/pdf/2203.11171.pdf
[4] 《Least-to-Most Prompting Enables Complex Reasoning in Large Language Models》: https://arxiv.org/pdf/2205.10625.pdf

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved