ChatGPT的出现之所以令人震惊,主要是因为大模型能够根据人类的语言(汉语、英语、日语等)生成新内容(例如文本、图像、音频、代码等)。
用户可以像聊天一样跟大模型进行交互,而无需任何技术专业知识或培训。并且用户可以在多轮对话中迭代地 “ 与人工智能聊天 ” ,在这个过程中完善他们的问题,直到达成目标。
输入给大模型的语言或者指令,就被叫做提示词。“ 提示词 ” 现在已经成为生成式人工智能的主要的编程界面,人人都能编程的时代已经到来。
ONE. 什么是提示工程?
提示工程定义为就是:为了达到用户目标,让大模型提供高质量的结果,设计和优化提示词的过程,通常分为两个步骤:
1. 设计指定模型和目标的初始提示
2. 通过迭代的方式提炼提示语以提高响应质量
这必然是一个反复尝试的过程,需要用户的直觉和努力才能获得最佳结果。那么为什么它很重要呢?要回答这个问题,我们首先需要了解三个概念:
Tokenization = 大模型如何 “ 看到 ” 提示词
Base LLMs = 基础模型如何 “ 处理 ” 提示
Instruction-Tuned LLM = 模型现在如何查看 “ 任务 ”
概念1 :Tokenization(分词)
分词是大模型处理的第一步,也就是大模型如何看到提示词。大模型会把提示词按照词语或者字进行切开,这种切开之后的词就叫分词。不同的大模型切分的方式都会有区别,对于不同语言的切分也会有区别。
对于大模型是根据分词(而不是原始文本)进行训练的,因此提示词的分词方式对最终的结果质量也会有直接的影响。
这个其实很好理解,像现在的标点符号其实就是一种分词方法。在古代是没有标点符号的,所以就会产生很多歧义,举个简单的例子,“ 南京市 / 长江 / 大桥 ”,和 “ 南京市长 / 江大桥 ”,就是两个完全不同的意思。
要直观地了解标记化的工作原理,可以使用 OpenAI Tokenizer 等工具。不过Tokenizer工具需要翻墙使用。所以只能通过Python调用 OpenAI 的 tokenizers 包测算一句话的token数,能看到 OpenAI 对于中文就是按照字进行切割,每个字就是一个token。
对比另一款国内的切字工具 “ 结巴 ” ,就会按照单词切分,同样一句话比OpenAI节省了一半token。
from tokenizers import Tokenizer
encoding = tiktoken.get_encoding(“cl100k_base”)
num_tokens = len(encoding.encode(“跟随AI模数师,探索AI生活,驱动数据智能”))
print(“ChatGPT 4.0 token数:”,num_tokens)
import jieba
list_jieba = list(jieba.cut(‘跟随AI模数师,探索AI生活,驱动数据智能’))
print(“结巴token数:”,len(list_jieba))
print(list_jieba)
概念2 :基础模型
提示词被切分后,大模型是预测这段提示词之后会出现的分词。
由于大模型接受过大量文本数据集的训练,因此会根据词语出现的概率做出预测,比如用 “ 苹 ” 字组词,95%的概率是苹果。大模型并不理解提示词语言的含义,他们只是根据概率进行预测。
但是这里提到的是基础模型,并不是我们通常直接使用的产品,基础模型可以智谱的体验中心(open.bigmodel.cn/trialcenter)试用,可以看到右边可以选择多轮对最大的token数、温度等参数。
温度设置的越高会让大模型随机性越强,就像问一个人同一个问题,他每次可能会用不同的方式回答。温度越低则会让大模型输出的内容会更稳定,多次输出的内容更容易一致。
概念3 :指令调整模型
大模型中的指令调整从基础模型开始,并使用刚才提到的进行微调,通过多轮的训练,并通过告诉他正确或者错误,让大模型理解人类的要求(有点像训练小狗)。
它使用诸如人类反馈强化学习 (RLHF) 之类的技术,可以训练模型 “ 遵循指令 ” 并从反馈中学习,从而产生更适合实际应用且与用户目标更相关的响应。
经过多轮的训练,最终就可以得到用户最终使用的大模型产品。
TWO. 为什么我们需要提示工程
现在我们知道了大模型如何处理提示词,接下来就来谈谈为什么需要提示工程。当前的大模型主要存在一些问题,如果不进行优化,就很难实现 “ 可靠且一致的答案 ”。
例如:
1. 答案是随机的:相同的提示词在不同时间对于同一个大模型都会产生不同的答案,更别提对于不同的大模型了。提示工程技术可以通过提供更好帮助我们最大限度地减少这些变化所带来的影响。
2. 模型会产生幻觉:大模型是静态数据集进行预训练的,所以对于没有训练的数据,大模型是缺乏相关知识的。因此它们可能会通过胡说八道。提示工程技术可以帮助用户识别和减轻幻觉,例如通过向大模型询问答案的出处或推理过程。
3. 消除模型间的差异:较新版本的模型或模型迭代将具有更丰富的功能,但也会带来奇怪的问题或者更复杂的情况出现。提示工程可以帮助我们开发最佳实践和工作流程,以消除这些差异并适应特定于大模型的要求。
幻觉示例: 想了解幻觉是如何运作的吗?想象一个提示词,让大模型为不存在的主题生成内容(以确保在训练数据集中没有该信息)。例如下面这个提示词:
提示词:制定一个关于2076年火星战争的课程计划。
那么,当我们在不同大模型执行这个提示词,会发生什么?
答案 1:ChatGLM-3.5
答案2 :Kimi Chat(月之暗面)
可以看到Kimi Chat发现了这个提示词是个虚构的事实,不过并不是每次都能发现。
所以,需要使用像提示词和温度配置这样的提示工程技术可以在一定程度上减少模型幻觉。新的提示工程架构还将新工具和技术无缝地融入到提示流程中,可以减轻大模型新版本带来的影响。
THREE. 编写提示词的方法
现在我们已经了解了提示工程的重要性,接下来就需要学习如何编写提示词,以便可以评估针对不同的技术以实现更有效的提示词设计。接下来,通过5步就可以学会提示词的写法。
第一步:从基础提示词开始
让我们从基础的提示词开始:发送到模型的文本输入,没有其他上下文。比如当我们将两只老虎的前几句的歌词发送到ChatGLM时,它会完成后面的内容,说明了基本的预测行为。
第二步:在提示词中添加角色
现在让我们给大模型赋予一个角色,通过这种个性化的方式,可以让他更明确他要完成的任务。
第三步:在提示词中添加对格式的要求
在上面的示例中,我们用到的提示词都是一个简单的文本查询。可以在提示词中添加更详细的任务,比如想描述一段美国内战的信息,可以通过不同的版本实现:
1.青铜版本:
简单撰写一段关于美国内战的描述。
2.黄金版本:
写下对内战的描述。提供关键日期和事件并描述其重要性,返回一个段落,然后是带有描述的关键事件日期列表。
钻石版本:
用一段话写下对内战的描述。然后提供 3 个要点,其中包含关键日期及其重要性。再提供 3 个关键历史人物及其贡献的要点。以 JSON 文件形式返回。
第四步:在提示词给出一些具体的示范
在某些情况下,大模型并不能很好地理解需要执行的任务,这时候我们需要像老师一样给他一些示范,让他按照示范进行模仿。
根据示范的数量,可以分为零样本提示(没有示范)、单样本提示(一次示范)、少样本提示(多次示范)。
可以通过这三种不同的方法让大模型玩一个24点的游戏。(24点是把4个数字通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏)
- 零样本提示
大模型得出了答案,但结果明显是错误的。
- 单样本提示
这次大模型尝试了几种不同的方法,但是还是没做对。
- 少样本提示
通过少样本提示,我们给出了3种示范,大模型通过两次尝试,计算出了正确的结果。可以看出少样本提示是可以有助于降低大模型的幻觉。
第五步:使用提示词暗示大模型
除了示范以外,还可以通过暗示的方式让大模型进行更多的创作。在这种情况下,我们通过通过隐晦的提示,让大模型朝正确的方向进行推理。
木星是太阳的第五颗行星,也是太阳系中最大的行星。它是一颗气态巨行星,质量是太阳的千分之一,但却是太阳系中所有其他行星总和的两倍半。木星是夜空中肉眼可见的最亮的天体之一,早在有记载的历史之前就已经为古代文明所熟知。
没有暗示的情况,仅总结这段话。
如果使用暗示的方式,大模型会围绕我们的暗示内容进行总结:
终极技巧:使用提示词模版
没有大量的练习,在实际使用中很难记住这么多提示词技巧,可以通过配置提示词模版,把固定套路提前写好。这时候提示词就不再是一道作文题,变成填空题了。
而且在大模型应用开发过程中,可以通过编程的方法把实际需要补充的内容替换,让用户在多次重用的情况下,能得到一致的结果。
尤其是在一些垂直的行业应用情况下,使用提示词模版也可以让用户得到更准确的信息。
比如在教育领域,可以通过设计提示词模板库,让大模型重点关注课程计划等关键目标, 课程设计、学生辅导等
那提示词模版去哪能找到?不用担心,早就为您总结了多套热门的提示词模版
FOUR. 提示工程的最佳实践
现在我们知道了如何构建提示词,下一步就可以开始思考如何设计它们以反映最佳实践。我们可以从两部分来思考这个问题:采取标准原则和采用正确的技术。
采取标准的提示词原则
提示工程是一个反复试验的过程,但请遵守三个广泛的原则:
-
明确问题:一个好的问题是正确答案的关键,尤其对于某个具体的领域,通过提供有帮助的上下文的提示信息,或使用特定领域的专业术语和示范来指导大模型给出正确的答案。
-
理解大模型: 我们知道大模型产生的结果本质上是随机的。但大模型实现也可能因它们使用的训练数据集(预先训练的知识)、它们提供的功能(例如,通过 API 或 SDK)以及它们优化的内容类型(例如,代码与图像与文本)。
了解您正在使用的模型的优点和局限性,并利用这些知识来确定任务的优先级或构建针对模型功能进行优化的自定义模板。
-
迭代和多轮验证:模型正在迅速发展,提示工程技术也在迅速发展。作为领域专家,您可能有其他特定应用程序的背景或标准,这些背景或标准可能不适用于更广泛的社区。
提示词最佳实践
现在让我们看看从业者推荐的常见最佳实践文档,这个方法是通用的,不限于具体的大模型。
-
评估最新版本:新一代的大模型可能具有改进的功能和质量,但也可能会产生更高的成本。评估它们的影响,然后做出迁移决策。
-
单独的说明和上下文:检查您的模型/提供程序是否定义了分隔符,以便更清楚地区分指令、示例和上下文内容。这可以帮助模型更准确地分配token的权重。
-
具体指令:提供有关所需上下文、结果、长度、格式、风格等的更多详细信息。这将提高答复的质量和一致性。
-
清晰的示范:大模型可能会对“展示和讲述”方法做出更好的响应。从“零样本”方法开始,你给它一个指令(但没有示例),然后尝试“少样本”作为改进,提供一些所需输出的例子。使用类比。
-
重复提问:有时您可能需要对模型重复问题,采用不同的使用说明和示范等。不断地迭代和验证,看看什么有效。
-
给模型一个 “ 退路 ”:如果模型由于任何原因无法完成任务,则为模型提供明确的退出指令,比如如果没找到对应的答案就说 “ 我不知道 ” ,这可以减少模型产生错误或幻觉反应的机会。
如何学习大模型 AGI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
-END-
👉AGI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉AGI大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉AGI大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓