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

简介: 本文介绍了大语言模型(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。

目录
相关文章
|
6天前
|
机器学习/深度学习 自然语言处理 测试技术
NeurIPS 2024:杜克大学&谷歌提出SLED解码框架,无需外部数据与额外训练,有效缓解大语言模型幻觉,提高事实准确性
在NeurIPS 2024上,杜克大学和谷歌团队提出Self Logits Evolution Decoding(SLED),旨在提高大语言模型(LLMs)的事实准确性。SLED通过对比模型早期层和最终层的logits,利用内部潜在知识增强输出准确性,无需外部知识库或额外微调。实验显示,SLED能显著提升多选题、开放生成等任务的准确性,最高提升达20%,且延迟开销极低。该方法具有创新性和有效性,但也存在实现复杂、计算开销等挑战。
22 2
|
18天前
|
人工智能 JSON PyTorch
TPO:告别微调!这个AI框架让大模型实时进化:无需训练直接优化,输入问题越用越聪明,输出质量暴涨50%
TPO(Test-Time Prompt Optimization)框架,通过奖励模型和迭代反馈优化大语言模型输出,无需训练即可显著提升性能,支持动态对齐人类偏好,降低优化成本。
175 8
TPO:告别微调!这个AI框架让大模型实时进化:无需训练直接优化,输入问题越用越聪明,输出质量暴涨50%
|
9天前
|
算法 测试技术
北大李戈团队提出新代码模型对齐方法 CodeDPO:显著提升代码准确性与执行效率
北京大学李戈团队提出CodeDPO,一种新型代码模型对齐方法,通过整合偏好学习提升代码生成的准确性和执行效率。该方法采用自我生成和验证机制,基于PageRank算法迭代优化代码片段排名,构建偏好优化数据集。CodeDPO在HumanEval基准测试中实现83.5%的通过率,显著优于现有方法,并能提高代码执行效率。其灵活性和可扩展性使其适用于多种编程任务,但训练资源需求较大,且依赖于生成测试用例的质量。论文链接:https://arxiv.org/pdf/2410.05605。
26 2
|
3月前
|
人工智能 搜索推荐 决策智能
不靠更复杂的策略,仅凭和大模型训练对齐,零样本零经验单LLM调用,成为网络任务智能体新SOTA
近期研究通过调整网络智能体的观察和动作空间,使其与大型语言模型(LLM)的能力对齐,显著提升了基于LLM的网络智能体性能。AgentOccam智能体在WebArena基准上超越了先前方法,成功率提升26.6个点(+161%)。该研究强调了与LLM训练目标一致的重要性,为网络任务自动化提供了新思路,但也指出其性能受限于LLM能力及任务复杂度。论文链接:https://arxiv.org/abs/2410.13825。
80 12
|
5月前
|
机器学习/深度学习 自然语言处理 算法
通过RAG增强大模型回答原本无法回答的问题
RAG(检索增强生成)是一种结合信息检索和文本生成技术的方法,旨在提升大规模语言模型处理特定问题的能力。通过先从大量文档中检索相关信息,再利用这些信息生成更准确的答案,RAG特别适用于需要最新数据或专业知识的场景,如医疗咨询、法律建议等。此方法不仅提高了答案的质量和准确性,还增强了系统的可扩展性和适应性。随着技术进步,RAG有望在更多领域发挥重要作用。
75 2
|
5月前
|
人工智能 前端开发
大模型体验体验报告:OpenAI-O1内置思维链和多个llm组合出的COT有啥区别?传统道家理论+中学生物理奥赛题测试,名不虚传还是名副其实?
一个月前,o1发布时,虽然让人提前体验,但自己并未进行测试。近期终于有机会使用,却仍忘记第一时间测试。本文通过两个测试案例展示了o1的强大能力:一是关于丹田及练气的详细解答,二是解决一道复杂的中学生物理奥赛题。o1的知识面广泛、推理迅速,令人印象深刻。未来,或许可以通过赋予o1更多能力,使其在更多领域发挥作用。如果你有好的测试题,欢迎留言,一起探索o1的潜力。
258 1
|
5月前
|
机器学习/深度学习 算法 TensorFlow
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
学习率是深度学习中的关键超参数,它影响模型的训练进度和收敛性,过大或过小的学习率都会对网络训练产生负面影响,需要通过适当的设置和调整策略来优化。
861 0
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
|
6月前
|
人工智能 开发者
谷歌通过数据增强、对比调优,减少多模态模型幻觉
【9月更文挑战第16天】谷歌研究人员针对多模态大语言模型(MLLMs)中的幻觉问题,提出了一种结合数据增强与对比调优的新方法,旨在减少模型生成错误信息的情况。该方法通过生成式数据增强制造幻觉标记并与真实标记对比,利用对比损失优化模型参数,从而提升模型对真实信息的辨识能力。实验结果显示,此方法能显著降低对象幻觉现象,但在模拟复杂现实场景及计算需求方面仍面临挑战。相关研究已发布在论文《通过数据增强的对比调优减轻对象幻觉》中。
84 3
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
PVG:用小模型验证大模型输出,解决“黑盒”难题
【8月更文挑战第4天】随AI技术的发展,机器学习系统广泛应用,但在高风险领域如医疗和金融中,其决策需可验证与解释。为此,提出了“Prover-Verifier Games”(PVG)框架,通过两个学习者——证明者与验证者的博弈,前者提供决策及证据,后者评估证据真伪并做决策,以此提升决策透明度。实验显示,在图像分类和自然语言推理任务中,验证者能有效区分真假证据,即便证明者提供虚假信息。不过,PVG也面临计算成本高和适用范围有限等问题。
123 1
|
10月前
|
缓存 人工智能 数据可视化
LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解
LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解
LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解