提示工程简介 提示工程是一种相对较新的学科,旨在开发和优化提示,以便高效地利用语言模型(LM)来实现各种应用和研究主题。提示工程技能有助于更好地理解大型语言模型(LLM)的能力和局限性。研究人员使用提示工程来提高LLM在问答和算术推理等广泛任务上的能力。开发者则使用提示工程来设计与LLM和其他工具接口的健壮且有效的提示技术。 本指南涵盖了标准提示的基础知识,以提供如何使用提示与大型语言模型(LLM)交互和指导的大致概念。 所有示例均使用 (使用OpenAI的playground)进行测试,除非另有说明。它使用默认配置,例如 和 。 主题: 基本提示 关于LLM设置的一句话 标准提示 提示元素 设计提示的一般技巧 基本提示 通过提示,你已经可以实现很多功能,但结果的质量取决于你提供的信息量。
提示工程是一种相对较新的学科,旨在开发和优化提示,以便高效地利用语言模型(LM)来实现各种应用和研究主题。提示工程技能有助于更好地理解大型语言模型(LLM)的能力和局限性。研究人员使用提示工程来提高LLM在问答和算术推理等广泛任务上的能力。开发者则使用提示工程来设计与LLM和其他工具接口的健壮且有效的提示技术。
本指南涵盖了标准提示的基础知识,以提供如何使用提示与大型语言模型(LLM)交互和指导的大致概念。
所有示例均使用text-davinci-003(使用OpenAI的playground)进行测试,除非另有说明。它使用默认配置,例如temperature=0.7和top-p=1。
主题:
通过提示,你已经可以实现很多功能,但结果的质量取决于你提供的信息量。提示可以包含传递给模型的信息,如instruction或question,还可以包括其他细节,如inputs或examples。
这是一个简单的提示示例:
提示:
The sky is
输出:
blue The sky is blue on a clear day. On a cloudy day, the sky may be gray or white.
正如你所见,语言模型会根据上下文“天空是”输出一些有意义的字符串。输出可能不符合预期或者远离我们想要完成的任务。
这个基本示例也强调了提供更多上下文或明确指示具体目标的重要性。
让我们稍微改进一下:
提示:
Complete the sentence: The sky is
输出:
so beautiful today.
这样更好吗?我们告诉模型完成句子,因此结果看起来好多了,因为它完全按照我们的要求(“完成句子”)进行了操作。这种通过设计最优提示来指导模型执行任务的方法就是所谓的提示工程。
上面的例子简单展示了当今LLM所能实现的功能。如今的LLM能够执行从文本摘要到数学推理再到代码生成等各种高级任务。
当你使用提示时,你会通过API或直接与LLM交互。你可以配置几个参数来获得不同的提示结果。
温度 - 简而言之,温度越低,结果越确定,即总是选择最有可能的下一个词。增加温度可能会导致更多随机性,鼓励更丰富或更具创意的输出。我们实际上是增加了其他可能词汇的权重。在实际应用中,我们可能希望在事实性问答等任务上使用较低的温度,以鼓励更准确和简洁的回答。对于诗歌生成或其他创意任务,增加温度可能是有益的。
Top_p - 类似地,通过名为核采样的温度采样技术,你可以控制模型生成响应的确定性。如果你需要精确和事实性的答案,请保持这个值较低。如果你想得到更多样化的回答,则增加该值。
一般建议一次只调整一个参数,而不是两个。
在开始一些基本示例之前,请记住,你的结果可能会因使用的LLM版本而有所不同。
我们上面尝试了一个非常简单的提示。标准提示具有以下格式:
<Question>?
这可以被格式化为QA格式,这是许多QA数据集中常见的格式:
Q: <Question>? A:
基于上述标准格式,一种流行的且有效的方法称为few-shot提示,其中我们提供示例。few-shot提示可以被格式化为如下形式:
<Question>? <Answer> <Question>? <Answer> <Question>? <Answer> <Question>?
你可以猜到它的QA格式版本看起来像这样:
Q: <Question>? A: <Answer> Q: <Question>? A: <Answer> Q: <Question>? A: <Answer> Q: <Question>? A:
请记住,不一定要使用QA格式。格式取决于具体任务。例如,你可以执行一个简单的分类任务,并提供演示任务的示例:
提示:
This is awesome! // Positive This is bad! // Negative Wow that movie was rad! // Positive What a horrible show! //
输出:
Negative
few-shot提示使上下文学习成为可能,这是语言模型在仅提供少量示例的情况下学习任务的能力。我们将在即将发布的指南中看到更多此类实例。
随着我们覆盖越来越多的提示示例和应用,你会发现构成提示的某些元素。
提示可以包含以下任何组件:
指令 - 你希望模型执行的具体任务或指令
上下文 - 可以涉及外部信息或附加上下文,以引导模型产生更好的响应
输入数据 - 是我们感兴趣的输入或问题
输出指示符 - 指示输出的类型或格式
并非所有组件都是提示所必需的,格式取决于具体任务。我们将在即将发布的指南中介绍更多具体的例子。
在设计提示时,这里有一些需要注意的技巧:
当你开始设计提示时,你应该记住这是一个迭代过程,需要大量的实验才能获得最佳结果。使用像OpenAI或Cohere这样的简单测试平台是一个很好的起点。
你可以从简单的提示开始,并随着追求更好的结果逐步添加更多元素和上下文。在此过程中对提示进行版本管理非常重要。随着你阅读本指南,你会发现具体、简洁和简洁往往能给你带来更好的结果。
当你有一个涉及许多不同子任务的大任务时,你可以尝试将任务分解成更简单的子任务,并随着结果改善逐步构建。这避免了在提示设计过程中一开始就加入过多复杂性。
你可以通过使用命令来设计各种简单任务的有效提示,以指示模型你要达到的目标,如“写”,“分类”,“总结”,“翻译”,“排序”等。
请记住,你也需要大量实验来看哪种方法效果最好。尝试不同的指令、关键词、上下文和数据,看看哪种最适合你的特定用例和任务。通常情况下,上下文与你要执行的任务越相关,效果越好。我们将在即将发布的指南中讨论抽样和添加更多上下文的重要性。
其他人建议将指令放在提示的开头。还建议使用一些清晰的分隔符(如“###”)来分隔指令和上下文。
例如:
提示:
### Instruction ### Translate the text below to Spanish: Text: "hello!"
输出:
¡Hola!
对要让模型执行的任务和指令非常具体。提示描述得越详细,结果越好。这在你有特定的预期结果或生成风格时尤为重要。没有特定的标记或关键字可以带来更好的结果。更重要的是要有良好的格式和详细的提示。在提示中提供示例非常有效地获取特定格式的输出。
在设计提示时,你还应该考虑提示的长度,因为存在限制。思考你应该如何具体和详细是一个需要考虑的问题。过多不必要的细节并不一定是一个好方法。这些细节应该是相关的并有助于任务。你需要进行大量实验。我们鼓励大量实验和迭代,以优化你的应用程序的提示。
作为示例,让我们尝试一个简单的提示,从一段文本中提取特定信息。
提示:
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. “If we want to use it in the therapeutic context, we need to understand the mechanism."
输出:
Place: Champalimaud Centre for the Unknown, Lisbon
输入文本来自this Nature article。
基于上述关于详细性和改进格式的建议,很容易陷入过于聪明的提示描述的陷阱,从而产生不精确的描述。通常情况下,具体和直接更好。这个类比类似于有效的沟通——越直接,信息传递得越有效。
例如,你可能有兴趣了解提示工程的概念。你可能会尝试这样的提示:
Explain the concept of prompt engineering. Keep the explanation short, only a few sentences, and don't be too descriptive.
从上述提示中不清楚要使用多少句子以及风格是什么。尽管你仍然可能从上述提示中得到不错的回答,但更好的提示应该是非常具体、简洁且直指重点的。例如:
Use 2-3 sentences to explain the concept of prompt engineering to a high school student.
当设计提示时,另一个常见的建议是避免说不要做什么,而是说要做什么。这鼓励更多具体性,并专注于导致良好回答的细节。
这是一个电影推荐聊天机器人失败的例子,因为我写的指令恰好让我没有想要的结果——关注不要做什么。
提示:
The following is an agent that recommends movies to a customer. DO NOT ASK FOR INTERESTS. DO NOT ASK FOR PERSONAL INFORMATION. Customer: Please recommend a movie based on my interests. Agent:
输出:
Sure, I can recommend a movie based on your interests. What kind of movie would you like to watch? Do you prefer action, comedy, romance, or something else?
这是一个更好的提示:
提示:
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.". Customer: Please recommend a movie based on my interests. Agent:
输出:
Sorry, I don't have any information about your interests. However, here's a list of the top global trending movies right now: [list of movies]. I hope you find something you like!
以上部分示例采用了"使用OpenAI API的最佳实践"文章中的内容。
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。