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

简介: 本文介绍了大语言模型(LLM)的基本概念及其工作原理,重点探讨了AI提示词(Prompt)的重要性和几种有效技巧,包括角色设定、One-shot/Few-shot、任务拆解和思维链。通过实例解析,展示了如何利用这些技巧提升LLM的输出质量和准确性,强调了提供高质量上下文信息对优化LLM表现的关键作用。

@[toc]
  大语言模型(后文简称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需要消耗大量算力,也导致它返回结果较慢。

10月23日(1).gif

  • 冷知识:正是因为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元,请按他们各自的总消费额度由高到低排序。

image2131231.png

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

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

总结

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

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

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

目录
相关文章
|
3天前
|
SQL 人工智能 安全
【灵码助力安全1】——利用通义灵码辅助快速代码审计的最佳实践
本文介绍了作者在数据安全比赛中遇到的一个开源框架的代码审计过程。作者使用了多种工具,特别是“通义灵码”,帮助发现了多个高危漏洞,包括路径遍历、文件上传、目录删除、SQL注入和XSS漏洞。文章详细描述了如何利用这些工具进行漏洞定位和验证,并分享了使用“通义灵码”的心得和体验。最后,作者总结了AI在代码审计中的优势和不足,并展望了未来的发展方向。
|
11天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
18天前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
2770 8
|
13天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1576 12
|
5天前
|
人工智能 关系型数据库 Serverless
1024,致开发者们——希望和你一起用技术人独有的方式,庆祝你的主场
阿里云开发者社区推出“1024·云上见”程序员节专题活动,包括云上实操、开发者测评和征文三个分会场,提供14个实操活动、3个解决方案、3 个产品方案的测评及征文比赛,旨在帮助开发者提升技能、分享经验,共筑技术梦想。
712 95
|
1月前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
18天前
|
人工智能 Serverless API
AI助理精准匹配,为您推荐方案——如何快速在网站上增加一个AI助手
通过向AI助理提问的方式,生成一个技术方案:在网站上增加一个AI助手,提供7*24的全天候服务,即时回答用户的问题和解决他们可能遇到的问题,无需等待人工客服上班,显著提升用户体验。
1467 9
|
6天前
|
SQL 存储 人工智能
【产品升级】Dataphin V4.3重大升级:AI“弄潮儿”,数据资产智能化
DataAgent如何助理业务和研发成为业务参谋?如何快速低成本的创建行业数据分类标准?如何管控数据源表的访问权限?如何满足企业安全审计需求?
355 0
【产品升级】Dataphin V4.3重大升级:AI“弄潮儿”,数据资产智能化
|
2天前
|
人工智能 自然语言处理 程序员
提交通义灵码创新实践文章,重磅好礼只等你来!
通义灵码创新实践征集赛正式开启,发布征文有机会获得重磅好礼+流量福利,快来参加吧!
196 7
|
16天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
877 29