我如何夺得新加坡首届GPT-4提示工程大赛冠军(第三部分)

内容简介:

在2023年11月举行的新加坡首届GPT-4提示工程大赛中,张席拉(Sheila Teo)获得了冠军,并在这篇文章中,阐述了个人对提示词的心得体会。

她的文章里,写了4种提示词方法。

原文较长,拆分为了4部分。本文是第三部分——系统提示是什么,什么时候用到系统提示。

读完本节,会对ChatGPT的自定义指令(Custom Instructions),会有更深入的了解。

原作者:张席拉(Sheila Teo),发布于medium。叶赛文编译。 原文链接: https://towardsdatascience.com/how-i-won-singapores-gpt-4-prompt-engineering-competition-34c195a93d41

3. [🔴] 创设带有LLM安全框架的系统提示

在深入探讨之前,需要注意的是,本节内容仅适用于带有系统提示功能的LLM,这与本文的其他部分不同,其他部分适用于所有LLM。显然,最知名的带有此功能的LLM是ChatGPT,因此我们将以ChatGPT为例来说明本节内容。

系统提示的相关术语

首先,我们来厘清一下术语:就ChatGPT而言,有许多资源几乎可以互换地使用以下三个术语:“系统提示(System Prompts)”、“系统消息(System Messages)”和“自定义指令(Custom Instructions)”。

这些术语让许多人(包括我自己)都感到困惑,因此OpenAI发布了一篇文章来解释这些术语。以下是它的简要总结:

  • “系统提示(System Prompts)”和“系统消息(System Messages)”是在通过Chat Completions API以编程方式与ChatGPT交互时使用的术语。
  • 而“自定义指令(Custom Instructions)”则是在通过https://chat.openai.com/ 的用户界面与ChatGPT交互时使用的术语。

然而,这三个术语实际上是指同一事物,所以不要被术语困扰!

在本节中,我们将统一使用“系统提示(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将以{“这段文本是关于什么的?”: “这段文本是关于…”}的形式回应。

但让我们进一步概括这个任务示例。在实践中,你可能有多个文本要提问,而不仅仅是一个。在这种情况下,我们可以将上述系统提示的第一行

你将使用这段文本回答问题:[插入文本]。

改为

你将使用所提供的文本回答问题。

现在,对话中的每个用户提示将包括用于问答的文本和要回答的问题,例如:

<text>  [插入文字]
</text>

<question> [插入问题] </question>

这里,我们还使用XML标签作为分隔符,以结构化的方式向LLM提供两个所需的信息。XML标签中使用的名词text和question,与系统提示中使用的名词相对应,以便LLM理解标签与系统提示指令的关系。

总之,系统提示应该给出总体任务指导,每个用户提示应提供你希望任务使用的具体细节。在这个例子中,这些具体细节就是文本和问题。

额外内容:让LLM安全框架具备动态性

在上文中,通过系统提示中的几句话添加了安全框架。这些安全框架一经设置,就会固定不变,贯穿整个对话。

如果你希望在对话的不同阶段设置不同的安全框架,该怎么办呢?

对于ChatGPT用户界面的用户来说,目前没有直接的方法可以实现这一点。然而,如果你是通过编程方式与ChatGPT交互的用户,那么你就有幸了!对于建立有效LLM安全框架的关注不断增加,促进了开源软件包的开发,这些软件包允许你以编程方式设置更详细和动态的安全框架。

值得一提的是NVIDIA团队开发的NeMo Guardrails,它允许你配置用户与LLM之间的预期对话流程,并因此在对话的不同阶段设置不同的安全框架,实现随着对话进展而变化的动态安全框架。我强烈推荐你去了解一下!

广告

一个集美剧、音乐和AI工具为一体的服务商:

http://mrw.so/6gAybQ

优惠码: ysw ,有九折优惠

近期文章

发表评论