ChatGPT Prompt Engineering Guide
date
Aug 2, 2023
URL
slug
chatgpt-prompt-engineering-guide
status
Published
tags
AIGC
summary
本文介绍了 ChatGPT Prompt 工程指南,包括基本 Prompt 框架、CRISPE Prompt 框架、Zero-Shot Chain of Thought、Few-Shot Chain of Thought、Self-Consistency 和 PAL Models 等技巧,以及如何使用这些技巧来生成更准确、连贯和多样化的文本。
type
Post
什么是 ChatGPT?
ChatGPT是一种基于自然语言处理的AI(人工智能)模型,可以对用户的输入进行理解和生成相应的文本输出。ChatGPT是GPT系列模型的一种,由OpenAI公司开发。ChatGPT可以应用于众多领域,例如聊天机器人、智能客服、机器翻译等等。
什么是 Prompt Engineering?
解释这个词之前,首先需要解释 prompt 这个词。
简单的理解它是给 AI 模型的指令。
它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息,生成对应的文本,亦或者图片。
比如,我们在 ChatGPT 里输入
What is the capital of China?
(中国的首都是什么?),这个问题就是 prompt。而 Prompt Engineering(中文意思为提示工程,后缩写为 PE)则是:
Prompt Engineering 是一种人工智能(AI)技术,它通过设计和改进 AI 的 prompt 来提高 AI 的表现。Prompt Engineering 的目标是创建高度有效和可控的 AI 系统,使其能够准确、可靠地执行特定任务。
看上去很难懂,我试着换个方式让你理解。
你可能用过不少 AI 相关的产品,你或许会觉得好像只需要会说话、会打字,就能让 AI 输出答案。好像不需要什么技术。
的确,如果你只想让 AI 给你答案,你不需要额外做什么,只需要输入文字即可。但如果你想要得到满意的答案,甚至精确的答案。就需要用到 PE 这个技术。
因为人类的语言从根本上说是不精确的,目前机器还没法很好地理解人类说的话,所以才会出现 PE 这个技术。另外,受制于目前大语言模型 AI 的实现原理,部分逻辑运算问题,需要额外对 AI 进行提示(这里你不需要深究原因,暂时先知道这是个问题即可)。
Basic Prompt Framework
查阅了非常多关于 ChatGPT prompt 的框架资料,我目前觉得写得最清晰的是 Elavis Saravia 总结的框架,他认为一个 prompt 里需包含以下几个元素:
- Instruction(必须): 指令,即你希望模型执行的具体任务。
- Context(选填): 背景信息,或者说是上下文信息,这可以引导模型做出更好的反应。
- Input Data(选填): 输入数据,告知模型需要处理的数据。
- Output Indicator(选填): 输出指示器,告知模型我们要输出的类型或格式。
只要你按照这个框架写 prompt,模型返回的结果都不会差。
当然,你在写 prompt 的时候,并不一定要包含所有 4 个元素,而是可以根据自己的需求排列组合。
CRISPE Prompt Framework
ChatGPT3-Free-Prompt-List
mattnigh • Updated Aug 30, 2023
另一个我觉得很不错的 Framework 是 Matt Nigh 的 CRISPE Framework,这个 Framework 更加复杂,但完备性会比较高,比较适合用于编写 prompt 模板。CRISPE 分别代表以下含义:
- CR: Capacity and Role(能力与角色)。你希望 ChatGPT 扮演怎样的角色。
- I: Insight(洞察力),背景信息和上下文。
- S: Statement(指令),你希望 ChatGPT 做什么。
- P: Personality(个性),你希望 ChatGPT 以什么风格或方式回答你。
- E: Experiment(尝试),要求 ChatGPT 为你提供多个答案。
以下是这几个参数的例子:
Step | Example |
Capacity and Role | Act as an expert on software development on the topic of machine learning frameworks, and an expert blog writer.
把你想象成机器学习框架主题的软件开发专家,以及专业博客作者。 |
Insight | The audience for this blog is technical professionals who are interested in learning about the latest advancements in machine learning.
这个博客的读者主要是有兴趣了解机器学习最新进展技术的专业人士。 |
Statement | Provide a comprehensive overview of the most popular machine learning frameworks, including their strengths and weaknesses. Include real-life examples and case studies to illustrate how these frameworks have been successfully used in various industries.
提供最流行的机器学习框架的全面概述,包括它们的优点和缺点。包括现实生活中的例子,和研究案例,以说明这些框架如何在各个行业中成功地被使用。 |
Personality | When responding, use a mix of the writing styles of Andrej Karpathy, Francois Chollet, Jeremy Howard, and Yann LeCun.
在回应时,混合使用 Andrej Karpathy、Francois Chollet、Jeremy Howard 和 Yann LeCun 的写作风格。 |
Experiment | Give me multiple different examples.
给我多个不同的例子。 |
将所有的元素都组合在一起,就变成了这样的 prompt,对比基础 prompt 生成的结果会非常不一样。
Zero-Shot Chain of Thought
这个技巧来自于 Kojima 等人 2022 年的论文 Large Language Models are Zero-Shot Reasoners。在论文里提到,当我们向模型提一个逻辑推理问题时,模型返回了一个错误的答案,但如果我们在问题最后加入
Let‘s think step by step
这句话之后,模型就生成了正确的答案:论文里有讲到原因,感兴趣的朋友可以去看看,我简单解释下为什么:
- 首先各位要清楚像 ChatGPT 这类产品,它是一个统计语言模型,本质上是基于过去看到过的所有数据,用统计学意义上的预测结果进行下一步的输出(这也就是为什么你在使用 ChatGPT 的时候,它的答案是一个字一个字地吐出来,而不是直接给你的原因,因为答案是一个字一个字算出来的)。
- 当它拿到的数据里有逻辑,它就会通过统计学的方法将这些逻辑找出来,并将这些逻辑呈现给你,让你感觉到它的回答很有逻辑。
- 在计算的过程中,模型会进行很多假设运算(不过暂时不知道它是怎么算的)。比如解决某个问题是从 A 到 B 再到 C,中间有很多假设。
- 它第一次算出来的答案错误的原因,只是因为它在中间跳过了一些步骤(B)。而让模型一步步地思考,则有助于其按照完整的逻辑链(A > B > C)去运算,而不会跳过某些假设,最后算出正确的答案。
按照论文里的解释,零样本思维链涉及两个补全结果,左侧气泡表示基于提示输出的第一次的结果,右侧气泡表示其收到了第一次结果后,将最开始的提示一起拿去运算,最后得出了正确的答案:
这个技巧,除了用于解决复杂问题外,还适合生成一些连贯主题的内容,比如写长篇文章、电影剧本等。
但需要注意其缺点,连贯不代表,它就一定不会算错,如果其中某一步骤算错了,错误会因为逻辑链,逐步将错误积累,导致生成的文本可能出现与预期不符的内容。
Few-Shot Chain of Thought
根据 Wei 他们团队在 2022 年的研究表明:
通过向大语言模型展示一些少量的样例,并在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果。
下面是论文里的案例,使用方法很简单,在技巧 2 的基础上,再将逻辑过程告知给模型即可。从下面这个案例里,你可以看到加入解释后,输出的结果就正确了。
Self-Consistency
根据王学智等人2022年的研究,当我们仅使用一条逻辑链来优化模型时,模型仍然存在出错的可能性。为了解决这个问题,XueZhi Wang 等人提出了一种新方法,涉及多次运行模型并选择最常见的答案作为最终结果:
Self- Consistency 从多个推理路径中选择最一致的答案。这种方法增加了模型对最终答案的信心。
PAL Models
PAL Models,全称为 Program-Aided Language Models。需要各位注意,这个方法,真的非常高级,甚至我觉得有点 Hack,而且经过我的多次测试,我觉得以 ChatGPT 目前的能力,已经不再需要使用这个方法。
这个方法来自于 2022 年,Luyu Gao 等人的研究,当年 Luyu Gao 的解决方法是在 prompt 里引入代码,并引导模型使用代码来运算和思考,最后答案就是正确的: