前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从大模型的原理到提示词优化

从大模型的原理到提示词优化

作者头像
xindoo
发布2024-10-27 13:42:15
1870
发布2024-10-27 13:42:15
举报
文章被收录于专栏:XINDOO的专栏

  大语言模型(后文简称LLM)已经火热了近两年,相信大家或多或少都学习过一些Prompt技巧。但你有没有思考过:为什么使用这些Prompt能得到更好的输出结果?为什么有时你怎么试都得不到想要的结果?为什么有些任务LLM根本无法完成?接下来,我们通过一个简单示例来了解LLM的运行过程。理解这个过程后,你自然就能回答上述问题了。

什么是AI提示词(Prompt)

  谈到AI应用,大家首个浮现在脑海中的词汇往往是AI提示词(Prompt)。用一句话概括:AI提示词是我们向AI系统(如ChatGPT)输入的指令或问题,用于引导AI生成特定输出或完成特定任务。 这些提示词可以是简单的问题,也可以是复杂的指令集。

例如:

  • 简单问题:"谁发明了电话?"
  • 复杂指令:"请以营销专家的角度,为一款新上市的智能手表撰写一篇300字的产品介绍。"
  • 创意要求:"写一首关于人工智能的七言绝句。"

  这些例子展示了AI提示词的多样性和适应性。从简单的查询到复杂的创意任务,提示词能满足各种需求。掌握如何有效构建这些提示词对获得理想的AI输出至关重要。

接下来,我们将深入探讨提示词为何对AI结果影响如此之大,以及它们如何影响LLM的工作过程。

为什么提示词对AI结果的影响很大

  要回答这个问题,我们首先需要大致了解LLM的运作过程。用一句话概括:LLM始终在预测下一个最可能出现的词(Token) 让我们通过一个给小孩子启蒙用的句子补全练习,来了解LLM是如何工作的。

  • 请补全这句话:我午饭吃了(_____) 。 可以填入的候选词有 披萨、垃圾桶、香蕉、盖饭、轮胎、砖头、面条、餐巾纸、包子、白云、油条、汉堡。

  从语法角度来看,所有候选项都可以填入,因为它们都是名词。但从语义上考虑,这里只能填写食物。因此,我们可以排除餐巾纸、垃圾桶、轮胎、砖头和白云,剩下盖饭、面条、披萨、汉堡、包子、油条和香蕉这些词都有可能。

  从上文的关键词"午饭"来看,在没有其他上下文的情况下,我只能根据个人饮食习惯对这些食物的可能性进行排序。结果依次是:盖饭、面条、披萨、汉堡、包子、油条、香蕉。但即便如此,我们仍然无法确定具体是哪一个。那么,如果我们提供更多的背景信息会怎样呢?

  • 我今天在西安出差,午饭吃了(_____) 。

  在这个上下文中,新增了"西安"这个关键词。众所周知,西安是中国的面食之都,所以来到西安怎能不品尝面食呢?在这种情况下,"面条"无疑是最合适的填入词。然而,如果我们再增加一些上下文信息,情况又会有所不同。比如:

  • 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了(_____) 。

  到这里,你肯定会斩钉截铁地说应该填写"汉堡"。虽然前面的文字中有"中午"和"西安"这两个关键词,但它们对候选项的影响权重远不及"汉堡王"高。

  这实际上就是LLM执行一次预测的过程。整个LLM回复问题的过程就是不断重复这些步骤,持续预测下一个词(token)应该是什么,直到模型认为回答完成或达到最大长度限制。

实际上一次LLM完整的回答过程示例如下:

步骤

当前状态

预测出下一个词(Token)

用户看到的结果

0

1

今天

我今天

2

我今天

我今天在

3

我今天在

西安

我今天在西安

4

我今天在西安

出差

我今天在西安出差

5

我今天在西安出差

我今天在西安出差,

6

我今天在西安出差,

我今天在西安出差,但

7

我今天在西安出差,但

时间

我今天在西安出差,但时间

8

我今天在西安出差,但时间

比较

我今天在西安出差,但时间比较

9

我今天在西安出差,但时间比较

我今天在西安出差,但时间比较紧

……

…………

……

…………

n-2

我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭

吃了

我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了

n-1

我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了

汉堡

我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了汉堡

n

我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了汉堡

我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了汉堡。

其中预测出下一个词列就是LLM在回答你问题时一个接一个生成的词。当整个过程执行完毕,你就得到了LLM的完整回复。LLM的大致执行过程确实很简单,但复杂之处在于每次计算下一个词(token)时,它需要调动前面所有Token所涉及的庞大参数,然后去计算词表中所有词的可能性,并从中选出概率最高的一个(Temperature为0时)。这个计算量非常大,因此LLM需要消耗大量算力,也导致它返回结果较慢。

  • 冷知识:正是因为LLM回复的过程是不断通过预测来补全文本,所以OpenAI的对话接口叫completion。

  经过大量文本训练后,LLM不仅学会了各种知识,还掌握了文本中蕴含的语义和逻辑关系。通过使用已有的词(Token),LLM能够计算出下一个最合适的词(Token),从而神奇地展现出媲美人类的语言能力(这一现象学术界至今没有统一的解释)。通过上述简单例子,我们可以直观地理解为什么不同的Prompt会对模型的输出产生巨大影响。

  理解了LLM的工作原理后,我们就能更好地编写提示词。提示词的本质是为LLM提供充足的背景和上下文信息,使其能生成更符合我们需求的文本内容,而好的提示器可以在有限的文本中提供更多有效的上下文,触发模型更多的参数,从而能得到更丰富多样更优质的结果。接下来,让我们探讨几个常见且有效的提示词技巧。

角色的重要性

  许多提示词模板都会设定角色,这是一个非常有效的策略。让我们用一个简单的例子来解释原因。假设你要向某个心智尚未完全成熟、理解能力有限、知识储备不丰富的人讲解某个主题。这里你用了一长串描述来界定你的受众,而我只需用三个字——"小学生"就能代替。一提到"小学生",你就能自动联想到一系列相关的背景信息,无需我再多加解释,对LLM来说也是类似的。我们可以将角色视为一个包含大量背景信息的压缩包。这就是为什么设定角色能如此有效地改善提示词的原因。

  • 心智未完全发展成熟、理解水平有限、而且知识储备不是很丰富的人 == 小学生

  类似地,特定领域的名词、术语和关键词也起着相同的作用。这些词汇就像是特定领域知识的压缩包,能够迅速激活相关的专业背景和上下文,从而达到与设定角色相似的效果。

One-shot/Few-shot

  这俩提示词技巧直白来说,其实就是给大模型一些参考样例,One-shot就是给定单个样本,Few-shot是给定多个样本。 从LLM工作原理的角度来看,提供样本(One-shot或Few-shot)能够提升输出质量,主要有以下几个原因:

  1. 增加上下文信息: 样本为LLM提供了更多的上下文信息,这些信息会影响模型在预测下一个词(token)时的概率分布,从而引导模型生成更符合预期的输出。
  2. 示范任务格式: 样本展示了任务的具体格式和结构,使LLM更容易理解和模仿所需的输出形式。这相当于为模型提供了一个"模板",增加了输出与预期一致的可能性。
  3. 激活相关知识: 提供样本能帮助LLM更准确地识别任务类型和所需知识领域。这样,LLM可以在其庞大的参数空间中激活与任务相关的"知识",从而提高输出的相关性和准确性。
  4. 降低歧义性: 某些情况下,任务描述可能存在歧义。提供样本可以明确任务的具体要求,减少LLM误解或偏离主题的可能性。

任务拆解

  任务拆解是另外一种高效的提示词技巧,它将复杂问题分解为更小、更易管理的部分。这种方法不仅帮助LLM更好地理解和处理问题,还能显著提高整体回答质量。通过将大任务拆分成一系列小步骤,我们能更精确地引导LLM的思考过程,从而获得更准确、更全面的回答。

从LLM的工作原理来看,任务拆解和多次问答能提升回答质量,主要原因如下:

  1. 上下文增强:每次问答都为LLM提供新的上下文信息,影响模型预测下一个词(token)的概率分布,使后续回答更精准。
  2. 缓解长期依赖:通过任务拆解,每个子任务的输入相对简短,减少了LLM在处理长文本时可能出现的"遗忘"早期信息问题。
  3. 交互式引导:多次问答过程中,用户可根据LLM的回答调整后续问题,逐步引导模型得出更准确的结果。
  4. 简化复杂任务:将复杂任务拆解为多个简单子任务,每个子任务更易被LLM准确理解和回答,从而提高整体质量。
  5. 及时纠错:多次问答提供了多个检查点,用户可在中间步骤发现并纠正潜在错误,避免错误累积。

  这个技巧不仅提高了LLM的回答质量,还增强了用户与AI之间的交互体验。通过任务拆解和多次问答,用户可以更精确地引导LLM的思考方向,同时更深入地理解AI的推理过程。这种方法不仅适用于简单查询,还特别有效地解决复杂问题和进行深度分析。接下来,让我们探讨另一个强大的技巧——思维链。它进一步推进了这种交互式问题解决的方法,为我们开启了更多可能性。

思维链(Chain of Thought)

  思维链技巧的核心是让大语言模型展示其推理过程。这种方法特别适用于需要逐步推理或复杂计算的问题。通过让LLM呈现其思考过程,我们不仅能获得更准确的答案,还能洞察模型如何得出结论。这种透明度在验证结果正确性和理解模型推理能力方面极为宝贵。具体使用方式很简单:在提示词中要求模型输出过程。一个"魔法"提示词是"Let's think step by step"(让我们一步步思考),在中文语境中也可以直接使用。

  从理论转向实践,让我们通过一个具体例子深入理解思维链技巧的应用。这个例子不仅展示了思维链的实际效果,还能帮助我们更好地理解LLM如何利用这种方法提高问题解决的准确性和透明度。我们将用一个小学数学应用题来说明思维链的有效性:

  • 甲乙丙丁4个人去买水果,甲买了3斤苹果、5斤梨、1斤香蕉,乙买了4斤苹果、3斤梨、5斤香蕉,丙买了1斤苹果、3斤梨、6斤香蕉,丁买了1斤苹果、10斤梨、1斤香蕉。已知苹果一斤2元、梨一斤3元、香蕉一斤4元,请按他们各自的总消费额度由高到低排序。

  如果你现在询问主流的几个模型,它们都能给出推理过程以及正确答案:乙 > 丁 > 丙 > 甲。然而,当我们限制LLM直接给出答案而不提供推理过程时,所有的大模型都会出错。如果你使用不同的模型多次尝试,你会发现在这个限制下,所有模型都是在瞎猜。

  思维链的有效性源于其与任务拆解相似的机制。通过思维链,LLM能够自主地将复杂问题分解为一系列小步骤,每一步都为下一步提供了额外的上下文信息。这个过程不仅增强了模型的推理能力,还能让用户更清晰地了解LLM的思考过程。与任务拆解由用户主导不同,思维链让LLM在生成答案的过程中自动创建和利用中间步骤,从而提高了回答的准确性和可解释性。

总结

  我们从LLM的运行机制来看,其实真正的Prompt技巧就只有一个,那就是提供更多高质量的上下文, 这些技巧都是为了实现这一目标。无论是设定角色、使用示例、任务拆解还是思维链,它们的核心都在于为LLM提供更丰富、更精确的上下文信息,从而引导模型生成更符合我们期望的输出。通过这些方法,我们可以更好地利用LLM的强大能力,实现更精准、更高效的人机交互。

  在理解LLM的运行机制后,我愈发觉得,与LLM沟通和与人沟通并无本质区别,两者都需要清晰的表达、适当的上下文和对方的反馈。与LLM交流时,我们需要提供足够的背景信息,使用恰当的提示技巧,并根据其回应进行调整。这种交互过程与人际沟通有着惊人的相似之处,都需要我们不断优化和调整我们的表达方式,才能达到最佳的沟通效果。

  最后,教大家一个判断自己Prompt质量的直观小技巧:把你的Prompt展示给周围的人,让他们尝试完成你的任务。如果他们直接开始思考如何实现,而不是问你一堆问题,那么你就写出了一个好的Prompt。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是AI提示词(Prompt)
  • 为什么提示词对AI结果的影响很大
  • 角色的重要性
  • One-shot/Few-shot
  • 任务拆解
  • 思维链(Chain of Thought)
  • 总结
相关产品与服务
腾讯云小微
腾讯云小微,是一套腾讯云的智能服务系统,也是一个智能服务开放平台,接入小微的硬件可以快速具备听觉和视觉感知能力,帮助智能硬件厂商实现语音人机互动和音视频服务能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档