1.1 简介
1.1.1 什么是 Prompt Engineering?
解释这个词之前,首先需要解释 prompt 这个词。简单的理解它是给 AI 模型的指令。它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息,生成对应的文本,亦或者图片。
比如我在文心一言里输入 <天上有几个太阳?> ,这个问题就是Prompt。
而 Prompt Engineering (中文意思为提示工程,后缩写为 PE)则是:
Prompt Engineering 是一种人工智能(AI)技术,它通过设计和改进 AI 的 prompt 来提高 AI 的表现。Prompt Engineering 的目标是创建高度有效和可控的 AI 系统,使其能够准确、可靠地执行特定任务。 因为人类的语言从根本上说是不精确的,目前机器还没法很好地理解人类说的话,所以才会出现 PE 这个技术。另外,受制于目前大语言模型 AI 的实现原理,部分逻辑运算问题,需要额外对 AI 进行提示。
另外,目前的 AI 产品还比较早期,因为各种原因,产品设置了很多限制,如果你想要绕过一些限制,或者更好地发挥 AI 的能力,也需要用到 Prompt Engineering 技术。这个我们在后续的章节会讲到。
所以,总的来说,Prompt Engineering 是一种重要的 AI 技术:
- 如果你是 AI 产品用户,可以通过这个技术,充分发挥 AI 产品的能力,获得更好的体验,从而提高工作效率。
- 如果你是产品设计师,或者研发人员,你可以通过它来设计和改进 AI 系统的提示,从而提高 AI 系统的性能和准确性,为用户带来更好的 AI 体验。
1.1.2 需要学习 PE 吗?
坦率说来,大家对 PE 有一些争议,
前面一节我们解释了 prompt 的各种好处。但也有人认为这个就像当年搜索工具刚出来的时候,出现了不少所谓的「搜索专家」,熟练使用各种搜索相关的奇技淫巧。但现在这些专家都不存在了。因为产品会不断迭代,变得更加易用,无需再使用这些技巧。
但综合我们对产品和用户的理解,以及各位大佬的看法,我们的理解是:
现在 AI 的发展还比较早期,了解和学习 PE 价值相对比较大,但长远来看可能会被淘汰。这个「长远」可能是 3 年,亦或者 1 年。
从用户的角度看,学习 prompt 可以让你更好地使用 ChatGPT 等产品。
从产品的角度看,对于用户来说,prompt 会是个短期过度形态,未来肯定会有更友好的交互形式,或者理解能力更强的 AI 产品。
1.2 基础用法
本章节会简单介绍下 prompt。我们说一下它的基础用法:
- 你只需要登录 文心一言 官网后,在输入框内输入问题,或者指令即可。AI 会根据你的指令,返回相应的内容,在后续的章节中,我们会介绍更详细的用法与技巧
- 另外,还有一个特别留意的,文心一言还支持多轮对话,比如当你问<中国的首都是什么?>,它回答<北京>,你可以接着问<那里居住了多少人>,你不需要在问题里重复北京这个词。文心一言知道那里指的就是北京。
1.3 基本原则 & 建议
在和文心一言对话时,亦或者在使用和设计 prompt 时,有以下几个原则与建议。记住这几个原则,能让你写出更好的 prompt。
1.3.1 建议使用最新的模型
如果是直接官网使用 文心一言,那无需在意这个原则。如果是通过 API 的方式使用,则建议先使用最新的模型测试。
1.3.2 Prompt 里最好包含完整的信息
这个是对结果影响最大的因素。比如如果你想让 AI 写一首关于 西施 的诗。当我们明确使用七言绝句时,就可以得到我们想要的七言绝句。
1.3.3 Prompt 最好简洁易懂,并减少歧义
比如我们应该尽量减少不要太多等这种无法定量的词汇,可以使用3至5句话,或不少于500字等这种定量的描述。
1.4 基本使用场景&使用技巧
1.4.1 问答问题
这个场景应该是使用 AI 产品最常见的方法。以 文心一言 为例,一般就是你提一个问题,文心一言 会给你答案,比如像这样:
在这个场景下,prompt 只要满足前面提到的基本原则,基本上就没有什么问题。但需要注意,不同的 AI 模型擅长的东西都不太一样,prompt 可能需要针对该模型进行微调。另外,目前的 AI 产品,也不是无所不能,有些问题你再怎么优化 prompt 它也没法回答你。
这种直接提问的 prompt ,我们称之为 Zero-shot prompt。模型基于一些通用的先验知识或模型在先前的训练中学习到的模式,对新的任务或领域进行推理和预测。你会在高级篇看到相关的介绍,以及更多有意思的使用方法。
1.4.2 基于示例回答
在某些场景下,我们能比较简单地向 AI 描述出什么能做,什么不能做。但有些场景,有些需求很难通过文字指令传递给 AI,即使描述出来了,AI 也不能很好地理解。
比如算一道数学题,先算乘法后算加法,需要给出过程。此时你就可以在 prompt里增加一些例子,我们看看这个例子。
这个是没有任何示例的 Prompt:
这个是给了样例之后的 Prompt,可以看到,符合我们预期的结果:
1.4.3 推理
在问答这个大场景下,还有一个子场景是推理,这个场景非常有意思,而且是个非常值得深挖的场景,prompt 在此场景里发挥的作用非常大。
举个比较简单的例子,将一个古典的鸡兔同笼问题输入到 文心一言 中,会得到这样的解答结果:
1.4.4 无中生有——写代码
除了回答问题外,另一个重要的场景是让 AI 根据你的要求完成一些内容生成任务,根据输出的结果差异,我将其概括为以下几个主要场景:
1.无中生有
2.锦上添花
3.化繁为简
本章,我们先来聊聊「无中生有」场景。顾名思义,就是让 AI 给你生成一些内容。你只需要向 AI 描述你想写的内容,AI 就会按你的要求写出该内容。比如:
1.撰写招聘信息
2.撰写电商平台的货物描述
3.撰写短视频脚本
4.甚至让它写代码都可以
像撰写招聘信息等,你只需要明确目标,将目标定得比较明确即可生成能让你较为满意的答案。本章我想聊下写代码。下面是一个让 文心一言 写代码的案例。
如下是让 文心一言 用python写一段将图片转为灰度图的代码,并在jupyter notebook中展示。
In [1]
from PIL import Image # 读取图片 img = Image.open(‘image.jpg’) # 将图片转换为灰度图像 gray_img = img.convert(‘L’) # 显示灰度图像 gray_img.show() # 保存灰度图像 gray_img.save(‘gray_image.jpg’)
<PIL.Image.Image image mode=L size=512×512 at 0x7F87D99DC250>
1.4.5 锦上添花——改写内容
除了从 0 生成内容外,你也可以先给 AI 一段已经写好的内容,然后让 AI 对其进行修改,让 AI 帮你将内容改得更好。实际的场景有如:
- 翻译:将中文文档翻译成英文,亦或者将英文翻译成中文。关于翻译,我还想强调,像 文心一言 除了能翻译人类的语言外,还能翻译编程语言,比如将 Python 代码翻译成 Haskell 代码。
- 修改:修改内容的语法,甄别内容里的错别字。
- 润色:润色文章,将内容改成另一种风格。
本章重点介绍下润色场景,下面这是个润色的例子。
技巧:增加角色或人物
我再介绍一个更有效的技巧,就是在 prompt 里增加一些 role(角色)相关的内容,让 AI 生成的内容更符合你的需求。
比如还是上面那个 rewrite 的例子,我在例子前加入这样的一段话,我让 AI 假设自己是一个小学老师,并且很擅长将复杂的内容转变成 7、8岁小朋友也能听懂的话,然后再改写这段话。就会得到下面这样的结果,话语变得更加活泼可爱了。
1.4.6 锦上添花——信息解释
锦上添花下的第二大的场景是信息解释。它跟改写内容有点像,但又不太一样,信息解释有可能提供超过原文内容的信息。
举几个信息解释的例子,大家应该就能理解了:
- 解释代码:比如你看到一段 Python 的代码,但你看不懂,你可以让 AI 解释下代码的含义。
- 解释论文:看某篇论文看不懂,或者论文里的某一段看不懂,你也可以让 AI 解释。
以解释代码为例,它阐述了这段代码是拿来干什么的,同时还阐述了各个参数的含义。
1.4.7 化繁为简——信息总结
内容生成大场景下的第二个场景是化繁为简,这个场景其实很好理解,就是将复杂的内容,转为简单的内容,一般常遇到的场景有:
- 信息总结:顾名思义,就是对一堆信息进行总结。
- 信息解释:这个跟改写内容有点像,但这个更偏向于解释与总结。下一章会给大家介绍更多的例子。
- 信息提取:提取信息里的某一段内容,比如从一大段文字中,找到关键内容,并分类。
本章会讲一下信息总结。信息总结还是比较简单的,基本上在 prompt 里加入总结 summarize 就可以了。但如果你想要一些特别的效果,不妨组合使用之前介绍的技巧,比如:
- 增加总结示例,让 AI 总结符合你需求的内容
- 增加 role,让 AI 总结的内容具有一定的风格
不过在这个场景,还有个技巧需要各位注意——使用 ”“” 符号将指令和需要处理的文本分开。不管是信息总结,还是信息提取,你一定会输入大段文字,甚至多段文字,此时有个小技巧。可以用 “”“ 将指令和文本分开。根据我的测试,如果你的文本有多段,增加 ”“” 会提升 AI 反馈的准确性。像我们之前写的 prompt 就属于 Less effective prompt。为什么呢?据我的测试,主要还是 AI 不知道什么是指令,什么是待处理的内容,用符号分隔开来会更利于 AI 区分。
1.4.8 化繁为简——信息提取
介绍完信息总结,再聊聊信息提取,我认为这个场景是继场景3推理以外,第二个值得深挖的场景。这个场景有非常多的有意思的场景,比如:
- 将一大段文字,甚至网页里的内容,按要求转为一个表格。按照这个思路你可以尝试做一个更智能的,更易懂的爬虫插件。
- 按照特定格式对文章内容进行信息归类。
第二个可能比较难理解,举个 文心一言 里的例子,它的 prompt 是这样的