5.1.1. Prompt 从 0 到 1
Prompting Engineer 提示工程是一种相对较新的学科,用于开发和优化提示,以高效地使用语言模型(LM)进行各种应用和研究主题。提示工程技能有助于更好地理解大型语言模型(LLM)的能力和局限性。研究人员使用提示工程来改善LLM在各种常见和复杂任务(如问答和算术推理)上的能力。开发人员使用提示工程来设计与LLM和其他工具交互的稳健有效的提示技术。
本指南介绍标准提示的基础知识,以提供如何使用提示与大型语言模型(LLM)进行交互和指导的大致概念。
注:以下示例使用 ChatGPT Mar 23 Version。
Prompt 基础介绍
你已经可以通过提示实现很多功能,但结果的质量取决于你提供的信息量。提示可以包含信息,如传递给模型的指令或问题,并包括其他细节,如输入或示例。
以下是一个简单提示的基本示例:
输入:
Sky is
//天空是
输出:
the expanse of atmosphere and outer space seen from the surface of a planet, usually the Earth. The sky appears blue during the day due to the scattering of sunlight by the Earth's atmosphere, and black at night, with stars and other celestial objects visible. The sky is also a subject of art, poetry, and mythology, and has cultural and spiritual significance in many human societies.
//从行星表面,通常是地球上看到的大气层和外层空间的广阔区域。白天,由于太阳光在地球大气层中的散射,天空呈现出蓝色,而晚上则是黑色的,可以看到星星和其他天体。天空也是艺术、诗歌和神话的主题,对许多人类社会具有文化和精神上的重要意义。
正如你所看到的,语言模型输出了一系列字符串,根据上下文“天空是”让人感到有意义。输出可能会出乎意料或远离我们想要完成的任务。
这个基本的例子也突显了提供更多上下文或说明以便更明确地指导我们想要实现的任务的必要性。
让我们尝试将其改进一下:
输入:
Complete the sentence:
Sky is
//天空是
输出:
a beautiful and ever-changing canvas that inspires awe and wonder in those who gaze upon it.
//一个美丽且不断变化的画布,它能够激发那些凝视它的人心中的敬畏和惊奇。
这样是不是看起来像个人说的了?我们告诉模型完成句子,所以结果看起来更好,因为它完全按照我们告诉它要做什么(“完成句子”)。这种通过设计最佳提示来指导模型执行任务的方法被称为提示工程。
上面的例子是今天LLM可以实现的基本说明。现在的LLM可以执行各种高级任务,从文本摘要到数学推理到代码生成都可以。
从简单的 Prompt 开始
正如上面的例子,设计 Prompt 是一个不断迭代以达到目标的过程,你可能在问 ChatGPT 前心中就对于完美答案有了一个预期,但我们想要告诉您的是,AI 是需要被调教的,大量的试验所逼近的 Prompt 才会来获得更好的结果。
我们可以尝试先放下「问它一次就能获得好答案」的想法,从最简单的 Prompt 开始,然后再根据我们的目标不断添加元素。
我们以 「让 ChatGPT 教我们学英语」作为例子:
如果需要一个英语老师,我们冒出的第一个念头可能是翻译,那我们就直接开始:
将下面这段话翻译成中文:
All the bright, precious things fade so fast. And they don't come back.
//这句话出自了不起的盖茨比
这时 ChatGPT 的答案是
"All the bright, precious things fade so fast. And they don't come back." 的中文翻译是:"所有明亮、珍贵的东西都会很快消逝。而它们不会再回来。"
OK,答的很不错了,但我们的目的是学英语,能不能尝试让他进入英语老师的角色,多教我们一点东西呢:
请你扮演一名资深的英语教师,以下面这段话作为教学教我学英语:
All the bright, precious things fade so fast. And they don't come back.
ChatGPT 的输出:
好的,让我们来学习这句话,它是由英国作家奥斯卡·王尔德创作的。这句话的意思是:所有明亮、珍贵的东西都会很快消逝,而它们不会再回来。
首先,让我们来学习一下这句话的词汇和语法。这句话中有两个动词,分别是 "fade" 和 "come back"。
"fade" 的意思是 "褪色" 或者 "消逝",而 "come back" 的意思是 "回来"。
这句话中还有两个形容词,分别是 "bright" 和 "precious",它们的意思是 "明亮的" 和 "珍贵的"。
此外,这句话中还有一个副词 "so",意思是 "如此地" 或者 "非常"。
其次,让我们来思考一下这句话所要表达的含义。这句话的意思是,所有美好的事物都会很快消逝,并且它们不会再回来。
这句话提醒我们要珍惜当下,因为时间很宝贵,我们永远无法再回到过去。
最后,让我们来练习一下这句话的发音和语调。我们可以尝试用不同的语调来表达这句话的不同含义。
比如,如果我们使用悲伤的语调来说这句话,它会让人感到非常沉重和悲痛;如果我们使用警示的语调来说这句话,它会让人感到应该好好珍惜时间和身边的人。
希望这些英语学习的提示能够帮助你更好地理解和掌握这句话。
还不错了,但好像什么语音语调的部分扯的有点远了,也许我们想要「老师」讲解其中的一些疑难词,那么,我们就可以按照心中的想法继续优化 Prompt:
请你扮演一名资深的英语教师,先将下面这段英文文本给我教学,再将其中关键的单词挑选出来详细解释并补充例句。
英文文本:
All the bright, precious things fade so fast. And they don't come back.
ChatGPT 的输出:
好的,让我来教你学习这段英文文本。
这句话是由英国作家奥斯卡·王尔德创作的,它的意思是:所有明亮、珍贵的东西都会很快消逝,而它们不会再回来。
现在,让我们来仔细研究一下这句话中的一些重要单词:
- Bright:这个词的意思是 "明亮的",通常用来形容光线或色彩鲜艳的事物。例如:The sun is bright today.(今天阳光明媚。)
- Precious:这个词的意思是 "珍贵的",通常用来形容非常重要或有价值的东西。例如:Family is a precious thing.(家庭是一件珍贵的事情。)
- Fade:这个词的意思是 "逐渐消失",通常用来形容颜色、光线或声音逐渐减弱或消失。例如:The flowers faded quickly in the hot sun.(花在烈日下很快就枯萎了。)
- Come back:这个词组的意思是 "回来",通常用来表示某件事物返回原来的地方或状态。例如:I hope my lost wallet will come back to me.(我希望我丢失的钱包能回到我身边。)
这些单词在英语中都是非常常见的,可以应用在不同的场合中。希望这些例子能够帮助你更好地理解这些单词的意思和用法。
这样子看起来是不是又变得更好了呢?总而言之,如果我们需要 ChatGPT 帮助我们完成一个复杂的目标,可能涉及许多不同的子任务时,我们可以尝试将任务分解为更简单的子任务,并随着获得更好的结果而不断构建。
这避免了在提示设计过程中一开始就添加过多的复杂性。
好的 Prompt 应该遵循的准则
具体而精确
在上文的「英语老师」的例子中我们可以看到,我们不断地根据需求调整自己的 Prompt,ChatGPT 所返回的答案会逐渐逼近我们的需求。
但是随着不断添加文字说明的过程,很容易陷入想要过于聪明的提示陷阱,从而可能创建不精确的描述。越直接,信息传递就越有效。
在输入文字的时候可以更精确的建议:
- 正确的语法、拼写和标点符号,避免错别字;
- 使用简短而没有歧义的句子,例如
我喜欢一个人
就不是一个好的句子; - 使用精确的词语,例如
给我3-5个建议
就比给我几个建议
要好;
元素
当我们尝试写一个更好的 Prompt 时,我们可以参考 Elavis Saravia 总结的优质 prompt 需包含的元素:
- Context(选填): 背景信息,或者说是上下文信息,这可以引导模型做出更好的反应。
- Instruction(必须): 指令,即你希望模型执行的具体任务。
- Input Data(选填): 输入数据,告知模型需要处理的数据。
- Output Indicator(选填): 输出指示器,告知模型我们要输出的类型或格式。
只要你按照这个框架写 prompt ,模型返回的结果都不会差。
以一个优质的 Prompt 为例:
我想让你做一个 AI 写作导师。你的任务是使用人工智能工具(例如自然语言处理)向学生提供有关如何改进其作文的反馈。你还应该利用你在有效写作技巧方面的修辞知识和经验来建议学生可以更好地以书面形式表达他们的想法和想法的方法。//Context 背景信息
请以要点加上举例的格式回答。//输出指示
我的第一个请求是“请帮我修改下面这段文字:XXXXXXXXXXX”。//指令和输入
并非每个元素都一定需要被包含,我们可以根据自己手头的任务进行取舍和调整。