(超详细)大语言模型(LLM)学习篇(一)——Prompt engineering(提示词工程)

一、PE工程概述

PE工程(Prompt Engineering),即提示词工程,是指通过设计、优化、和调试提示词(Prompts),以引导大语言模型(如GPT、ChatGPT 等)生成预期结果的技术与方法。作为一种新兴技术,它结合了自然语言处理(NLP)、语义理解和任务导向生成技术,通过构建合理的提示,提示工程能够高效激发模型的潜力,提升其在文本生成、问答、推理等复杂场景中的表现。同时,提示工程结合上下文优化、链式推理(Chain-of-Thought)、知识增强生成(RAG, Retrieval-Augmented Generation)等技术,为模型提供更强的任务适配能力和专业领域知识,使其能够更精确地理解并完成用户需求。

PE工程广泛的应用场景(图片来源:谷歌)

笔者也是第一次接触学习PE工程,因此从初学者的角度,本文将主要从Prompt方法的原理、设计类别和主要参数等方面进行详细阐述,后续也会持续更新,也欢迎大家补充指正~

二、Prompt方法原理

2.1 概念与基础

Prompt 是一种在自然语言处理(NLP)中用于引导语言模型生成特定类型文本的技术。它的基本原理是通过向语言模型提供一个包含任务相关信息的输入文本片段(即 Prompt),利用语言模型在预训练阶段学到的语言知识和模式,引导模型生成符合预期的输出。例如,对于一个文本生成任务,Prompt 可以是一个问题、一个主题描述或者一个部分完成的句子,模型会根据这个 Prompt 来续写或生成完整的文本。

2.2 基于语言模型的概率生成机制

语言模型是通过对大量文本进行训练,学习到单词(或 token)之间的概率分布关系。当给定一个 Prompt 时,模型会根据 Prompt 的内容,在其生成的概率空间中寻找最有可能的单词序列来继续文本。以 Transformer 架构的语言模型为例,在生成过程中,模型会根据输入的 Prompt 计算下一个单词的概率分布,这个概率分布是基于模型对词汇表中所有单词在给定当前 Prompt 上下文下出现的可能性估计。然后通过采样(如贪心采样、Top - K 采样、Top - P 采样等)或其他策略从这个概率分布中选择一个单词作为生成的下一个单词,不断重复这个过程,直到生成满足终止条件(如生成了特定长度的文本、遇到结束标记等)的文本。

语言模型的简单机制(图片来源:谷歌) 

2.3 利用预训练知识和上下文信息

语言模型在预训练过程中学习了丰富的语言知识,包括语法规则、语义理解、常见的文本模式等。Prompt 作为一种上下文信息,激活了模型中与之相关的知识。例如,如果 Prompt 是 “写一篇关于科技发展的文章”,模型会利用其预训练阶段学到的关于科技词汇、科技领域的常见观点和事件等知识来生成文章。而且,随着生成过程的推进,新生成的单词也会作为新的上下文信息反馈给模型,进一步影响后续单词的概率分布,从而使生成的文本能够在整体上与 Prompt 保持主题和风格的一致性。

2.4 Prompt基本要素及常见公式

通常而言,在大模型中输入简单的提示词是能够获得大量的结果的,但结果的质量与提供的信息数量和完善度有关,简单的提示词往往得到的答案都比较宽泛而笼统,从内容深度、语言专业性上都会差很多,Prompt 的基本要素有很多,包括:任务指令上下文信息输入数据输出要求示例约束条件知识补充推理链条等。通过合理组合这些要素,可以设计高效、精准的 Prompt,最大化大语言模型的输出性能和可控性。

下面给出几个笔者在学习相关资料时总结的一些公式。

1、Prompt  = 角色 + 指令 + 期望 + 内容

Prompt的基本公式(内容来源:https://foresightnews.pro/article/detail/40232) 

2、Prompt = 角色分配 + 任务 + 参考信息 + 输出要求 + 示例 + 输出项

Prompt的基本公式(内容来源:同事说,这是写ChatGPT Prompt的万能公式-腾讯云开发者社区-腾讯云

3、Prompt = 定义角色 + 背景信息 + 任务目标 + 输出要求

4、Prompt = 角色 + 角色技能 + 任务目标 + 任务关键词 + 任务背景 + 任务范围 + 任务限制条件 + 输出格式/形式 + 输出量 

从中可以看出,有几个要素是基础且通用的,例如角色、背景、输出目标等,只要通过合适的语言和方式正确的整合这些要素,往往都能得出比较合理的答案,笔者自己对于这些要素的理解如下:

  • 角色:让大模型(如ChatGPT) 清楚自己将要扮演的角色,不仅能够辅助模型处于角色本位给出更贴近更符合要求的答案,也能更快速的帮助模型定位相关领域的知识和信息。例如算法工程师、AI产品设计师、程序员或者人工智能科研人员等等,“假如你是 AI 领域专家” 。
  • 背景/上下文信息:提供任务相关的背景信息或上下文,让模型理解任务所在的场景,能够辅助模型根据背景信息和前提条件提供更有针对性的回答和建议。
    例如:  "以下是一篇关于人工智能的文章,请总结其主要观点。"
  • 任务或指令:明确指出需要 AI 完成的具体任务或操作,个人认为是prompt的核心部分,首先得让大模型明确具体的任务要求,才能针对性地去给出比较合理的答案。比如“写一篇关于人工智能在医疗领域应用的文章”或者“将以下中文句子翻译成英文”。
  • 输出要求/约束条件:明确规定输出的格式、风格或结构,通过添加限制性条件引导大模型输出符合预期输出格式的内容,例如笔者经常用的一个就是“请用两段凝练的话进行总结”。除此之外,可以对生成结果的限制条件,如长度、特定词语的使用或避免某些词语,比如让大模型帮忙生成一个自我介绍时,“请结合以上内容,生成200字左右的自我介绍”,或者在进行相关问题描述时,“请避免使用技术术语,使用通俗易懂的语言回答”,这些限制和约束往往都能对模型的输出起到一定的控制作用。

 三、Prompt 方法的核心步骤

 介绍完Prompt的基本原理和要素之后,可以发现,改进提示词显然有助于在不同任务上获得更好的结果,那么如何设计出一个好的Prompt呢?本章笔者将详细介绍Prompt设计和工程化应用的一些学习内容和心得体会。

3.1 Prompt 设计

 除了前述提到的一些基础要素和基本指令之外,还有着一些比较高级的提示工程技术,个人感觉这些技术的引入使得整个PE工程更加的人工智能化,也能以具体的指标和参数去定义提示词工程引导大模型进行输出这一个过程。在进行Prompt设计时,可以优先从一下三个方面入手:

  • 明确任务目标:根据具体的任务需求,如文本分类、文本生成、问答等,设计能够准确引导模型完成任务的 Prompt。例如,对于情感分类任务,Prompt 可以是 “这句话‘这部电影太棒了’的情感是积极的还是消极的?”。
  • 选择合适的 Prompt 格式:Prompt 可以是自然语言句子、问题形式、指令形式等。例如,在文本生成任务中,“请写一个关于春天的故事”(指令形式)和 “春天,(开始续写)”(句子开头形式)都是常见的 Prompt 格式。同时,还可以在 Prompt 中包含一些示例、关键词或约束条件,以更好地引导模型。比如 “请写一个关于春天的故事,故事中要有花朵和小鸟”。
  • 考虑 Prompt 的通用性和特异性:通用性的 Prompt 可以适用于多种场景,但可能不够精准;特异性的 Prompt 能更好地针对特定任务,但可能在其他场景中适用性较差。需要根据实际应用场景进行权衡。例如,“请对这段文本进行总结” 是比较通用的总结任务 Prompt,而 “请用不超过 100 字总结这篇科技论文的创新点” 则是更具特异性的 Prompt。

 除了笼统通用的设计要求之外,还有许多比较有针对性的提示技术,接下来将分别进行阐述。

3.1.1 零样本提示(Zero-shot Prompting)

个人感觉和零样本学习有点像,顾名思义,该方法是让语言模型在没有针对特定任务进行训练的情况下,通过精心设计的提示(Prompt)来完成任务的方法。

该方法利用语言模型在预训练过程中所学到的广泛知识和语言模式,直接引导模型对未曾见过的任务类型进行回答,就是简单地将任务文本提供给模型并要求得到一个输出结果。例如:

Prompt:
判断一下以下句子的情感导向是积极的、中性的还是消极的:
“我认为这次元旦假期过的还不错。”

输入给Chatgpt后得到的结果如下: 

 这种方法的优势是任务通用性高,可以快速应用于各种新任务,而且能够节省训练资源和时间,也不会消耗特别多的Token。但由于没有针对特定任务进行训练,模型只能依靠预训练知识和推理能力,所以生成内容的准确性可能不如经过特定任务训练的模型。例如,在专业领域的知识问答任务中,零样本提示可能会因为模型对专业术语的理解不够准确或者缺乏专业知识细节,而生成不太准确的答案。

3.1.2 少样本提示(Few-shot Prompting)

少样本提示是一种介于零样本提示和传统有监督训练之间的方法。它通过在提示(Prompt)中提供少量的任务示例(通常为 3 - 5 个)以及待完成的任务内容,引导语言模型学习从这些示例中归纳出任务模式,进而完成新的、未见过的同类任务。

  • 语言模型通过观察提示中的少量示例,尝试理解任务的输入 - 输出模式。以数学运算任务为例,提示可能包含 “1 加 2 等于 3”“3 加 4 等于 7”“5 加 6 等于 11” 等示例,模型会分析这些示例中的数字运算关系和文本表述方式,从而归纳出加法运算的规则和回答格式。
  • 对于更复杂的自然语言任务,如翻译任务,模型会从示例句子的原文和译文的词汇对应、语法结构转换等方面进行学习。例如,给定 “‘我爱读书。’翻译为‘I love reading.’”“‘他在跑步。’翻译为‘He is running.’” 等示例,模型会学习中文句子和英文句子之间的词汇、时态等翻译规律

少样本提示示例(图片来源:https://juejin.cn/post/7257441472446038071)  

相较于零样本提示,少样本提示能够提供更具体的任务信息,帮助模型更好地理解任务要求,从而提高任务性能。而且与传统的有监督训练需要大量的标注数据不同,少样本提示只需要少量的精心选择的示例即可,这对于数据获取困难或成本高昂的任务非常有利。

但是,少样本提示的效果对示例的选择非常敏感。示例的质量、多样性、代表性等因素都会影响模型的学习效果。如果示例过于简单或复杂、缺乏代表性或者存在错误,都可能导致模型学习到错误的任务模式。除此之外,这样做的代价是消耗更多的token,并且当输入和输出文本较长时,可能会达到上下文长度限制。

以相同的情感导向判别任务为例,利用少样本提示进行模型测试:

Prompt:
以下是一些示例句子及其情感导向,请根据这些示例句子的情感导向,判断后续例子的情绪类别。

示例1:《小小的我》这部电影让人看了太感动了。情绪导向:积极
示例2:今天北京的风太大了,真让人无语。情绪类别:消极
示例3:我觉得这个跨年节目中规中矩。情绪导向:中性

请判断下面句子的情绪类别:

句子1:今天是平平淡淡的一天。
句子2:马上要到周末拥有两天假期了,我特别开心。
句子3:我感到有点焦虑,因为下周一有一场重要的面试。

输入给Chatgpt后得到的结果如下: 

尽管少样本提示能够提高模型在特定任务上的性能,但与经过大量数据充分训练的模型相比,其性能仍然有限。在一些复杂任务中,如复杂的逻辑推理、高精度的翻译等任务,少样本提示可能无法满足要求,仍然需要更多的训练数据和精细的训练方法来进一步提升模型性能。

3.1.3 链式思考(CoT)提示

链式思考(Chain - of - Thought,CoT)提示是一种在自然语言处理中,特别是在大型语言模型应用场景下,用于引导模型生成推理步骤以解决复杂问题的技术。它不仅仅要求模型给出最终答案,还期望模型展示出像人类思考过程一样的中间推理步骤。例如,在解决数学应用题时,模型不仅要回答最终的计算结果,还要呈现出如何根据题目条件逐步推导答案的过程。

  • CoT 提示通过在输入中提供一系列包含推理步骤的示例作为提示内容,让语言模型学习这种推理模式。这些示例就像是一种引导,使模型能够理解如何从问题出发,通过一系列逻辑步骤,最终得到答案。例如,对于一个逻辑推理问题 “如果 A 能推出 B,B 能推出 C,已知 A 成立,那么 C 是否成立?”,CoT 提示可能包含这样的示例:“已知 A 能推出 B,就像如果下雨(A),地面会湿(B);又已知 B 能推出 C,比如地面湿(B)会导致路滑(C)。现在已知下雨(A),那么按照这个推理链,路滑(C)是成立的。”
  • 在复杂问题解决过程中,中间步骤的信息可以为后续步骤提供必要的上下文和线索。例如,在解决数学多步骤问题时,前一步的计算结果会作为后续步骤的输入。CoT 提示通过要求模型展示这些中间步骤,使得模型能够更好地组织思维,避免直接从问题跳到答案可能出现的错误。同时,这些中间步骤也有助于模型在生成最终答案之前进行自我检查和修正。 

链式思考提示示意案例(图片来源:谷歌) 

 该方法通过提供中间推理步骤实现了复杂的推理能力,可以结合少样本提示方法引导模型得到更加准确合理的输出,例如:

你是一位专业的健康顾问,需要帮助判断某人是否适合参加马拉松比赛。请使用链式思考方式,通过逐步推理来得出结论。以下是一个示例:

示例:
输入:年龄:25岁,心率:70次/分钟,过去6个月每周跑步3次,每次跑步10公里。
推理过程:
1. 该人年龄为25岁,属于马拉松适合人群的年轻年龄段。
2. 静息心率为70次/分钟,处于正常范围,说明心脏健康状况良好。
3. 过去6个月每周跑步3次,每次跑步10公里,表明该人有稳定的跑步习惯和良好的体能储备。
结论:该人适合参加马拉松比赛。

请根据以下输入进行推理:

输入:年龄:40岁,心率:85次/分钟,过去3个月每周跑步1次,每次跑步5公里。
推理过程:
结论:

输入给Chatgpt后得到的结果如下: 

链式思考提示对提示设计要求较高,设计有效的 CoT 提示需要精心选择和构造示例,确保示例中的推理步骤清晰、合理且具有代表性。如果示例的推理过程过于复杂或模糊,模型可能无法正确理解和学习。例如,在科学问题推理中,如果示例的科学原理解释不清晰,模型可能会在新问题中出现错误的推理,而且不同类型的问题可能需要不同的推理链结构和提示方式。对于数学问题的推理提示可能侧重于数字关系和运算步骤,而对于文本逻辑推理可能更关注语义关系和概念的转换。因此接下来介绍自动思维链。

自动思维链(Auto - CoT)是一种在自然语言处理领域,特别是针对复杂任务推理的自动化技术。它是思维链(CoT)方法的一种扩展,旨在自动生成思维链提示,而不是像传统 CoT 那样依赖人工设计的带有推理步骤的示例。其核心目标是通过自动化手段,让语言模型能够自动生成连贯的推理步骤来解决复杂问题,进一步提升模型在复杂任务中的性能。

自动思维链提示示意案例(图片来源:谷歌)  

Auto - CoT 首先会对给定的一组问题进行聚类。通过分析问题的结构、主题、类型等特征,将相似的问题划分到同一类别。然后,利用语言模型本身来生成这些代表性问题的思维链示例。即让语言模型针对选定的问题,自动生成包含推理步骤的解答过程。这些自动生成的思维链示例就像传统 CoT 中的人工设计示例一样,被用于引导语言模型解决同一聚类中的其他问题。当面对新的问题时,模型会参考同聚类中自动生成的思维链示例的推理模式,尝试构建解决新问题的推理步骤。

演示抽样过程即从每组数组中选择一个具有代表性的问题,并使用带有简单启发式的 Zero-Shot-CoT 生成其推理链,简单的启发式方法可以是问题的长度(例如,60 个 tokens)和理由的步骤数(例如,5 个推理步骤)。Auto-CoT的代码可以参考:.

为了进一步的测试和实验,本文设计的Prompt为:

你是一位数学助理,需要解决数学问题并给出详细的推理过程。请根据问题的描述,
自动生成推理步骤并得出答案。回答时使用以下结构:
1. 问题描述
2. 推理过程
3. 答案

问题为:小明买了8个苹果和6个橙子,一个苹果3元,一个橙子5元。他用了50元纸币支付,
请问他应该找回多少钱?

输入给Chatgpt后得到的结果如下: 

可以看出自动思维链无需显示的示例,能够根据任务场景灵活的调整推理逻辑,有助于提高复杂任务的准确性,但问题聚类的准确性直接影响 Auto - CoT 的效果。如果问题聚类不合理,例如将不同类型的数学问题错误地聚类在一起,那么生成的思维链示例可能无法有效引导模型解决问题。而且,即使聚类正确,选择的代表性问题可能也无法完全涵盖该聚类中所有问题的特点,导致生成的示例不够全面和具有代表性。

3.1.4 链式提示(Chain Prompting)

链式提示是一种自然语言处理技术,通过构建一系列相互关联的提示来引导语言模型逐步生成符合期望的内容或回答。它类似于在对话或思考过程中,一步一步地引导话题的走向或推理的进程。与单一提示不同,链式提示强调提示之间的连贯性和递进性,每个提示都基于前一个提示的输出或基于整体任务目标的阶段性推进。

例如,在故事创作任务中,第一个提示可能是 “请设定一个故事的背景,包括时间、地点和主要人物”,语言模型根据这个提示生成内容后,第二个提示可以是 “基于刚才设定的背景,描述故事的开端,主要人物面临的第一个挑战是什么”,以此类推,通过一系列的提示让模型完成整个故事的创作。对于复杂的、多步骤的任务,链式提示能够显著提高模型生成内容的质量和准确性。通过将任务分解并逐步引导,避免了让模型一次性处理复杂任务可能导致的混乱和错误,可以引导模型生成更具深度和逻辑性的内容。链式提示提供了一种更具交互性的方式来引导语言模型。就像在对话中一样,可以根据模型的回答不断调整下一个提示,从而更好地控制生成的内容方向,这种可控性对于一些需要严格遵循特定要求或标准的任务非常重要。

链式提示利用语言模型对上下文的敏感性,通过有序的提示序列,为模型构建一个动态的上下文环境。每一个新的提示都在前一个提示生成内容的基础上添加新的任务要求或信息,使得模型能够理解任务的推进方向。例如,在翻译任务中,第一个提示可以是 “请翻译这个句子的主语部分”,模型完成后,第二个提示 “请翻译这个句子的谓语部分,并与之前翻译的主语部分组合成完整的句子翻译”,这样逐步引导模型完成整个句子的翻译。

以下是一个Prompt示例,展示如何设计提示词工程,引导模型通过多步推理完成任务:

你是一位历史学家,需要逐步回答问题。请按照以下步骤完成:
1. 确定问题的核心内容。
2. 提供关于问题中涉及的历史事件的简要背景。
3. 分析该事件的主要原因。
4. 解释该事件对历史发展的主要影响。
5. 总结回答。

问题:请描述第二次世界大战的起因,并分析其对世界格局的影响。

输入给Chatgpt后得到的结果如下: 

1. 确定问题的核心内容:
问题要求描述第二次世界大战的起因,并分析其对世界格局的影响。

2. 提供历史事件的背景:
第二次世界大战(1939-1945)是一场全球性战争,涉及轴心国(主要是德国、日本、意大利)与同盟国(主要是英国、苏联、美国等)之间的大规模冲突。战争始于1939年德国入侵波兰,随后引发了英国和法国对德国的宣战。

3. 分析主要原因:
- **政治因素**:凡尔赛条约的不公正条款导致德国经济困境与政治不稳定,助长了纳粹党崛起。
- **经济因素**:1929年大萧条造成了全球经济危机,加剧了各国之间的经济竞争和扩张冲动。
- **军事扩张**:轴心国的军事扩张政策,特别是德国的“生存空间”理论,直接威胁欧洲和平。
- **国际联盟的无效**:国际联盟未能有效遏制侵略行为,使得侵略国变本加厉。

4. 解释对世界格局的主要影响:
- **地缘政治变化**:战争导致德国、日本、意大利战败,同盟国确立全球主导地位,形成了以美苏为首的两极格局。
- **经济重建**:战后马歇尔计划帮助西欧恢复经济,奠定了现代国际经济秩序的基础。
- **国际合作加强**:联合国成立取代国际联盟,旨在维护国际和平与安全。

5. 总结回答:
第二次世界大战的起因包括政治、经济、军事扩张等多重因素。其影响深远,不仅改变了世界地缘政治格局,还推动了国际合作和经济重建,对现代世界的形成具有决定性意义。

设计链式提示需要对任务有深入的理解,并且要能够合理地分解任务和构建提示序列。对于复杂任务,如何确定合适的子任务和提示顺序是一个挑战。链式提示依赖于语言模型能够记住前面提示和生成的内容,并将其有效地应用到后续的任务中。然而,语言模型可能会在长序列的提示过程中出现遗忘或无法有效整合上下文信息的情况。

3.1.5 思维树 (ToT)

对于需要探索或预判战略的复杂任务来说,传统或简单的提示技巧是不够的。思维树(Tree of Thoughts,ToT)是一种创新的框架,旨在增强大型语言模型(LLM)的推理能力,模拟人类解决问题的认知策略,使 LLM 能够以结构化的方式探索多种可能的解决方案,类似于树状分支路径。ToT 维护着一棵思维树,思维由连贯的语言序列表示,这个序列就是解决问题的中间步骤。使用这种方法,LM 能够自己对严谨推理过程的中间思维进行评估。LM 将生成及评估思维的能力与搜索算法(如广度优先搜索和深度优先搜索)相结合,在系统性探索思维的时候可以向前验证和回溯。

ToT的核心概念为:将问题分解为一系列连贯的思维步骤,每个步骤都是一个语言序列,作为问题解决的中间步骤。以树状结构来表示语义信息,每个节点代表一个语义单元,如概念、主题或关键词,节点之间通过边连接,形成一种复杂的关联网络。

ToT框架原理(图片来源:谷歌) 

思维树的推理流程为:

  1. 语义理解:对输入的文本进行语义理解,将自然语言转换为计算机能够理解的形式,通常会使用一系列预训练的语义表示模型,如 BERT、GPT 等,来对输入文本进行编码和表示,从而捕捉到输入文本中的语义信息。
  2. 构建思维树:基于对输入文本的语义表示,构建一个思维树,以表示文本中的不同思维路径和关系。这个过程涉及到树状结构的设计和构建算法。
  3. 路径选择:在生成输出文本时,根据输入文本和构建的思维树选择合适的思维路径。该过程通常涉及到路径搜索算法,以确定最相关和最合适的思维路径,ToT 可以考虑到多个可能的思维路径,并根据输入文本的不同语义信息动态调整路径选择策略。
  4. 整合信息:选择了合适的思维路径后,从不同路径中获取信息,并将其整合起来,形成一个综合的理解。此过程涉及到信息融合和加权的算法,以确保生成的输出文本能够考虑到多个因素和可能性。
  5. 生成输出:根据整合的信息生成输出文本,通常采用生成式模型,如 GPT,来生成连贯、自然的文本。ToT 会根据整合的信息和选择的思维路径来指导文本生成过程,以生成准确、多样化的输出。

在论文[2305.10601] Tree of Thoughts: Deliberate Problem Solving with Large Language Models中,思维树(Tree of Thoughts, ToT)方法能够将复杂任务分解为多步推理,通过系统性筛选与评估,逐步逼近最优解。在“算24游戏”这一数学推理任务中,ToT通过广度优先搜索(Breadth-First Search, BFS)逐步探索解题路径,并结合语言模型(Language Model, LM)提供的候选项评估机制,实现高效问题求解。

3.1.5.1 任务分解与候选项筛选

在“算24游戏”中,目标是通过数学运算使给定的四个数字结果等于24。为实现这一目标,ToT方法将解题过程划分为三个关键步骤,每个步骤对应一个中间方程的生成。每一步的核心任务包括:

  1. 候选项生成:利用语言模型生成多种可能的中间方程。
  2. 候选项筛选:基于语言模型的推理能力,对每个候选项进行评估。

具体来说,ToT在每步中生成多个候选解,并通过三种评估结果对候选项分类:

  • Sure(一定能):候选项被模型判定可以通过少量进一步尝试即可得出正确解。
  • Maybe(可能):候选项具有一定可能性,但无法直接验证其正确性,需保留以供后续探索。
  • Impossible(不可能):候选项明显无法达成目标,例如结果“过大”或“过小”,通过常识即可排除。

对于每一步的候选项,ToT保留最优的5个解(Top-5),并将“sure”候选项优先用于下一步推理。同时,“maybe”项被暂时存储,等待进一步验证,而“impossible”项则直接舍弃。

3.1.5.2 局部评估与全局优化

为确保候选项的有效性,每步思维的候选解需要进行多轮抽样评估。具体而言,每个候选项由语言模型生成后,会被评估三次,以减少误判的可能性。最终评估结果基于以下原则:

  • 确保局部解的高可靠性,减少无意义的向前探索。
  • 结合常识性约束(例如结果“过大”或“过小”),在早期阶段排除低可能性的路径。
  • 对无法直接验证的潜在解进行延迟筛选,以保留可能性。
3.1.5.3 ToT在“算24游戏”中的执行过程

在具体执行中,ToT通过广度优先搜索(BFS)逐步展开解题路径:

  1. 初始阶段,生成若干候选中间方程,并对其进行分类和筛选。
  2. 对于被判定为“sure”的候选项,直接进入下一步推理;“maybe”项被暂时搁置;“impossible”项直接淘汰。
  3. 在每一步,保留最优的5个候选项(Top-5)以控制搜索空间大小,同时通过多轮评估优化筛选结果。
  4. 最终,在第三步完成时,通过验证和筛选,输出满足目标的解。

具体的过程图解为:

 与传统的通用搜索策略相比,ToT 控制器可以通过新数据集或自对弈(类似 AlphaGo 的训练方式)持续学习新的策略,即使在使用冻结的 LLM 时,整个系统仍然具备动态进化和知识更新的潜力。以下给出一个ToT思维树的提示词示例(感兴趣的读者可以去测试一下这个结果):

任务:请解决以下迷宫路径规划问题,找到从起点 S 到终点 E 的最短路径。
采用树状推理(Tree of Thoughts, ToT)方法逐步展开路径选择。

问题:  
迷宫如下(S为起点,E为终点,X为障碍):  
S 0 0 X 0  
X X 0 X 0  
0 0 0 0 0  
0 X X X E  

步骤:
1. 在当前位置(初始为S)生成所有可能的下一步移动(上、下、左、右)。
2. 对每个移动进行评估(sure/maybe/impossible):  
   - sure:该路径通畅,且可能是通往终点的最优路径。  
   - maybe:该路径可能可行,但需要进一步尝试。  
   - impossible:该路径不可行或为死路。  
3. 从评估结果中保留最佳候选路径,继续展开下一步。  
4. 如果当前路径无解,回退到上一步并重新选择路径。  

要求:  
- 展示每一步的候选路径及其评估结果。  
- 输出最终的最短路径及其总步数。

3.2 大语言模型参数设置

在使用提示词与大语言模型(LLM)交互时,通过调整模型的配置参数,可以显著影响生成的文本质量和多样性。这些参数设置对于提高响应的可靠性和适应特定应用场景至关重要。以下是常见模型参数的详细说明和优化建议。

3.2.1 温度(Temperature

Temperature 决定了生成结果的随机性。较低的值会让模型倾向于选择概率更高的词元(token),从而生成更确定的结果;较高的值则会增加生成的随机性和创造性,降低 temperature 实际上是在提升高概率词元的权重,使得模型更加专注于选择最可能的结果。

内容参考:https://juejin.cn/post/7236558485290631205  

该参数的设置准则为:

  • 设置为0:对每个prompt都生成固定的输出
  • 低值(例如,0.2-0.4):适用于对事实性和一致性要求较高的任务,如质量保障(QA)、摘要生成或代码生成。
  • 高值(例如,0.7-1.0):适用于需要更具创造性或多样化的任务,如诗歌创作、故事生成或广告文案撰写。
场景:生成一句励志名言

低值(0.2)
Prompt: "请生成一句励志名言。"
Output: "成功源于坚持和努力。"
(结果更确定、更符合常见格式,没有太多创造性。)

高值(0.8)
Prompt: "请生成一句励志名言。"
Output: "追逐梦想的道路上,失败是点缀成功的彩虹。"
(生成的内容更具创意,包含较新颖的表达方式。)

3.2.2 Top-p(核采样)

Top-p 参数用于限制模型只考虑概率质量达到某一阈值的词元集合,以实现动态裁剪候选词元空间。通常只需调整 temperaturetop-p 中的一个参数,因为它们都对模型输出的随机性和多样性有影响,同时调整可能导致参数交互效果难以控制。

以一篇博客中的案例为例:将 top-p 设定为 0.15,即选择前 15% 概率的 tokens 作为候选。如下图所示,United 和 Netherlands 的概率加起来为 15% ,所以候选词就是这俩,最后再从这些候选词里,根据概率分数,选择 united 这个词。

内容参考:https://juejin.cn/post/7236558485290631205 

该参数的设置准则为:

  • 低值(例如,0.1-0.3):模型只关注最可能的词元集合,适合需要高准确性和确定性的任务,如技术文档生成或逻辑推理。
  • 高值(例如,0.7-0.9):适合需要更广泛探索的任务,如对话生成或角色扮演任务。
场景:生成下一句对话

低值(0.3)
Prompt: "A: 你今天过得怎么样?\nB:"
Output: "还不错,就是有点忙。"
(内容集中于高概率、最常见的回答,直接而简洁。)

高值(0.9)
Prompt: "A: 你今天过得怎么样?\nB:"
Output: "还行吧,上午去跑步了,下午又试了一个新菜谱。"
(模型考虑了更多的候选词元,生成内容更加多样化且具体。)

3.2.3 Top-k 

Top-k 是一种采样策略,用于从模型预测的概率分布中选择候选词元(tokens),在每一步生成过程中,模型仅考虑概率最高的前 k 个词元,并从中进行采样,而忽略其他词元。与 Top-p 控制生成结果的概率质量不同,Top-k 限制的是候选词元的数量。

内容参考:https://juejin.cn/post/7236558485290631205  

 不同Top-k数值的测试结果:

场景:生成描述一本书的内容

1. k=1(Greedy Search,贪婪搜索)
Prompt: "请描述一本关于人工智能的书。"
Output: "这本书探讨了人工智能的基本概念、核心算法以及在实际应用中的发展潜力。"
(模型每一步都选择概率最高的词元,生成内容通常直接而简洁,但创造性不足。)

2. k=5
Prompt: "请描述一本关于人工智能的书。"
Output: "这本书深入探讨了人工智能的起源,包括机器学习和神经网络的基本原理,以及其在医疗、教育和工业中的创新应用。"
(模型在前 5 个概率最高的词元中选择,内容更丰富、更具探索性。)

3. k=50
Prompt: "请描述一本关于人工智能的书。"
Output: "这本书融合了人工智能、机器人学、伦理学的内容,提出了关于未来技术与人类关系的新思考,启发读者深入了解人工智能的潜在挑战与无限可能性。"
(模型选择范围更广,可能生成更多新颖或多样化的内容,但也可能偶尔偏离主题。)

3.2.4 Max Length

Max Length 设置生成的最大 token 数,用于控制输出长度,控制 Max Length 可以避免生成冗长或偏离主题的内容,同时有助于优化计算资源使用和成本控制。

该参数的设置标准为:

  • 短内容:指定较低的值(例如,50-100 tokens),用于摘要、回答简单问题或生成标题。
  • 长内容:设置较高的值(例如,500-1000 tokens),适用于生成长篇文章或复杂问题的完整答案。
场景:生成一段关于人工智能的简介

短(50 tokens)
Prompt: "请简要介绍人工智能。"
Output: "人工智能是一门研究如何模拟人类智能的技术,涵盖机器学习、自然语言处理等领域。"
(生成内容短小精悍,适合摘要或概述。)

长(200 tokens)
Prompt: "请简要介绍人工智能。"
Output: "人工智能是一门研究如何模拟和扩展人类智能的学科,包括机器学习、计算机视觉、自然语言处理等领域。其应用范围广泛,例如在医疗领域,人工智能可用于诊断疾病;在金融领域,人工智能可以进行风险预测。此外,人工智能还在自动驾驶、语音助手等方面取得了重要进展,正在改变人类的生活方式和生产方式。"
(内容更为详尽,适合撰写完整段落或初稿。)

3.2.5 Stop Sequences

Stop Sequences 是一组触发条件,用于终止模型生成token的过程,指定该参数是控制大模型响应长度和结构的另一种方法。例如,指定特定字符或标记(如“\n”或特定单词)作为停止符号。

场景:生成一个5项清单

无 Stop Sequences
Prompt: "列出提升生产力的五个方法:"
Output: "1. 制定明确目标。2. 合理规划时间。3. 专注任务执行。4. 持续学习新技能。5. 适当休息与调节精力。6. 定期反思与优化工作方法。"
(生成内容超出目标,未自动停止。)

有 Stop Sequences(“5.”)
Prompt: "列出提升生产力的五个方法:"
Output: "1. 制定明确目标。\n2. 合理规划时间。\n3. 专注任务执行。\n4. 持续学习新技能。\n5. 适当休息与调节精力。"
(模型在生成满足要求的清单后自动停止。)

3.2.6 Frequency Penalty

Frequency Penalty 根据词元在提示词和响应中出现的频率进行惩罚。惩罚强度与词元的重复次数成比例。 其核心逻辑在于,依据下一个待生成 token 在当前响应及提示内容中已出现的频次,按比例施加惩罚。具体而言,随着某个 token 出现次数的递增,其后续再次被选中生成的概率将呈指数级下降。这一机制旨在通过对高频重复词汇的强力抑制,确保生成文本具备丰富多样的词汇表达,有效规避单调、机械的重复表述,提升文本整体的可读性与流畅性。

该参数的设置标注为:

  • 低值(例如,0.0-0.5):适合生成需要重复关键词的内容,如主题分析或强调特定概念的文本。
  • 高值(例如,1.0-2.0):适合生成需要减少重复的文本,如创意写作或对话生成。
场景:描述人工智能的优势

低值(0.0)
Prompt: "人工智能有哪些优势?"
Output: "人工智能可以快速处理数据,人工智能能够优化流程,人工智能提高了效率。"
(重复使用相似表达,文本显得单调。)

高值(1.0)
Prompt: "人工智能有哪些优势?"
Output: "人工智能能够快速处理数据,提高工作效率,并通过优化流程简化复杂任务。同时,它还能促进自动化发展,推动创新。"
(减少重复,语言更加丰富。)

3.2.7 Presence Penalty

Presence Penalty 对重复出现的词元施加相同的惩罚,而不论其重复次数。这可以限制模型生成中重复使用相同词元。但与 Frequency Penalty 的运作逻辑存在细微差异,它摒弃了依据重复频次差异化惩罚的模式,转而采取 “一视同仁” 的策略,即无论某个 token 在文本中重复出现两次还是十次,所遭受的惩罚力度均保持一致。这种设置在实际应用中,能够从宏观层面防止模型过度依赖少数特定词汇,推动其探索更广泛的词汇库,但它与 Frequency Penalty 类似,建议只调整其中一个参数,而非同时修改两者,以避免复杂交互效果。

场景:生成一段关于机器人应用的描述

低值(0.0)
Prompt: "描述机器人在工业领域的应用。"
Output: "机器人在工业领域中非常有用。机器人可以完成复杂任务,机器人还可以提高效率。机器人使生产更加智能化。"
(某些词语重复出现,影响内容的多样性。)

高值(1.0)
Prompt: "描述机器人在工业领域的应用。"
Output: "工业机器人被广泛应用于组装、焊接、包装等环节,能够显著提升生产效率。此外,机器人还在质量检测和库存管理中发挥关键作用。"
(避免了重复词语,生成内容更加多样化。)

内容参考:Active-Prompt | Prompt Engineering Guide/https://zhuanlan.zhihu.com/p/653956781

四、Prompt engineering 总结与展望

4.1  研究现状

Prompt 工程作为增强大语言模型(LLM)能力的重要方法,已经从单一的任务指令设计逐步发展为系统化的技术体系。目前研究主要集中在以下几个方向:1)基于手工设计的提示优化,包括任务描述、少样本示例(Few-shot Examples)以及链式推理(Chain-of-Thought, CoT)等技术;2)自动化提示生成(AutoPrompt)和提示调优,通过梯度优化、强化学习或进化搜索方法设计高效的提示;3)组合式提示(如 Tree-of-Thought, ToT 和 Chain Prompting),将复杂问题分解为多步骤的推理过程,从而提升模型在逻辑推理和多任务协作中的表现。随着基础模型规模的扩展,Prompt 工程的有效性和适用性已在自然语言理解、生成、推理等任务中得到广泛验证。

4.2 待解决问题

尽管 Prompt 工程已取得显著进展,但仍面临多项挑战。一方面,现有方法对模型的鲁棒性和泛化能力的依赖较高,不同模型架构或任务背景下的提示迁移能力较弱;另一方面,手工设计的提示往往缺乏系统性和理论支撑,难以全面挖掘模型潜在能力,而prompt 的设计高度依赖人工经验与反复试验,缺乏自动化、智能化的高效构建方法,尤其面对复杂专业任务,设计出精准有效的 Prompt 耗时费力。此外,当前自动化提示生成方法对计算资源的依赖较大,且在复杂推理任务中易出现次优解,如何优化 Prompt 工程以降低生成结果的偏差、错误或道德风险也是亟需解决的重要问题。而且模型对 Prompt 的理解和执行存在不确定性,即使细微调整 Prompt,输出结果可能大相径庭,难以稳定控制。

4.3 未来发展趋势

未来的 Prompt 工程研究将朝着更高效、通用和智能化的方向发展。一是构建任务无关的通用提示模板或框架,使 Prompt 能够适配不同任务并具备跨领域的迁移能力;二是结合大模型的内在知识学习机制,通过动态调整提示结构实现更强的自适应推理能力;三是探索多模态融合中的提示技术,以支持文本、图像、音频等多模态协同任务。此外,将 Prompt 工程与强化学习、用户交互机制和知识图谱等技术深度结合,有望进一步提升提示的智能化水平,为解决复杂的实际问题提供更强大的支持。并且,随着可解释性研究深入,有望揭开 Prompt 与模型交互的 “黑箱”,使输出更可靠、可预测,全方位推动自然语言处理技术迈向新高度。

本文目前罗列了常见的Prompt设计方法,给出了几个使用Chatgpt进行提示词撰写测试的案例,但是还有很多更高级更有效更复杂的设计方法,例如检索增强生成(RAG)、ReAct、基于图的提示方法等等,考虑到篇幅原因,笔者将在后续第二篇学习博客中继续阐述相关方法和使用案例。

希望这篇文章能够对初学LLM和PE工程的你有所启发!一定要多尝试多思考提示词工程的技巧,方便的话请一键三连呐,欢迎批评指正和讨论~ 

内容概要:本文围绕DeepSeek R1/V3模型的提示词学习进行了详细介绍。DeepSeek是家专注AGI研发的中国公司,其中R1为开源推理模型,擅长逻辑密集型任务如数学推导、代码生成等,采用强化学习优化,适合科研辅助;V3则是通用模型,擅长语言生成、创意写作等,强调结构化引导,适用于对话及开放性问答。文中重点介绍了如何针对这两种模型设计高效提示语,涵盖设计原则、实用技巧以及避免常见陷阱的方法。并探讨了‘概率预测’与‘链式推理’两大类型的模型特点及其应用场景。对于提示词,提出了具体设计思路与元素组合建议,旨在确保高质量的AI产出。最终,作者提供了几个提示语设计的实际示例,以便于读者理解与应用。 适用人群:对AI特别是大型语言模型有兴趣的专业技术人员,如软件开发者、研究人员、产品经理等,尤其是已经有定机器学习基础知识,并希望通过更细致的学习步优化其AI应用程序表现的从业人员。 使用场景及目标:帮助读者根据不同类型的AI模型(如推理模型与通用模型)正确选择与构造提示词,以达到提高准确性、增加创造力、优化效率、保障致性和增强用户体验的目标。适用于涉及文本生成、代码协助、数据分析等领域的日常工作流,也可作为培训材料供团队内部分享。 其他说明:本文不仅提供了理论上关于如何构建有效提示词的知识,还结合了大量实战经验和具体案例。提醒使用者要注意区分不同场景下模型的选择(例如逻辑性强的任务倾向于R1),并且始终关注提示词设计的原则(如避免陷入模糊指令或过度指令的困境),同时也要留意可能遇到的各种挑战如幻觉生成或伦理问题的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值