随着大模型在2023年横空出世,“Prompt 工程” 应运而生,作为用好大模型最重要的武器,Prompt 的好坏对模型效果有着决定性的影响。然而,网络上大量相关文章多是罗列“Prompt 工程” 中的若干技巧,少有体系化的总结,让人看完依然不知道该如何入手。
本文希望结合我们在 “Prompt 工程” 中的实践经验,更加体系化地对 “Prompt 工程” 进行梳理,希望可以一步步地帮助大家用好大模型,人人都是 Prompt 工程师。
01、写在前面
1.1 Prompt 与 GPT 的前世今生
如今我们所讨论的大语言模型,大多专指2023年 “ChatGPT” 爆发以来出现的众多模型,而非广义的 Transformer 架构下的所有模型。而 Prompt 的概念也正是伴随 “GPT” 模型的发展应运而生的。我们要明白 Prompt 是什么,就要知道 Prompt 的前世今生,这就要从 GPT 的发展开始谈起。
如上图所示,自 2017 年 Transformer 诞生以来,在这个架构的基础上,以 BERT 为代表的模型和以 GPT 为代表的模型便以极快的速度向前发展。在 2018 年 BERT 诞生后,语言模型便开始重塑 NLP 领域,快速在市场中得到广泛应用,时至今日这些语言模型依然是 NLP 领域中最被广泛应用的模型,我们今天看到以 GPT 为代表的各类大模型也是其中之一。
从 GPT 的发展来看,我们可以大致划分为4个阶段, " GPT1 - GPT2 - GPT3 - ChatGPT " ,我们可以从这个发展过程中了解到 Prompt 是如何诞生的,以此更好的了解 Prompt。
阶段1:GPT-1 诞生在 Transformer 初期, 是最早期基于 Transformer 架构打造的模型之一,其采用了和 BERT 相同的范式,通过 “pretrain + finetune” 的方式, 首先让模型在大量未标注的数据上自监督的进行学习,完成预训练,随后在应用时再使用有监督数据进行微调,以此让模型可以适用于各种任务。在这种范式下 BERT 作为双向模型,可以充分的获取上下文信息,这让他在各类任务中都展现出了更精准更稳定的效果,而 GPT 作为单向模型,更擅长生成任务,而由于在这个阶段还处于大模型发展的早期,模型规模和效果还没有成长起来,因此生成的不稳定性使得 GPT 并没有被大规模应用。时至今日,即便 GPT 已经展现出了令人惊艳的效果,但目前 BERT 类的模型依然是各个业务使用更多的模型。
阶段2:相比 GPT-1,GPT-2 第一次提出了全新的范式, 当我们扩大模型规模增加训练数据,让模型在一个称为 WebText 的由数百万个网页组成的数据集上完成预训练后,模型不再需要任何监督数据,就可以完成各类任务。在 OpenAI 的 Blog 中我们可以看到,团队在研究过程中发现,提升模型规模及训练数据的体量,可以让模型在 zero-shot 任务中的效果明显提升, 这也在今天被认为是对 scaling law 的第一次发现,虽然当时还没有诞生智能涌现的现象。也有人解读,由于 BERT 在各个领域展现出的优异效果,GPT 被迫找到了新的发展方向,也为如今的智能涌现奠定了基础。由此,GPT 开启了与 BERT 截然不同的范式,并在新的范式下进行研发,专注模型在 zero-shot 中的效果。
阶段3:沿着 GPT-2 增大模型体量和训练数据规模的思路, GPT-3 使用了 570G 的训练数据,达到了 GPT-2 的15倍,参数量更是达到了惊人的 1750B,是 GPT-2 的 116 倍。参数量的提升让 scaling law 大显神威,让模型在各个领域中都展现出了令人惊艳的效果,尤其是在 zero-shot 方面, 发布会上通过手绘 UI 图生成前端代码的例子至今让人印象深刻。GPT-3 在 2020 年底发布,当时 Transformer 已经经过了4年的发展,BERT 类模型已经在各类应用中被广泛使用,成为了绝对的主流。然而在这种情况下,GPT-3 的发布也依然成为了领域中最瞩目的事件,即便还是有很多问题,但其远超预期的效果依然令人震撼。
阶段4:之后的故事大家都非常熟悉了,OpenAI 在 GPT-3 的基础上针对不同场景进行了优化,在“多轮对话”的优化中诞生了“ChatGPT”, 随后成为了世界上最火热的话题,也被认为是 AI 市场化的起点。GPT-3 后的模型不再开源,也没有论文公开发表,我们只能在 Blog 中获取一些信息,此处不再进行展开。
最后我们来做个总结,从领域发展的角度我们可以看到 3 种不同的研发范式:
- Transformer 之前:有监督训练(train)
- GPT1 & BERT:无监督预训练(pre-train) + 有监督微调(finetune)
- GPT2 & GPT3:无监督预训练(pre-train) + 提示词(Prompt)
我们可以清晰的看到其中的不同,模型能力的研发越来越不依赖 “训练” 的过程,而是更大程度的依赖 “预训练”,依赖 “模型” 本身的能力。在 BERT 所代表的范式下,我们还可以通过 “微调” 在参数层面影响模型。而到了以 “GPT3” 为代表的范式下,也就是我们现在用的大模型,我们不再借助 “微调” 的方式调试模型,而是通过 “输入” 直接影响 “输出” 的质量,而如何在应用中得到一个好的 “输入” 就是 “Prompt 工程” 需要做的事。
以上,我从发展的角度谈论了 Prompt 的前世今生,Prompt 是从何而来,为什么我们需要 “Prompt 工程”,希望可以更好的帮助大家了解 Prompt,下面我就来具体谈谈 Prompt 是什么。
1.2 Prompt 到底是什么?
Prompt 译为 “提示”,与 “zero-shot” 的概念相辅相成,“zero-shot” 就是不通过训练直接向模型提问的应用方式,而 Prompt 就是指提问的方式。从这个概念上看 “模版” 可能是更合适的称呼,为什么要用 “提示” 这个单词呢?
实际上,在刚刚出现这个概念时并没有 “Prompt” 这样的称呼,在早期的论文中其往往会被称为 “输入形式(format)” 或 “输入模版(template)”,但随着领域的发展,尤其是在 GPT-3 之后,Prompt 的叫法才被逐步确定,大家认同 “提示” 的概念与其作用更加贴切,尤其是在大语言模型的语境下尤为合适,因此逐渐成为了公认的称呼。
那 Prompt 到底在提示什么呢?从前文中对范式的解读来看,模型能力的应用越来越向 “预训练” 的部分倾斜,绝大多数能力应当是在 “预训练” 阶段就构成的,而非通过进一步的训练构建。而在这种思想的基础上,Prompt 则像一把解锁模型能力的钥匙,让这些 “预训练” 阶段构成的能力唯我所用。因此,Prompt 就是在提示模型回忆起自己在预训练时学习到的能力。
我们可以把 “知识” 和 “能力” 进行更进一步的分解,我们更多的是希望使用大模型的能力(理解,总结,生成,推理,e.t.c.),而非知识。 与现在越来越火热的 RAG 技术一样,我们更倾向于将知识通过外部注入的方式让模型试用,而能力则完全需要依赖预训练阶段。我们要做的是通过 Prompt 调用大模型的能力去解决问题,让这些能力表现的更精准,而并非把他当成一个知识库。如果与人做对比也一样能得到这个结论,人可以从外部收集信息,并利用自身的智能进行决策,而不是把知识都装到自己脑子里。Sam Altman 在早期采访中也提到,把大模型当成搜索引擎的应用方式是错误的,智能的体现才是大模型的关键。
总结而言,Prompt 就是在提示大模型 “回忆” 起自己的某些能力,在合适的场景下为我们解决问题,这也是 Prompt 工程最核心的理念之一。
1.3 为什么不能依赖训练?微调有什么问题?
除了闭源大模型外,现在小型的开源模型也是应用的主流,也随之诞生了 LoRa 这样的训练技术,可以在较小的成本下完成训练,那是否就意味着我们可以不再依赖 Prompt,而是像以前一样通过 “微调” 的范式调试模型呢?
首先是成本问题, Prompt 这种新范式的诞生是由于大模型超大的体量,导致我们无法在较小的成本下对参数产生足够的影响,即便是开源的较小的模型我们也大多采用 LoRa 这类 “附加参数” 的方式进行微调。因此,对于大模型应用而言,考虑到成本,我们实际上根本无法完成 “训练” 的过程。
其次是效果问题, 如果我们利用 LoRa 这样的技术进行微调,对于模型参数的影响是很有限的,目前更倾向认为这是一种“对齐”的过程,且还很有可能引发“遗忘”的问题。而如果你希望通过微调让模型掌握 “知识”,这也不是一个好的思路,这意味着你需要不断的通过训练来保持知识的更新,且需要针对不同领域训练多个不同的模型,同时训练也并不是一个可靠的过程,相比之下现在“超长上下文的模型” 加 “RAG” 被认为是更可靠的方式。
最后,这也不是一个长期可靠的研发思路, 大模型现在惊艳的效果是基于 “scaling law” 的智能涌现,本质还是在应用大模型预训练阶段的能力。无论是“开源”还是“闭源”模型,一定是通过参数量的增加或其他方式,让模型本身的能力不断提升,且目前看依然保持指数级的增长。在这种情况下,过于依赖基于任务的训练是不长久的,因为大模型的本质不是通过训练构建能力,而是通过输入调度能力,并在任务维度进行对齐。即便是开源模型的应用,长期来看也不会是以任务维度进行训练。
因此,训练与微调并不能取代 Prompt 的作用, 且这种范式在众多方面都展现出了弊端,这也证明了 Prompt 工程的重要性,Prompt 是新范式下应用模型能力的关键。
1.4 为什么要写这篇文章?
自大模型横空出世依赖变成为了世界最大的热点,而 “Prompt 工程” 一直是其中最为火热的方向之一,早在大模型发展之初很多人便开始呼吁设立 “Prompt 工程师” 的职位,似乎在新的时代下写好 Prompt,用好大模型,是各个领域最重要的事情之一。在这样的背景下,Prompt 相关的研究已经积累的十分充足,无论是公司内外都积累了众多的文章和课程,其中最火的 《Prompt Engineering Guide》,和吴恩达老师的《ChatGPT Prompt Engineering for Developers》,都对 “Prompt 工程” 作出了详细的介绍,是非常重要的学习资料。那为什么我还要写这篇文章呢?
这些文章和教程都有一个共通的问题,他们大多是对技巧的罗列,例如《Prompt Engineering Guide》中就罗列了大量技巧,告诉你可以在 Prompt 中 “增加示例”,“增加角色” 等等。但并没有一个体系化的结构,一个标准化的工作流,告诉大家如何一步步的完成一个 “Prompt”,如何从0开始完成 “Prompt 工程” 的工作。
因此本文尝试结合我们的研发经验,体系化的对 “Prompt 工程” 的工作进行总结,得到一些标准化的工作流程,并通过这样结构化的整理,可以更好的对 “Prompt” 进行管理,让“Prompt”作为大模型应用的基石,更加可靠有效可扩展。具体而言,我们把从0到1完成一个 Prompt 的过程拆分为了5个步骤。我们利用一套统一的模版,解决最困难的初始 Prompt 书写的问题,并结合实际应用一步步的进行优化,从而体系化的完成 “Prompt 工程” 的工作。
我们希望通过我们的方法,可以提升 Prompt 工程的工作效率,降低 Prompt 技术的应用成本,并解决 Prompt 难以管理的问题。让大家都可以从0到1的完成大模型的调试,并让大模型在各个领域中被更好的应用。
02、Prompt 万能框架
在编写 Prompt 时,从0到1的编写出第一版 Prompt 往往是最难的,而基于已有 Prompt 利用各种技巧进行优化则相对简单。善于解决 “数理问题” 的我们在面对这样一个偏 “文理问题” 的任务时,就像小时候写作文一样难以提笔。如上图所示,为了解决这个问题,我们使用了一套 “万能模版”,把一个 Prompt 拆分成了 “立角色 + 述问题 + 定目标 + 补要求” 这四个部分,希望通过结构化的拆分完成这最困难的一步,无论面对什么任务,利用这个模版都可以得到一个“及格”的 Prompt。下面我就具体和大家阐述一下这个模版是如何得到的,为什么他是有效的。
对与 Prompt 的作用和定位已经在第一章中进行了详细的讨论,Prompt 的作用就是根据我们的问题调用模型的能力,我们要通过提问的方式,明确的让模型知道我们想要什么,我们的目标是什么,从这个基本思想出发,Prompt 应该包含以下几点:
- 问题是什么: 首先你要告诉模型你的问题是什么,你的任务是什么,要尽量描述清楚你的需求。
- 你要做什么: 下面你需要告诉大模型具体要做什么,比如做一份攻略,写一段代码,对文章进行优化,等等。
- 有什么要求: 最后我们往往还需求对任务补充一些要求,比如按特定格式输出,规定长度限制,只输出某些内容,等等。
通这 3 部分的描述我们就把 “要大模型做什么” 描述清楚了,这个想法十分自然,即便不是大模型,而是希望其他人为你完成某项任务,往往也需要通过这 3 部分把问题描述清楚。由于这仅仅是第一版 Prompt,你不需要描述的过于详细,也不需要使用技巧,只需要用简练的语言把这几部分描述清晰即可。以下是几个示例:
例1:生成产品摘要 问题是什么:你的任务是帮我生成一个产品的简短摘要。 你要做什么:我会给你产品的需求文档,及用户对产品的评价,请结合这些信息概括产品的功能及现状,为我生成一份产品摘要。 有什么要求:请尽量概括产品的特点,并用轻松幽默的语言风格进行编写,摘要的字数不要超过50个字。
例2:生成代码注释 问题是什么:你的任务是帮我的代码生成注释。 你要做什么:我有一段 python 代码,需要你对代码的内容进行分析,并为代码添加注释。 有什么要求:请结合代码内容,尽量详细的补充注释,不要遗漏,每条注释请以 “comment:” 作为前缀。
例3:生成测试用例 问题是什么:你的任务是帮我设计一款产品的测试用例。
你要做什么:我会提供给你产品的需求文档,需要你结合需求的功能描述进行测试用例的编写。
有什么要求:请结合需求中功能的结构,对测试点进行梳理,并有层级的输出测试用例,请保证每一个功能的测试点没有遗漏。
以上是3个简单的示例,让大家更直观的感受这 3 部分的含义,在实际应用中这 3 部分的内容会比例子中复杂的多,此处仅仅为了说明框架的结构,实际内容没有参考价值,各部分内容的细化会在第三章中详细展开。
在描述清楚任务后,我们就需要调度模型的能力去完成我们的任务, 不同的任务需要用到不同的能力,这往往依赖认为的拆分。我们可以想像,当我们让一个小白帮我们完成一项任务时,我们需要对任务进行分解,并告诉他每一步需要怎么做,以此来让他完成一项复杂的任务。对于大模型而言,这当然也是试用的,甚至十分好用,这在第5章的 “CoT” 中还会再次提到。
你当然可以人为的完成这种拆分,再一条条的解释给大模型,但这种做法并不通用,每个领域都有自己独特的专项能力,每个任务都有自己的工作流程,因此这种方案并不适合放到一个通用的框架当中。好在大模型能力的调用还存在一条捷径,那就是“角色”,他就像大模型里自带一个“能力包”,可以很容易的对模型能力进行调用。 每一个角色,都对应着该角色包含的若干能力,我们可以通过设定角色,“提示”大模型使用该角色对应的能力,这与前文“Prompt 到底是什么” 中介绍的想法极其匹配,充分说明是“Prompt” 提示的作用,通过简单的“提示”调用出大模型预先训练的能力,这也就是“角色”如此有用的原因。
由此我们就最终得到了我们的 “Prompt 模版”,通过这个统一的框架我们可以完成绝大多数 Prompt 初版的编写,让大家在面对各类任务时可以高效的完成从0到1的尝试,而不必陷入无从下笔的困境。
除了效果之外,对 Prompt 结构化的拆分也对 Prompt 管理提供了很大帮助,我们的 Prompt 库不再是大段的文本,而是拆分成了4张表“角色表”,“问题表”,“目标表”,“要求表”。通过这种方式我们可以很大的提升 Prompt 的灵活性,并通过动态组合4个元素的方式完成各类任务,这在面对复杂任务,或通过多模型解决问题时,会提供稳定有效的支撑。
如何系统的去学习AI大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
全套 《LLM大模型入门+进阶学习资源包》↓↓↓ 获取~
👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈