大语言模型入门之Prompt Engineer

这个系列用于记录我的大语言模型学习过程


前言

这篇用于介绍Prompt Engineer

主要参考:提示工程指南 | Prompt Engineering Guide (promptingguide.ai)

大语言模型Prompt工程-原理详解篇 - 知乎 (zhihu.com)

由于篇幅问题,这里只是简单的介绍一下Prompt Engineer相关概念,具体的可以看提示工程指南那篇,写的非常具体。


一、基础概念和模型参数介绍

1.Prompt

        在大语言模型中,"Prompt"(提示)指的是用户输入的文本或问题,它作为模型开始生成回复的初始信息。Prompt的质量和准确性对于模型生成的回复至关重要,它直接影响到模型的输出内容和质量。

        Prompt通常可以是一个简短的问题、一个完整的句子,甚至是一个段落。它为模型提供了上下文和指导,帮助模型理解用户的意图和需求,并且指导模型在回复时保持一致性和相关性。通过不同的Prompt,用户可以引导模型生成不同风格、内容和深度的回复。

        例如,在下面这张图中,我们给文心一言的提问 “NLP 中的 Prompt 指什么”是我们的提问,其实也就是我们此次的 Prompt;而文心一言的返回结果就是此次的 Completion。

2.Temperature

        LLM 生成是具有随机性的,在模型的顶层通过选取不同预测概率的预测结果来生成最后的结果。我们一般可以通过控制 temperature 参数来控制 LLM 生成结果的随机性与创造性Temperature 一般取值在 0~1 之间,当取值较低接近 0 时,预测的随机性会较低,产生更保守、可预测的文本,不太可能生成意想不到或不寻常的词。当取值较高接近 1 时,预测的随机性会较高,所有词被选择的可能性更大,会产生更有创意、多样化的文本,更有可能生成不寻常或意想不到的词。

        简单来说,temperature 的参数值越小,模型就会返回越确定的一个结果。如果调高该参数值,大语言模型可能会返回更随机的结果。在实际应用方面,对于质量保障(QA)等任务,我们可以设置更低的 temperature 值,以促使模型基于事实返回更真实和简洁的结果。 对于文章创作或其他创造性任务,可以适当调高 temperature 参数值。

        如上图所示,利用langchain调用zhipuai的API,分别设置temperature的值为0和1,可以发现两次输出有所差异(第一次输出temperature=0),很明显当temperature=1时,模型输出更丰富。

3.Top_p

        同样,使用 top_p(与 temperature一起称为核采样的技术),可以用来控制模型返回结果的真实性。如果需要准确和事实的答案,就把参数值调低。如果想要更多样化的答案,就把参数值调高一些。 一般建议是改变 Temperature 和 Top_P 其中一个参数就行,不用两个都调整。

4.Max Length

        可以通过调整Max Length 来控制大模型生成的 token 数。指定 Max Length 有助于防止大模型生成冗长或不相关的响应并控制成本。

5.Stop Sequences

        stop sequence 是一个字符串,可以阻止模型生成 token,指定 stop sequence 是控制大模型响应长度和结构的另一种方法。例如,您可以通过添加 “11” 作为 stop sequence来告诉模型生成不超过 10 个项的列表。

6.Frequency Penalty

        frequency penalty 是对下一个生成的 token 进行惩罚,这个惩罚和 token 在响应和提示中出现的次数成比例, frequency penalty 越高,某个词再次出现的可能性就越小,这个设置通过给 重复数量多的 Token 设置更高的惩罚来减少响应中单词的重复。

7.Presence Penalty

        presence penalty 也是对重复的 token 施加惩罚,但与 presence penalty 不同的是,惩罚对于所有重复 token 都是相同的。出现两次的 token 和出现 10 次的 token 会受到相同的惩罚。 此设置可防止模型在响应中过于频繁地生成重复的词。 如果您希望模型生成多样化或创造性的文本,您可以设置更高的 presence penalty,如果您希望模型生成更专注的内容,您可以设置更低的 presence penalty。一般建议是改变 frequency penalty和 presence penalty其中一个参数就行,不要同时调整两个。

8.System Prompt

        在使用 ChatGPT API 时,可以设置两种 Prompt:一种是 System Prompt,另一种是 User Promp。System不是必需的,但有助于设定 assistant的整体行为,帮助模型了解用户的需求,并根据这些需求提供相应的响应。可以通过设置 System Prompt 来对模型进行一些初始化设定,例如下图的 Prompt:

{
    "system prompt": "你是一个旅行行程规划大师,可以根据天气、人流等各种因素来规划一系列的旅行行程",
    "user prompt": "如果我要在4.13-4.21期间去北京玩,该怎么规划我的行程?"
}

二、提示技术

2.1 zero-shot

        简单来说, Zero-shot就是把想要完成的任务,以最直接的方式描述出来,就是简单地将任务文本提供给模型并要求得到结果。这种情况下,模型仅通过任务描述或问题来推断出应该如何回应。这种方法的优点是灵活性极高,因为不需要为每一个新任务重新训练模型。然而,缺点是模型可能无法准确地把握任务的细微差别或特定要求。

{
    "prompt": "将文本分类为中性、负面或正面。文本:我认为这次假期还可以。情感:",
    "output": "中性"
}

2.2 Few-shot

        Few-shot是让大模型在上下文窗口中进行学习,给出一些示例,让大模型根据这些示例来进行推理。这些示例通常包括输入和预期输出,以便模型能够更准确地把握任务的性质和要求。对目标任务。由于该模型首先看到的是好的例子,它可以更好地理解人类的意图和需要什么类型的答案的标准。因此,Few-shot 学习往往比 zero-shot 学习有更好的性能。但是,这样做的代价是消耗更多的token,并且当输入和输出文本较长时,可能会达到上下文长度限制。

{
    "prompt": " 这太棒了!// Positive
                这太糟糕了!// Negative
                哇,那部电影太棒了!// Positive
                多么可怕的节目!//",
    "output": "Negative"
}

三、Prompt Engineer基本原则

2.1 原则一:编写清晰、具体的指令

        首先,Prompt 需要清晰明确地表达需求,提供充足上下文,使语言模型能够准确理解我们的意图。并不是说 Prompt 就必须非常短小简洁,过于简略的 Prompt 往往使模型难以把握所要完成的具体任务,而更长、更复杂的 Prompt 能够提供更丰富的上下文和细节,让模型可以更准确地把握所需的操作和响应方式,给出更符合预期的回复。

策略1:使用分割符清晰的知识输出的不同部分,比如"",<>,<\tag>等分隔符

策略2:指定一个结构化的输出,比如json,html等格式

策略3:要求模型自检测是否满足条件

策略4:提供少量示例

2.2 原则二:给模型时间去思考

        在设计 Prompt 时,给予语言模型充足的推理时间非常重要。语言模型与人类一样,需要时间来思考并解决复杂问题。如果让语言模型匆忙给出结论,其结果很可能不准确。例如,若要语言模型推断一本书的主题,仅提供简单的书名和一句简介是不足够的。这就像让一个人在极短时间内解决困难的数学题,错误在所难免。

策略1:指定完成任务需要的步骤:告诉模型完成这个指令,需要执行几步,每步的详细步骤

策略2:明确模型再给出结论之前推理出自己的解决方案:让模型自己推理,写出每一步的步骤,给足够的时间边思考边执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值