吴恩达老师的文章是以ChatGPT API展开,这里我国内大模型:具体的大模型的API获取与应用参考:千帆大模型兼容openai接口,怎么详细操作并调用千帆大模型api?-CSDN博客

PS:中文版学习资料参考:面向开发者的LLM入门教程

目录

1. 什么是Prompt?

为什么要学习Prompt Engineering工程?

2. 大模型类型

2.1 什么是LLM?

2.2 基础 LLM

2.3 指令微调(Instruction Tuned)LLM

2.4 如何将基础语言模型转变为指令微调语言模型呢?

3. 文章主要内容掌握了关于 Prompt 的两个核心原则

3.1 第一个核心原则为:编写清晰、具体的指令

3.1.1 使用分隔符清晰地表示输入的不同部分

3.1.2 寻求结构化的输出

3.1.3 要求模型检查是否满足条件

3.1.4 提供少量示例

3.2 第二个核心原则是:给模型时间去思考

3.2.1 指定完成任务所需的步骤

3.2.2 指导模型在下结论之前找出一个自己的解法

1. 什么是Prompt?

最简单的理解就是:给大模型的输入称为 Prompt,将大模型返回的输出称为Completion。

为什么要学习Prompt Engineering工程?

随着 ChatGPT 等 LLM(大语言模型)的出现,自然语言处理的范式正在由 Pretrain-Finetune(预训练-微调)向 Prompt Engineering(提示工程)演变。对于具有较强自然语言理解、生成能力,能够实现多样化任务处理的 LLM 来说,一个合理的 Prompt 设计极大地决定了其能力的上限与下限。Prompt Engineering,即是针对特定任务构造能充分发挥大模型能力的 Prompt 的技巧。要充分、高效地使用 LLM,Prompt Engineering 是必不可少的技能。

2. 大模型类型

2.1 什么是LLM?

大语言模型(英文:Large Language Model,缩写LLM),也称大型语言模型,是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM是拥有数十亿到干亿参数、具有强大的语言理解和生成能力的模型。

2.2 基础 LLM

随着 LLM 的发展,其大致可以分为两种类型,后续称为基础 LLM 和指令微调(Instruction Tuned)LLM基础LLM是基于文本训练数据,训练出预测下一个单词能力的模型。其通常通过在互联网和其他来源的大量数据上训练,来确定紧接着出现的最可能的词。

例如,如果你以“从前,有一只独角兽”作为 Prompt ,基础 LLM 可能会继续预测“她与独角兽朋友共同生活在一片神奇森林中”。但是,如果你以“法国的首都是什么”为 Prompt ,则基础 LLM 可能会根据互联网上的文章,将回答预测为“法国最大的城市是什么?法国的人口是多少?”,因为互联网上的文章很可能是有关法国国家的问答题目列表。

2.3 指令微调(Instruction Tuned)LLM

与基础语言模型不同,指令微调 LLM 通过专门的训练,可以更好地理解并遵循指令。举个例子,当询问“法国的首都是什么?”时,这类模型很可能直接回答“法国的首都是巴黎”。指令微调 LLM 的训练通常基于预训练语言模型,先在大规模文本数据上进行预训练,掌握语言的基本规律。在此基础上进行进一步的训练与微调(finetune),输入是指令,输出是对这些指令的正确回复。有时还会采用RLHF(reinforcement learning from human feedback,人类反馈强化学习)技术,根据人类对模型输出的反馈进一步增强模型遵循指令的能力。通过这种受控的训练过程。指令微调 LLM 可以生成对指令高度敏感、更安全可靠的输出,较少无关和损害性内容。因此。许多实际应用已经转向使用这类大语言模型。

吴恩达老师的文章文章也是基于指令微调(Instruction Tuned)LLM进行实践。

2.4 如何将基础语言模型转变为指令微调语言模型呢?

这也就是训练一个指令微调语言模型(例如ChatGPT)的过程。 首先,在大规模文本数据集上进行无监督预训练,获得基础语言模型。 这一步需要使用数千亿词甚至更多的数据,在大型超级计算系统上可能需要数月时间。 之后,使用包含指令及对应回复示例的小数据集对基础模型进行有监督 fine-tune,这让模型逐步学会遵循指令生成输出,可以通过雇佣承包商构造适合的训练示例。 接下来,为了提高语言模型输出的质量,常见的方法是让人类对许多不同输出进行评级,例如是否有用、是否真实、是否无害等。 然后,您可以进一步调整语言模型,增加生成高评级输出的概率。这通常使用基于人类反馈的强化学习(RLHF)技术来实现。 相较于训练基础语言模型可能需要数月的时间,从基础语言模型到指令微调语言模型的转变过程可能只需要数天时间,使用较小规模的数据集和计算资源。

3. 文章主要内容掌握了关于 Prompt 的两个核心原则

3.1 第一个核心原则为:编写清晰、具体的指令

Prompt 需要清晰明确地表达需求,提供充足上下文,使语言模型准确理解我们的意图,就像向一个外星人详细解释人类世界一样。过于简略的 Prompt 往往使模型难以把握所要完成的具体任务。

3.1.1 使用分隔符清晰地表示输入的不同部分

在编写 Prompt 时,我们可以使用各种标点符号作为“分隔符”,将不同的文本部分区分开来。

分隔符就像是 Prompt 中的墙,将不同的指令、上下文、输入隔开,避免意外的混淆。你可以选择用 ```,""",< >,<tag> </tag>,: 等做分隔符,只要能明确起到隔断作用即可。

使用分隔符尤其重要的是可以防止 提示词注入(Prompt Injection)。什么是提示词注入?就是用户输入的文本可能包含与你的预设 Prompt 相冲突的内容,如果不加分隔,这些输入就可能“注入”并操纵语言模型,导致模型产生毫无关联的乱七八糟的输出。

3.1.2 寻求结构化的输出

就是按照某种格式组织的内容,例如JSON、HTML等。这种输出非常适合在代码中进一步解析和处理。例如,您可以在 Python 中将其读入字典或列表中。

3.1.3 要求模型检查是否满足条件

如果任务包含不一定能满足的假设(条件),我们可以告诉模型先检查这些假设,如果不满足,则会指出并停止执行后续的完整流程。您还可以考虑可能出现的边缘情况及模型的应对,以避免意外的结果或错误发生。

3.1.4 提供少量示例

即在要求模型执行实际任务之前,给模型一两个已完成的样例,让模型了解我们的要求和期望的输出样式。利用少样本样例,我们可以轻松“预热”语言模型,让它为新的任务做好准备。这是一个让模型快速上手新任务的有效策略。

3.2 第二个核心原则是:给模型时间去思考

在设计 Prompt 时,给予语言模型充足的推理时间非常重要。语言模型与人类一样,需要时间来思考并解决复杂问题。如果让语言模型匆忙给出结论,其结果很可能不准确。例如,若要语言模型推断一本书的主题,仅提供简单的书名和一句简介是不足够的。这就像让一个人在极短时间内解决困难的数学题,错误在所难免。

相反,我们应通过 Prompt 指引语言模型进行深入思考。可以要求其先列出对问题的各种看法,说明推理依据,然后再得出最终结论。在 Prompt 中添加逐步推理的要求,能让语言模型投入更多时间逻辑思维,输出结果也将更可靠准确。

我们在使用的过程中并不能直接控制模型的思考时间,那么该怎么去给模型思考呢?

其实我们可以给模型一些思考的流程,让模型按要求去做。

3.2.1 指定完成任务所需的步骤

给定一个复杂任务,给出完成该任务的一系列步骤。例如给出详细步骤,以及详细的回答格式(与章节3.1.2对应。)

3.2.2 指导模型在下结论之前找出一个自己的解法

在设计 Prompt 时,我们还可以通过明确指导语言模型进行自主思考,来获得更好的效果。

举个例子,假设我们要语言模型判断一个数学问题的解答是否正确。仅仅提供问题和解答是不够的,语言模型可能会匆忙做出错误判断。相反,我们可以在 Prompt 中先要求语言模型自己尝试解决这个问题,思考出自己的解法然后再与提供的解答进行对比判断正确性。这种先让语言模型自主思考的方式,能帮助它更深入理解问题,做出更准确的判断。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐