Prompt Engineering介绍
什么是Prompt Engineering?
近年来,大语言模型(LLM)发展迅速,成为自然语言处理领域的重要技术。除了OpenAI的GPT系列、Google的PaLM(Pathways Language Model)和Bard,国内也涌现出多款领先的模型,如百度的文心一言、阿里的通义千问、华为的盘古大模型。此外,Meta的LLaMA和Anthropic的Claude也在全球范围内产生了广泛影响。谷歌今年推出的Gemini系列被认为是其继Bard之后的又一重大突破。
随着各国在AI领域的投入不断增加,越来越多的企业和研究机构开始参与到LLM的开发中,推动了技术的创新和应用的多样化。大语言模型不仅在机器翻译、自动写作、信息提取等领域取得了显著进展,也在教育、医疗、金融等行业展现出巨大的应用潜力。随着大模型的不断发展,如何更有效地与这些模型互动、引导其输出,成为了一个重要的研究方向,这也促使了Prompt Engineering的兴起。
Prompt Engineering 是设计和优化输入给语言模型(如 GPT 或其他大型语言模型)的问题或指令的过程。这个过程的核心目标是通过精确地设计输入提示,使得模型能够提供更准确、有效的输出。设计好的 Prompt 可以帮助使用者利用语言模型完成各种任务,包括文本生成、摘要、分类、翻译等。
Prompt Engineering 的核心目标是提高语言模型的效果,使其能够更好地完成如问答、推理、文本生成等各种任务。开发者和研究者通过优化提示语,不仅可以提升模型的准确性,还能使模型在更多复杂任务中表现优异。
Prompt Engineering的重要性
1. 增强语言模型的能力
研究人员通过提示工程,提升语言模型在多种任务中的表现,包括常见的问答、算术推理等复杂任务。例如,优化提示语可以让模型回答更准确,或者更好地理解上下文。
2. 设计有效的提示语
开发者使用提示工程来设计鲁棒、有效的提示技巧,使模型能够与其他工具进行有效交互。通过精心设计的提示语,开发者可以更好地控制生成的结果,从而提升应用程序的功能。
3. 提升模型的安全性和能力
提示工程不仅仅是设计提示语,它还涵盖了一系列技术,能够帮助我们更好地理解并使用LLM。通过优化提示,我们可以增强模型的安全性,并通过添加领域知识或外部工具,增强新的功能。
提示工程的核心技术
提示工程不仅仅是单纯的编写提示语。它是一个包含了多种技能和技术的领域,旨在帮助我们更好地与大型语言模型互动。以下是一些核心技巧和概念,下图是Openai的playground页面,用于模型调试。
LLM的设置参数(针对研究人员)
LLM的参数设计通常是研究人员进行设置的,我们日常在于大模型交互时并不设置这些参数,但是了解这些参数有助于我们更好地理解大模型工作的原理,从而知道我们与大模型交互式的思路。在设计和测试提示时,我们通常通过API与语言模型进行交互。我们可以配置一些参数来获得不同的输出。调整这些设置对于提高响应的可靠性和符合需求的输出非常重要。以下是一些常见的设置参数:
1. 温度(Temperature)
-
低温度:输出结果较为确定,总是选择概率最高的下一个词汇,适用于事实性问题或需要精确回答的场景。
-
高温度:增加随机性,鼓励生成更多样化或创造性的输出,适用于诗歌生成或其他创造性任务。
2. Top P(核采样)
-
Top P 控制了输出的随机性。如果您需要更具多样性的回答,可以提高Top P值;如果想要更确定的回答,可以保持较低值。Top P会限制模型只考虑前P比例的词汇。
3. 最大长度(Max Length)
-
设置生成的最大token数。通过控制这个参数,可以避免模型输出过长或无关的答案。
4. 停止序列(Stop Sequences)
-
停止序列是一个字符串,当模型生成该字符串时,停止生成更多token。例如,我们可以设置“10”作为停止序列,来控制生成的列表不超过10个项目。
5. 频率惩罚(Frequency Penalty)
-
频率惩罚应用于已经生成的词汇,降低它们的再次出现概率,从而减少重复性。
6. 存在惩罚(Presence Penalty)
-
存在惩罚与频率惩罚相似,但它是对所有重复词汇的惩罚均等应用。对于避免冗余的文本输出非常有效。
小贴士:温度和Top P、频率惩罚和存在惩罚通常只需要调整其中一个,避免同时调整多个参数,以免产生不必要的冲突。
设计提示的基础知识
如何设计一个简单的提示
简单的提示能够实现许多任务,但结果的质量往往取决于我们提供的信息量和提示的设计。提示可以包含指令、问题、上下文或示例。
示例:简单的提示
提示:The sky is
输出:blue.
通过这样的提示,模型理解为“天空是什么颜色”,并返回最常见的答案“蓝色”。
然而,如果我们希望模型生成更复杂的回答,或者有更明确的指示,我们可以进一步优化提示。
改进后的提示
提示:Complete the sentence: The sky is
输出:blue during the day and dark at night.
在这个例子中,我们给出了一个更清晰的指令:“完成句子”。通过这种方式,模型能够更好地理解我们的意图,并提供更符合预期的答案。
提示格式化
1. 问答格式
通常的提示格式为:
Q: <问题>?
A:
这是一种常见的“零-shot”提示方式,即你不需要提供任何示例,模型会基于问题自动生成答案。
2. 少-shot格式
少-shot提示是在零-shot的基础上,提供了少量示例来帮助模型理解任务。例如:
Q: What is prompt engineering?
A: Prompt engineering is the process of designing and optimizing prompts to efficiently use language models.
Q: How does a language model work?
A: A language model generates predictions based on input sequences.
Q: What is AI?
A: AI is the simulation of human intelligence in machines.
Q: What is prompt engineering used for?
A:
通过这种少-shot提示,模型可以学习如何基于提供的示例来回答问题。
提示的元素
在实践中,我们会发现每个提示通常包含以下元素:
-
指令(Instruction):这是我们希望模型执行的具体任务或指令。
-
上下文(Context):为任务提供额外的信息或背景,可以帮助模型更好地理解任务。
-
输入数据(Input Data):我们希望模型进行处理的数据或问题。
-
输出指示(Output Indicator):指定期望的输出格式或类型。
示例:文本分类任务
指令:Classify the text into neutral, negative, or positive
文本:I think the food was okay.
情感:
在这个例子中,“Classify the text into neutral, negative, or positive”是指令,“I think the food was okay.”是输入数据,而“情感:”是输出指示。
设计 Prompt 的通用建议
在设计 Prompt 时,有一些关键的通用建议可以帮助你提高效果:
-
从简单开始
-
使用明确指令
-
要求具体明确
-
避免模糊不清
-
避免负面描述,尽量说“应该做什么”
1. 从简单开始
刚开始设计 Prompt 时,应避免一开始就设计过于复杂的内容。可以从简单的 Prompt 开始,并随着实验和迭代逐步增加更多的元素和上下文。这是一个不断优化和调整的过程,不同的任务可能需要不同的策略。
举个例子,尝试从简单的任务开始,例如:
-
“写作”(Write)
-
“翻译”(Translate)
-
“总结”(Summarize)
2. 使用明确的指令
在设计 Prompt 时,要尽量明确地说明你希望模型完成的任务。例如:
-
“翻译”(Translate)
-
“总结”(Summarize)
-
“分类”(Classify)
指令要简洁明了,最好将指令放在 Prompt 的开头,或使用分隔符如 ###
来区分任务和上下文内容。
示例:
### Instruction ###
Translate the text below to Spanish:
Text: "hello!"
Output:
¡Hola!
3. 具体明确
设计 Prompt 时要尽量具体明确。越详细的 Prompt 通常能够获得更好的结果,尤其是当你有明确的目标或生成风格时。尽量避免模糊或不明确的描述,明确的任务描述通常能带来更精确的结果。
例如,要从一段文本中提取地点信息,可以这样设计 Prompt:
Extract the name of places in the following text.
Desired format: Place: <comma_separated_list_of_places>
Input: "Although these developments are encouraging to researchers, much is still a mystery. 'We often have a black box between the brain and the effect we see in the periphery,' says Henrique Veiga-Fernandes, a neuroimmunologist at the Champalimaud Centre for the Unknown in Lisbon."
Output: Place: Champalimaud Centre for the Unknown, Lisbon
4. 避免模糊不清
有时在设计 Prompt 时,人们倾向于用过于复杂的语言或描述,导致 Prompt 本身不清晰。过于聪明或过于复杂的描述可能会干扰模型的理解。相反,简单、直接的描述通常更有效。
例如,下面的 Prompt 不够明确,模型可能无法准确理解要求:
Explain the concept prompt engineering. Keep the explanation short, only a few sentences, and don't be too descriptive.
改进后的 Prompt 应该更加明确:
Use 2-3 sentences to explain the concept of prompt engineering to a high school student.
5. 避免负面描述,尽量说“应该做什么”
设计 Prompt 时,避免描述“不应该做什么”。这种方法有时会导致结果不如预期。相反,明确指出应做什么会更有效。
错误示例:
The following is an agent that recommends movies to a customer. DO NOT ASK FOR INTERESTS. DO NOT ASK FOR PERSONAL INFORMATION.
改进后:
The following is an agent that recommends movies to a customer. The agent is responsible to recommend a movie from the top global trending movies. It should refrain from asking users for their preferences and avoid asking for personal information. If the agent doesn't have a movie to recommend, it should respond 'Sorry, couldn't find a movie to recommend today.'.
Prompt 应用示例
通过多个例子来进一步了解如何通过设计 Prompt 来完成不同的任务。
1. 文本摘要
文本摘要是自然语言生成中的一个标准任务。语言模型能够根据提示将文章或概念总结为简洁易懂的摘要。
示例:
Prompt: Explain antibiotics
A:
Output: Antibiotics are a type of medication used to treat bacterial infections by either killing the bacteria or preventing them from reproducing, allowing the body’s immune system to fight off the infection.
进一步优化摘要的长度:
Prompt: Antibiotics are a type of medication used to treat bacterial infections. They work by either killing the bacteria or preventing them from reproducing. Summarize this in one sentence:
Output: Antibiotics are medications used to treat bacterial infections by killing bacteria or preventing their reproduction.
2. 信息提取
语言模型不仅能进行文本生成,还能进行信息提取任务,如从文章中提取关键数据。
示例:
Prompt: Mention the large language model based product mentioned in the paragraph above:
Text: Author-contribution statements and acknowledgements in research papers should state clearly and specifically whether, and to what extent, the authors used AI technologies such as ChatGPT.
Output: ChatGPT
3. 问答
通过精心设计的 Prompt,模型能够基于上下文回答特定问题。
示例:
Prompt: Answer the question based on the context below. Keep the answer short and concise. Respond "Unsure about answer" if not sure about the answer.
Context: Teplizumab traces its roots to a New Jersey drug company called Ortho Pharmaceutical. There, scientists generated an early version of the antibody, dubbed OKT3. Originally sourced from mice, the molecule was able to bind to the surface of T cells and limit their cell-killing potential.
Question: What was OKT3 originally sourced from?
Answer: Mice.
4. 文本分类
文本分类任务需要根据给定的文本对其进行情感分析或其他类型的分类。
示例:
Prompt: Classify the text into neutral, negative or positive.
Text: I think the food was okay.
Sentiment: Neutral
5. 对话
对于对话系统,可以通过设计角色化的 Prompt 来指导模型如何在对话中扮演不同的角色。
示例:
Prompt: The following is a conversation with an AI research assistant. The assistant's tone is technical and scientific.
Human: Hello, who are you?
AI: Greeting! I am an AI research assistant. How can I help you today?
6. 代码生成
LLM 在代码生成方面也表现出色,尤其是像 GitHub Copilot 这样的应用。
示例:
Prompt: /*
Ask the user for their name and say "Hello"
*/
Output: let name = prompt("What is your name?");
console.log(`Hello, ${name}!`);
7. 推理
推理任务要求模型进行更复杂的计算或推理,但当前 LLM 在这方面仍然有限制。通过优化 Prompt,可以帮助模型更好地进行推理任务。
示例:
Prompt: The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1.
A:
Output: No, the odd numbers in this group add up to an odd number: 119.
通过进一步优化 Prompt:
Prompt: The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. Solve by breaking the problem into steps. First, identify the odd numbers, add them, and indicate whether the result is odd or even.
Output: Odd numbers: 15, 5, 13, 7, 1. Sum: 41. 41 is an odd number.
总结
Prompt Engineering 是提升语言模型性能和效果的关键方法。对日常的使用者而言,其在使用大模型时往往会遇到模型的回复并非所预想的情况,因此需要学习提示工程这项技术。通过不断迭代、明确指令、保持简洁和针对性,可以显著提高模型的准确性和实用性。通过掌握大语言模型的提示特性并不断尝试,可以学会如何设计出高效的 Prompt 来解决各类任务。希望这份指南能够帮助你更好地理解Prompt Engineering,并在实际应用中得心应手!以上内容参考自:https://www.promptingguide.ai/,点击阅读原文查看所有内容。
以上是今天分享的内容,如有帮助欢迎点赞转发,我们下次再见!