我如何夺得新加坡首届GPT-4提示工程大赛冠军(第三部分)
作者: 叶赛文 来源: 叶赛文
内容简介:
在2023年11月举行的新加坡首届GPT-4提示工程大赛中,张席拉(Sheila Teo)获得了冠军,并在这篇文章中,阐述了个人对提示词的心得体会。
她的文章里,写了4种提示词方法。
原文较长,拆分为了4部分。本文是第三部分——系统提示是什么,什么时候用到系统提示。
读完本节,会对GPT的自定义指令(Custom Instructions),会有更深入的了解。
原作者:张席拉(Sheila Teo),发布于medium。叶赛文编译。
unsetunset3. [🔴] 创设带有LLM安全框架的系统提示unsetunset
在深入探讨之前,需要注意的是,本节内容仅适用于带有系统提示功能的LLM,这与本文的其他部分不同,其他部分适用于所有LLM。显然,最知名的带有此功能的LLM是GPT,因此我们将以GPT为例来说明本节内容。
系统提示的相关术语
首先,我们来厘清一下术语:就GPT而言,有许多资源几乎可以互换地使用以下三个术语:“系统提示(System Prompts)”、“系统消息(System Messages)”和“自定义指令(Custom Instructions)”。
这些术语让许多人(包括我自己)都感到困惑,因此OpenAI发布了一篇文章来解释这些术语。以下是它的简要总结:
-
“系统提示(System Prompts)”和“系统消息(System Messages)”是在通过Chat Completions API以编程方式与GPT交互时使用的术语。
-
而“自定义指令(Custom Instructions)”则是在通过https://chat.openai.com/ 的用户界面与GPT交互时使用的术语。
然而,这三个术语实际上是指同一事物,所以不要被术语困扰!
在本节中,我们将统一使用“系统提示(System Prompts)”这个术语。现在,让我们深入了解!
什么是系统提示(System Prompts)?
系统提示是你提供的额外提示,指导LLM应如何行为。它被认为是额外的,因为它超出了你向LLM提供的“正常”提示(更常被称为用户提示)。
在一次对话中,每当你提出一个新的提示时,系统提示就像一个过滤器,LLM会在给出对你新提示的回应之前自动应用它。这意味着每次LLM在对话中回应时,都会考虑到系统提示。
何时应该使用系统提示(System Prompts)?
你可能会想:既然我可以在与LLM的新对话开始之前的第一个提示中提供指令,那我为什么要在系统提示中提供指令呢?
答案是因为LLM的对话记忆是有限的。在后一种情况下,随着对话的进行,LLM可能会“忘记”你最初提供的提示,导致这些指令变得无效。
另一方面,当指令在系统提示中提供时,这些系统提示指令将自动与聊天中提供的每个新提示一起考虑。这确保了LLM即使对话进行,无论对话变得多长,也会不断接收到这些指令。
总结:
使用系统提示(System Prompts)来提供你希望LLM在整个对话过程中记住的指令。
系统提示应包括什么?
系统提示中的指令通常包括以下几个类别:
-
任务定义,让LLM始终记住它在对话中要做什么。
-
输出格式,让LLM始终记住它应该以何种形式回应。
-
安全框架,让LLM始终记住它不应该如何回应。安全框架是LLM管理中的新兴领域,指的是LLM被允许操作的设定边界。
例如,一个系统提示可能是这样的:
你将使用这段文本回答问题:[插入文本]。
你将以这种格式回应一个JSON对象:{“Question”: “Answer”}。
如果文本没有足够的信息来回答问题,请不要捏造信息,并回答为“NA”。
你只被允许回答与[插入范围]相关的问题。绝不回答任何关于年龄、性别和宗教等人口统计信息的问题。
用表格表示这个系统提示:
任务定义你将使用这段文字回答问题:[插入文本]。
输出格式 你将以JSON对象格式回应,格式如下:{‘Question’: ‘Answer’} 。
守则(幻觉) 如果文本中没有包含足够的信息来回答问题,请不要编造信息,并且回答“N/A”。
守则(范围) 你只允许回答与[插入范围]相关的问题。永远不要回答任何与人口统计信息相关的问题,如年龄、性别和宗教信仰。
那么在“正常”的提示(“normal” prompts)中应该放入什么?
现在你可能会想:系统提示似乎已经包含了很多信息。那么我在对话中的“正常”提示(“normal” prompts,更常被称为用户提示)中还应该放些什么呢?
系统提示概括了当前的总体任务。在上述系统提示的例子中,任务被定义为只使用特定的文本来回答问题,并指导LLM以{“Question”: “Answer”}的格式回应。
你将使用这段文本回答问题:[插入文本]。你将以这种格式回应一个JSON对象:{“Question”: “Answer”}。
在这种情况下,对话中的每一个用户提示都只是你想要使用文本回答的问题。例如,一个用户提示可能是“这段文本是关于什么的?”。LLM将以{“这段文本是关于什么的?”: “这段文本是关于…"}的形式回应。
但让我们进一步概括这个任务示例。在实践中,你可能有多个文本要提问,而不仅仅是一个。在这种情况下,我们可以将上述系统提示的第一行
你将使用这段文本回答问题:[插入文本]。
改为
你将使用所提供的文本回答问题。
现在,对话中的每个用户提示将包括用于问答的文本和要回答的问题,例如:
[插入文字]
[插入问题]
这里,我们还使用XML标签作为分隔符,以结构化的方式向LLM提供两个所需的信息。XML标签中使用的名词text和question,与系统提示中使用的名词相对应,以便LLM理解标签与系统提示指令的关系。
总之,系统提示应该给出总体任务指导,每个用户提示应提供你希望任务使用的具体细节。在这个例子中,这些具体细节就是文本和问题。
额外内容:让LLM安全框架具备动态性
在上文中,通过系统提示中的几句话添加了安全框架。这些安全框架一经设置,就会固定不变,贯穿整个对话。
如果你希望在对话的不同阶段设置不同的安全框架,该怎么办呢?
对于GPT用户界面的用户来说,目前没有直接的方法可以实现这一点。然而,如果你是通过编程方式与GPT交互的用户,那么你就有幸了!对于建立有效LLM安全框架的关注不断增加,促进了开源软件包的开发,这些软件包允许你以编程方式设置更详细和动态的安全框架。
值得一提的是NVIDIA团队开发的NeMo Guardrails,它允许你配置用户与LLM之间的预期对话流程,并因此在对话的不同阶段设置不同的安全框架,实现随着对话进展而变化的动态安全框架。我强烈推荐你去了解一下!
unset
更多AI工具,参考Github-AiBard123,国内AiBard123