Prompt Engineering

LLM 时代 prompt 这个词对于每个使用者和开发者来说已经听得滚瓜烂熟,那么到底什么是 prompt 呢?简单来说,prompt(提示)就是用户与大模型交互输入的代称。即我们给大模型的输入称为 Prompt,而大模型返回的输出一般称为 Completion。

对于具有较强自然语言理解、生成能力,能够实现多样化任务处理的大语言模型(LLM)来说,一个好的 Prompt 设计极大地决定了其能力的上限与下限。如何去使用 Prompt,以充分发挥 LLM 的性能?首先我们需要知道设计 Prompt 的原则,它们是每一个开发者设计 Prompt 所必须知道的基础概念。本节讨论了设计高效 Prompt 的两个关键原则:编写清晰、具体的指令和给予模型充足思考时间。掌握这两点,对创建可靠的语言模型交互尤为重要。

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

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

从原则出发,Prompt有以下几个技巧:

使用分隔符清晰地表示输入的不同部分

在编写 Prompt 时,我们可以使用各种标点符号作为"分隔符",将不同的文本部分区分开来。分隔符就像是 Prompt 中的墙,将不同的指令、上下文、输入隔开,避免意外的混淆。你可以选择用 ```,""",< >, ,: 等做分隔符,只要能明确起到隔断作用即可。

使用分隔符尤其需要注意的是要防止提示词注入(Prompt Rejection)。

什么是提示词注入?

就是用户输入的文本可能包含与你的预设 Prompt 相冲突的内容,如果不加分隔,这些输入就可能"注入"并操纵语言模型,轻则导致模型产生毫无关联的不正确的输出,严重的话可能造成应用的安全风险。

寻求结构化的输出

有时候我们需要语言模型给我们一些结构化的输出,而不仅仅是连续的文本。什么是结构化输出呢?就是按照某种格式组织的内容,例如 JSON、HTML 等。

要求模型检查是否满足条件

如果任务包含不一定能满足的假设(条件),我们可以告诉模型先检查这些假设,如果不满足,则会指 出并停止执行后续的完整流程。您还可以考虑可能出现的边缘情况及模型的应对,以避免意外的结果或 错误发生。

提供少量示例

"Few-shot" prompting(少样本提示),即在要求模型执行实际任务之前,给模型提供一两个参考样例,让模型了解我们的要求和期望的输出样式。

利用少样本样例,我们可以轻松"预热"语言模型,让它为新的任务做好准备。这是一个让模型快速上手新 任务的有效策略。

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

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

相反,我们应通过 Prompt 引导语言模型进行深入思考。可以要求其先列出对问题的各种看法,说明推理依据,然后再得出最终结论。在 Prompt 中添加逐步推理的要求,能让语言模型投入更多时间逻辑思维,输出结果也将更可靠准确。

综上所述,给予语言模型充足的推理时间,是 Prompt Engineering 中一个非常重要的设计原则。这将大大提高语言模型处理复杂问题的效果,也是构建高质量 Prompt 的关键之处。开发者应注意给模型留出思考空间,以发挥语言模型的最大潜力。

从该原则出发,设计 Prompt 的技巧如下所示:

指定完成任务所需要的步骤

通过给定一个复杂任务,给出完成该任务的一系列步骤,来展示这一策略的效果。

python 复制代码
text = f"""
在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\
他们一边唱着欢乐的歌,一边往上爬,\
然而不幸降临------杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\
虽然略有些摔伤,但他们还是回到了温馨的家中。\
尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
"""

prompt = f"""
1-用一句话概括下面用<>括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个名称。
4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。
请使用以下格式:
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的名称列表>
输出 JSON 格式:<带有 English_summary 和 num_names 的 JSON 格式>
Text: <{text}>
"""

response = get_completion(prompt)
print("response :")
print(response)

指导模型在下结论之前找出一个自己的解法

在设计Prompt时,通过明确指导语言模型进行自主思考,来获得更好的效果。假设语言模型需要判断一个数学问题的解答是否正确。仅仅提供问题和解答时不够的,语言模型可能会匆忙的给出错误的判断。

相反,我们可以再Prompt中先要求语言模型尝试自己解决这个问题,思考出自己的解法,然后在提供解答进行对比,判断正确性。这种先让语言模型自主思考的方式,能够帮助模型更深入的理解问题,做出更准确的判断。

在开发与应用语言模型时,需要注意它们可能生成虚假信息的风险。尽管模型经过大规模预训练,掌握 了丰富知识,但它实际上并没有完全记住所见的信息,难以准确判断自己的知识边界,可能做出错误推断。若让语言模型描述一个不存在的产品,它可能会自行构造出似是而非的细节。这被称为"幻觉" (Hallucination),是语言模型的一大缺陷。

语言模型的幻觉问题事关应用的可靠性与安全性。开发者有必要认识到这一缺陷,并采取 Prompt优化、外部知识等措施予以缓解,以开发出更加可信赖的语言模型应用。这也将是未来语言模型进化的重要方向之一。

导致大模型出现幻觉的主要原因分为以下三点:

1、数据导致的幻觉问题

以知识边界为例,如果大模型未学习到该领域的知识,后者虽然学习到了,但是知识过时,或者是知识产生晚于模型数据产生时间等情况,均会导致大模型由于数据问题出现幻觉。

2、数据采样过程导致的模型幻觉

LLMs 往往依赖于捷径,而不是真正理解事实知识的细节。它们倾向于过度依赖预训练数据中的共现统计、共现频率和相关文档计数,这可能会引入对虚假相关性的偏见,如果这种偏见反映了事实上不正确的信息,可能会导致幻觉。长尾知识以其在预训练数据中的相对罕见性为特征,对 LLMs 构成了固有的挑战,它们主要依赖于共现模式来记忆事实知识。因此,当面临涉及这种长尾知识的查询时,LLMs 在生成事实上不准确的回答方面存在较高的风险。

3、预训练过程中导致的模型幻觉

一方面,可能受限于 Decoder-Only 架构,以及注意力机制的缺陷。大模型基于前一个标记预测下一个标记,仅从左到右。这种单向建模虽然促进了高效的训练,但也存在局限性。它仅利用单一方向的上下文,这阻碍了捕捉复杂的上下文依赖关系,可能增加幻觉的风险。self attention 模块在捕获长距离依赖关系方面表现出色。然而最近的研究表明,它们偶尔在算法推理的背景下表现出不可预测的推理错误,无论是长距离还是短距离依赖关系,无论模型规模大小。一个可能的原因是 soft attention 的局限性,随着序列长度的增加,注意力在各个位置之间变得稀释。

另一方面是曝光偏差的问题。这是由于自回归生成模型的训练和推理之间的差异造成的。在训练过程中,这些模型通常采用最大似然估计(MLE)的训练策略,其中真实标记作为输入提供。然而,在推理过程中,模型依赖于自己生成的标记进行后续预测。这种不一致性可能导致幻觉,尤其是当模型生成的错误标记在后续序列中引发错误级联时。

此外,微调对齐也会导致幻觉问题,大模型在预训练期间建立了固有的能力边界,当在微调数据中包含了预训练阶段未见过的新知识时,大模型被训练为生成超出自身知识边界的内容,增加了幻觉的风险。在模型对齐阶段,大模型也可能会产生谄媚的行为,其回应更倾向于用户的观点,而不是提供正确或真实的答案,这也会增加大模型幻觉现象。

相关推荐
嘟嘟实验室3 分钟前
PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)
人工智能·macos·aigc·自动翻译
远洋录8 分钟前
大型前端应用状态管理实战:从 Redux 到 React Query 的演进之路
前端·人工智能·react
coldstarry14 分钟前
sheng的学习笔记-AI-自然语言处理(NLP),机器翻译,情感分类,词嵌入
人工智能·深度学习·自然语言处理·机器翻译
高山莫衣24 分钟前
【返璞归真】-Lasso 回归(Least Absolute Shrinkage and Selection Operator,最小绝对值收缩和选择算子)
人工智能·数据挖掘·回归
Yeats_Liao29 分钟前
华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的SGD优化器案例实现
人工智能
AI浩1 小时前
激活函数在神经网络中的作用,以及Tramformer中的激活函数
人工智能·深度学习·神经网络
杨善锦1 小时前
mobile one神经网络
人工智能·深度学习·神经网络
Thanks_ks1 小时前
深入探索现代 IT 技术:从云计算到人工智能的全面解析
大数据·人工智能·物联网·云计算·区块链·数字化转型·it 技术
东方佑2 小时前
给图像去除水印攻
人工智能·python
知来者逆2 小时前
Layer-Condensed KV——利用跨层注意(CLA)减少 KV 缓存中的内存保持 Transformer 1B 和 3B 参数模型的准确性
人工智能·深度学习·机器学习·transformer