在2023年,大型语言模型的诞生标志着人工智能领域的一个新纪元,而Prompt工程也随之成为利用这些模型的关键技术。Prompt的好坏直接影响到模型的输出质量和效率。尽管网络上充斥着各种关于Prompt技巧的讨论,但缺乏系统性的总结,使得读者在阅读后仍然感到迷茫,不知道如何开始。 本文旨在结合我们在Prompt工程中的实践经验,对Prompt工程进行系统化的梳理,以期帮助读者更深入地理解和有效利用大型语言模型,让每个人都能成为Prompt工程师。 ### 序言 1.1 探索Prompt与GPT的起源与发展 当前我们所说的大型语言模型,主要是指自2023年ChatGPT问世以来的一系列模型,而不是广义上所有基于Transformer架构的模型。Prompt的概念也是随着GPT模型的发展而逐渐形成的。要理解Prompt的本质,我们需要从GPT的发展历史开始,追溯Prompt的起源。 自2017年Transformer模型的诞生,NLP领域迎来了革命性的变化。BERT和GPT两大模型家族以其卓越的性能迅速成为市场的宠儿。BERT于2018年问世,以其双向特性在众多NLP任务中展现出卓越的性能,成为行业标杆。而GPT家族则以其单向生成能力,不断探索语言模型的新边界。

GPT模型的演进可分为四个阶段:GPT-1、GPT-2、GPT-3和ChatGPT。GPT-1作为早期模型,采用了与BERT相似的预训练加微调的模式,但受限于规模和效果,并未广泛应用。GPT-2的推出标志着一种全新范式的开始,通过扩大模型规模和训练数据,实现了无需监督数据即可完成任务的能力。GPT-3进一步扩大了模型规模,参数量达到了1750亿,其在zero-shot任务上的表现令人瞩目。而ChatGPT则是在GPT-3基础上针对多轮对话进行优化的产物,它的出现标志着AI市场化的新起点。

尽管BERT类模型因其双向特性在业务中更为常见,但GPT家族以其独特的发展路径,不断推动着NLP技术的进步。从GPT-1的初步探索,到GPT-2的范式创新,再到GPT-3的规模效应,直至ChatGPT的对话优化,每一步都体现了AI技术的快速发展和应用潜力。 在人工智能领域,研发范式经历了显著的演变,主要分为三个阶段:首先是传统的有监督训练模式,然后是BERT和GPT1所代表的无监督预训练加有监督微调,最后是GPT2和GPT3所引领的无监督预训练结合提示词技术。这三种模式的演进,反映了模型能力构建的重心从训练过程逐渐转移到预训练阶段,特别是大型模型,其能力更多依赖于预训练阶段的积累,而非后续的微调。

在BERT的范式下,微调还能在参数层面对模型产生影响,但到了GPT3时代,我们不再通过微调来调整模型,而是通过精心设计的输入——即Prompt——来直接影响模型的输出质量。Prompt工程的核心,就是如何设计这些输入,以激发并利用模型的内在能力。

Prompt,即提示词,与zero-shot学习紧密相连,它允许模型在没有经过特定任务训练的情况下直接回答问题。Prompt的实质是一种提问方式,它促使模型回忆起在预训练阶段学到的知识与技能。Prompt工程的目标是解锁并精确利用模型的这些能力,以解决具体问题。

然而,Prompt工程并非没有挑战。首先,大模型的规模使得传统的训练和微调变得成本高昂且效果有限。其次,微调可能导致模型“遗忘”先前学到的知识。此外,依赖训练来更新知识并不是一个长期可靠的策略,因为大模型的真正优势在于其预训练阶段的能力,而非任务特定的训练。

因此,Prompt工程的重要性日益凸显。它不仅是新研发范式下的关键技术,也是实现大模型潜能的重要手段。随着大模型技术的不断进步,Prompt工程将继续作为连接人类需求与模型能力的重要桥梁。 在众多文章与教程中,我们发现一个普遍现象:它们倾向于列举各种技巧,例如《Prompt Engineering Guide》中所展示的,它们建议你在构建提示(Prompt)时可以“添加示例”或“设定角色”等。然而,这些资料往往缺乏一个系统化的框架或标准化流程,以指导用户如何逐步构建一个有效的提示。本文旨在结合我们团队的研发经验,提出一套系统化的“提示工程”工作流程,帮助用户从零开始,构建和管理一个结构化的提示。通过这种结构化的方法,我们希望使提示成为大型模型应用的坚实基础,确保其可靠性、有效性和可扩展性。具体来说,我们将构建一个提示的过程细化为五个阶段,利用统一模板解决初始提示的编写难题,并在实际应用中不断优化,实现“提示工程”的系统化完成。

我们希望通过我们的方法,可以提升 Prompt 工程的工作效率,降低 Prompt 技术的应用成本,并解决 Prompt 难以管理的问题。让大家都可以从0到1的完成大模型的调试,并让大模型在各个领域中被更好的应用。

编写Prompt的过程,从无到有,往往充满了挑战。就像儿时初学写作文,面对空白纸张,心中充满迷茫。为了解决这个难题,我们采用了一种结构化的模板方法,将Prompt分解为四个关键部分:确立角色、陈述问题、明确目标和补充要求。这种分步策略,无论面对何种任务,都能帮助我们构建一个基础但有效的Prompt。下面,我将详细解释这个模板的来源和其有效性。 在第一章中,我们深入探讨了Prompt的功能和定位。Prompt的核心作用是引导模型理解我们的需求,明确我们的目标。基于这一理念,一个优秀的Prompt应包含以下要素: 1. 确立角色:明确谁是提问者,谁是回答者,以及他们之间的关系。 2. 陈述问题:清晰地描述需要解决的问题,确保问题表述具体、明确。 3. 明确目标:指出我们希望通过模型得到的答案或结果。 4. 补充要求:如果有特定的格式、风格或其他额外要求,应在此部分说明。 通过这种结构化的方法,我们能够构建出一个基础的Prompt,为进一步的优化打下坚实的基础。 在与大模型交互时,首先需要明确地描述问题,即你希望模型完成的具体任务是什么。接着,具体说明要执行的操作,比如编写代码、优化文章等。最后,补充任何特定的要求,如格式、长度限制等。通过这三个步骤,可以清晰地向模型传达你的任务需求。例如,生成产品摘要时,需要提供产品需求文档和用户评价,并要求摘要简洁幽默,字数不超过50字。为代码添加注释时,需要分析代码内容并详细注释,每条注释前加“comment:”。设计测试用例时,需要根据产品需求文档编写测试点,并保证测试点无遗漏。这些示例展示了如何通过简洁的语言描述任务,以便模型能够准确理解并执行。此外,通过设定角色,可以快速调用模型的特定能力,实现任务的高效完成。 通过精心设计的’Prompt 模板’,我们为各类任务的初始阶段提供了一个统一的框架。这不仅帮助我们快速启动并完成Prompt的初稿,还使我们在面对不同任务时能够迅速进入状态,避免了写作上的犹豫和迟疑。

Prompt的系统化分解,也极大地提升了我们对Prompt的管理效率。原本庞大的文本库被拆分为四个部分:‘角色表’、‘问题表’、‘目标表’和’要求表’。这样的结构化处理,不仅增加了Prompt的灵活性,还允许我们通过动态地组合这四个元素来应对各种任务。特别是在处理复杂任务或需要多模型协同工作的场景中,这种结构化的方法提供了稳定而有效的支持。

在第二章中我们已经明确了 “Prompt 工程” 的第一步,通过我们的框架,在任何任务中我们都可以完成 Prompt 从 0 到 1 的编写,而这个初版的 Prompt 还只是一个雏形,由于各部分信息还不完整,往往不能达到我们的预期,框架提供了 Prompt 的骨架,还需要我们进一步补充血肉,下面我会对框架的每一部分进行更详细的分解,通过内容的补全一步步的提升模型的效果。

3.1 立角色

与第二章中对 “角色” 的理解一致,**“角色” 可以被当作大模型的“能力包”或“语法糖”,**我们不再需要对每一项能力进行详细的描述,对任务进行更细节的分解,而是可以通过 import “角色” 的方式,使用这个 “角色” 背后对应的各项能力。那我们该如何设立角色,才是这个“能力包”的正确使用方式呢?

大家都有招聘的经历,我们可以想象,大模型就是我们要招的人,我们需要设定一个能力模型,来完成我们指定的工作。我们在招聘时通常都会有明确的要求,在JD中要有清晰的描述,这样才能找到最合适的人选。这与大模型的角色设置一样,我们要清晰明确的描述这个角色,才能充分 “提示” 大模型,让大模型知道该调用哪些能力。

我们不妨试想一下在招聘 JD 中,我们会要求哪些内容。通常会包含:工作年份,教育水平,项目经历,工作技能,荣誉奖项等等。我们完全可以按照这个思路,创建一个语言模版,帮助我们创立角色。

以下是我在使用的角色模版,当然 Prompt 的构造十分灵活,展示的示例仅供参考:

角色模版:

现在你是一位优秀的{{你想要的身份}},拥有{{你想要的教育水平}},并且具备{{你想要的工作年份及工作经历}},你的工作内容是{{与问题相关的工作内容}},同时你具备以下能力{{你需要的能力}}

例:心理咨询师

现在你是一位优秀的 {{心理咨询师}},拥有 {{心理咨询、临床心理学等专业的硕士或博士学位}},并且具备 {{多年的心理咨询工作经验,在不同类型的心理咨询机构、诊所或医院积累了丰富的临床实践经验}},你的工作内容是 {{为咨询者处理各种心理问题,并帮助你的咨询者找到合适的解决方案}},同时你具备以下能力:

{{

  1. 专业知识:你应该拥有心理学领域的扎实知识,包括理论体系、治疗方法、心理测量等,可以为你的咨询者提供专业、有针对性的建议。
  2. 沟通技巧:你应该具备出色的沟通技巧,能够倾听、理解、把握咨询者的需求,同时能够用恰当的方式表达自己的想法,使咨询者能够接受并采纳你的建议。
  3. 同理心:你应该具备强烈的同理心,能够站在咨询者的角度去理解他们的痛苦和困惑,从而给予他们真诚的关怀和支持。
  4. 持续学习:你应该有持续学习的意愿,跟进心理学领域的最新研究和发展,不断更新自己的知识和技能,以便更好地服务于你的咨询者。
  5. 良好的职业道德:你应该具备良好的职业道德,尊重咨询者的隐私,遵循专业规范,确保咨询过程的安全和有效性。

}}

以上是一个简单的示例,角色的设置往往需要编写者对角色有一定的了解,这可以更好的帮助你补全你的模版,但如果你不了解你要设置的角色,不知道这些信息该如何填写,我们如何可以获取到这部分信息呢?

**其实,我们可以沿着 “招聘 JD” 的思路,通过招聘网站上的招聘信息补全我们的数据。**例如,我要让大模型帮我完成一个 “财务分析” 相关的任务,而我此前对这个领域毫无了解,此时就可以通过招聘网站的职位信息,完成角色的设置:

在构建有效的Prompt时,我们首先需要设定一个明确的角色,并赋予这个角色相应的背景知识和技能。例如,如果我们设定的角色是一位经验丰富的财务分析顾问,那么这个角色应该拥有财务学、经济学等相关专业的硕士或博士学位,并且具备至少八年的财务分析工作经验。这个角色的日常工作包括对投融资数据进行深入分析,设计数据分析框架和汇报体系,同时具备数据分析能力、问题解决能力、学习能力、自我驱动力以及良好的中英文沟通能力。

接下来,我们需要明确地描述我们希望模型完成的任务,即“述问题&定目标”。这一步骤是Prompt中信息含量最大的部分,需要清晰明确地描述任务,并强调任务的分解。例如,如果任务是制作一份旅游攻略,我们需要将任务分解为研究和收集信息、规划行程、预订交通和住宿以及准备必要的物品等步骤。

此外,我们还可以利用模型的“编程”能力来让模型更“听话”,通过将要求转换为编码任务,让模型的输出更加符合我们的预期。例如,如果我们希望模型输出10个国家的列表,我们可以要求模型以Python列表的格式进行输出。

最后,我们需要注意Prompt的格式,清晰的结构对模型的效果有很大的影响。我们可以使用各种分隔符来区分Prompt的各个部分,如#<>、``、[]-等,或者利用Markdown语法进行结构化。例如,LangGPT提出了一种结构化的Prompt模式,通过一套结构化的模板来构造格式清晰的Prompt。

通过上述步骤,我们可以构建出一个结构清晰、目标明确、角色设定合理且能够引导模型输出符合预期结果的Prompt。 在上文中,我们探讨了如何通过’Prompt 框架’和’框架细化’来构建有效的提示,以提升大型语言模型的推理能力。为了进一步优化这些提示,我们需考虑如何提供更丰富的输入信息,以确保模型能够更准确地进行推理。这不仅包括静态信息,即那些在提示中预先设定的信息,还包括动态信息,即根据特定任务需求而变化的信息。动态信息的加入是提升模型性能的关键。 在构建更完善的提示时,我们不可避免地需要进行信息检索,以确保我们能够获取到最相关和最新的信息。这正是’RAG’技术发挥作用的地方。RAG,即Retrieval-Augmented Generation,是一种结合了信息检索和生成的技术,它允许模型在生成回答之前,先检索相关信息。这种方法在实际应用中已受到广泛关注,并在各种场景中证明了其有效性。 RAG技术的核心优势在于,它不依赖于模型参数中硬编码的知识,而是赋予了模型动态获取知识的能力。这对于模型在专业域中的应用至关重要,同时也确保了模型在处理通用领域问题时的知识和信息的时效性与扩展性。就像人类通过检索来获取知识一样,大型语言模型通过检索步骤来增强其推理和生成能力。 在实际应用中,RAG技术通过检索获取的知识对提升模型的效果至关重要。因此,当我们在构建提示时,应该考虑如何有效地结合RAG技术,以确保我们的模型能够访问到最准确和最相关的信息,从而提供更高质量的输出。

**而这个检索背后的技术就是 “RAG”,**他可以利用大模型能力通过语义相似度的方式,高效的在文本数据上完成检索,并把其增加到大模型的输入当中。

从技术角度分析,RAG模型的初始形态是其最基础且关键的组成部分。它利用“嵌入表示加上向量数据库”的技术手段,实现了文本数据在语义层面上的无监督匹配。这种思想可以追溯到Word2Vec模型,当时通过词向量技术已经能够实现词汇间的匹配。现代的大型模型则进一步扩展了这一概念,将其应用于更广泛的文本数据匹配。目前,市场上存在多种成熟的RAG模型框架,例如LangChain、Milvus、LlamaIndex和Pincone等,它们都提供了易于使用的解决方案。尽管如此,要使RAG模型达到高效准确的效果,仍有许多优化空间。事实上,RAG模型框架已经发展出多种优化版本,以适应不同的应用需求。 检索增强生成(Retrieval-Augmented Generation, RAG)技术自问世以来,已经取得了显著的发展。它超越了传统的语义匹配,通过集成如’重写’(Rewrite)和’记忆’(Memory)等模块,实现了更为丰富的功能扩展。对于对RAG技术感兴趣的研究者,推荐阅读最新的综述文章,链接为:https:##arxiv.org/pdf/2312.10997。

从应用的视角审视RAG,其实质是一种检索技术,它借助大型语言模型在语义层面上进行更为深入的检索。即便我们尚未掌握如何构建嵌入(Embedding)或缺乏向量数据库等资源,依然可以有效地进行信息检索。传统的关键词匹配方法,通过计算文本间的相似度,同样能够实现检索的目的。

因此,RAG并非检索技术的唯一解决方案。在资源受限的情况下,我们可以根据具体应用场景,选择最合适的检索策略,贯彻RAG的核心思想——在输入中融入更多信息。

接下来,我将详细阐述“我们应该增加哪些信息?”这一问题。

4.2节提供了一个Few-shot示例,用以展示如何在少量样本的情况下,通过增加特定信息来提升检索效果。 Few-shot学习是无监督学习领域中的一项基础技术,它通过提供少量示例来增强模型的学习能力。与一次性提问的方法不同,One-shot学习提供了一个示例,而Few-shot学习则提供了多个示例,这有助于在不经过特定训练的情况下,提高模型的准确度和鲁棒性。在众多大型模型的研究论文中,我们可以看到这种示例提供方法的比较,它在多种任务中均展现出了更优越的性能。 在Few-shot学习中,模型倾向于依赖提供的示例进行回答,这可能会限制其自主思考的能力。为了提高模型的智能表现,关键在于提供“少而精”的示例。通过减少示例的数量,同时提升其质量,可以降低模型对示例的过度依赖,从而激发其内在的智能潜力。此外,利用“RAG”(Retrieval-Augmented Generation)技术,通过检索增强的方式,模型能够更准确地找到与任务相关的信息,从而提高对任务的理解深度和执行效率。

在增强模型的“记忆”方面,可以通过引入“历史记录”来弥补大模型在知识整合和长期记忆方面的不足。人类的大脑能够不断整合新知识,形成长期记忆,这对于我们的思考和决策至关重要。在对话中,短期记忆指的是对话中的即时上下文,而长期记忆则涉及历史对话内容。适当地调用这些记忆,可以为当前对话提供必要的背景信息,帮助模型更好地理解任务并作出更优的响应。通过打破传统上下文长度的限制,模型不仅在特定任务中表现更佳,还能在长期发展中不断进步,利用历史对话内容来提升自身的智能水平。

例如,在上图的例子中,当大模型进行电影推荐任务时,会调取历史记忆,确定用户倾向的电影类型和看电影的时间,这些信息会在模型推理的过程中被加入到输入中,以此推荐出更符合预期的结果。

在人工智能领域,‘RAG’技术的应用使得模型能够跨越不同的任务和时间周期,从记忆库中动态提取相关信息,实现知识间的互联互通。这种技术在通用知识领域和专业领域都显示出巨大的潜力。特别是在专业领域,通过历史数据的积累,可以减少对人工整理专业知识的依赖,同时提升模型对专业概念和术语的理解能力。随着模型在实际使用中的不断学习和进化,其对专业知识的掌握将日益深入,这正是许多研究论文中提到的模型通过长期记忆实现自我进化的概念。

在构建智能代理(Agent)的过程中,‘记忆’作为核心推理模块,发挥着至关重要的作用。记忆管理框架,如MemGPT,已经在工业界得到广泛应用,并催生了许多创新的记忆框架。例如,俄亥俄州立大学和斯坦福大学的研究人员提出了一项创新研究,旨在使人工智能具备类似于人类海马体的’记忆大脑’。该研究从神经科学的角度出发,设计了HippoRAG模型,模仿海马体在大脑长期记忆中的功能,以实现高效的知识整合和检索。 该系统通过大型语言模型对信息进行处理,并借助知识图谱作为其“记忆索引”。在接收到查询请求时,系统首先识别出查询中的关键概念,随后利用“个性化PageRank”算法在知识图谱上进行概念扩展和检索,以模拟大脑海马体的联想记忆功能。最终,系统依据节点的权重对相关文本进行排序,实现“模式补全”,从而在多跳问答等需要综合知识的复杂任务上,显著提高了性能。 在专业领域中,大型人工智能模型虽然在广泛知识方面表现出色,但在特定领域的深度知识掌握上仍有所欠缺。这在工业应用中尤为明显,因为需要模型能够理解并运用专业领域的知识和方法来保证应用的稳定性和有效性。以测试领域为例,我们在过去一年中尝试将大型模型应用于辅助测试人员的工作,如编写和校验测试用例。要实现这一目标,模型必须掌握包括测试用例的校验标准、常用测试策略、设计方法以及相关的业务知识等专业领域知识。为了使模型具备这些能力,我们与领域专家合作,对测试领域的专业知识进行了系统的整理和管理,这是确保模型在专业领域应用成功的关键步骤。 在专业领域中,知识与任务紧密相连。以“用例检查”为例,我们的目标是通过检查用例来识别潜在问题,减少因用例不当导致的测试遗漏。我们从目标出发,对测试遗漏进行深入分析,确定检查点,并结合用例的实际情况和专业知识,对问题进行定义和梳理。通过明确问题定义,我们使大型模型更好地适应专业领域的需求。

除了对专业知识进行整理外,我们也希望动态地丰富这些信息。利用RAG方法,结合具体任务,从知识库中动态引入必要的知识。例如,当用户输入中包含专业术语或业务概念时,我们需要识别这些词汇,并提供相应的解释和补充。这可能需要使用“插件”来实现,关于“插件”的详细信息将在后续的“Agent”相关文章中进一步阐述。

无论是静态知识还是动态知识,关键在于通过专业知识的整理,弥补大型模型在专业领域上的不足。我们需要将“专业知识”转化为“通用知识”,以便让大型模型更好地应对专业领域的挑战。这一过程通常需要领域专家的参与和对知识的人工整理,这是决定大型模型效果的关键因素之一。 在本章节中,我们深入探讨了如何通过增加信息来提高模型的性能。首先,我们讨论了两种增加信息的方法:一是利用RAG技术或检索系统来获取额外信息;二是引入示例、历史记录和专业知识等不同类型的信息。通过这些方法,我们不仅在输入层面对模型进行了优化,还为模型的推理能力打下了基础。 接下来,我们重点讨论了如何提升模型的推理能力。在2022年Google发表的一篇论文中,提出了一种名为思维链(Chain of Thought)的推理方法。这种方法通过将复杂问题拆解为多个子问题,并逐步进行逻辑推理,从而显著提高了大模型的解决问题的能力。 与常规的Prompt方法不同,Prompt方法通常采用直接从输入到输出的简单模式,即“输入 ——> 输出”。而CoT技术则引入了一种新的处理流程,它通过构建思维链,将输入信息转化为逻辑推理过程,最终生成输出结果,即“输入 ——> 推理链 ——> 输出”。自从CoT技术被提出以来,众多研究已经证明了其在各种逻辑推理任务上的有效性。根据下图所示,我们可以观察到,CoT技术相较于传统Prompt方法,在所有推理任务上都实现了显著的性能提升。 本文探讨了不同模式下CoT(Chain of Thought)的实现方法。在**零样本学习(Zero-Shot)情况下,模型仅需简单的提示,如“让我们一步步来思考”,便能逐步进行思考过程。而少样本学习(Few-Shot)则进一步,在提问时引入分步思考的概念,并提供示例,指导模型如何进行分步思考。至于代理(Agent)**模式,它通过任务拆分和多轮对话,将CoT嵌入到整个建模过程中,实现更全面的CoT。

文章指出,CoT的构建主要是线性的,即任务被线性分解并按顺序执行。但随着研究的深入,CoT的表现形式已不仅限于线性,还发展出了树状、表格和图形等多种形态。代表性的研究包括PoT、Tab-CoT、ToT和GoT-Rationale等。文中的图表清晰地展示了这些方法的异同点。 CoT(Chain of Thought)是一种将复杂问题分解为多个简单子问题以提高问题解决效率和准确性的方法。在人工智能领域,CoT不仅是一种推理技巧,更是一种建模策略。它强调在面对复杂任务时,不仅要对输入数据进行优化,更要在任务层面进行细致的分解,通过CoT的策略来构建模型。 以撰写文章为例,我们可以采取两种不同的方法:第一种是直接将输入信息转化为文章输出;第二种则是将任务分解为多个步骤,如先输出文章大纲,再逐步完善大纲内容,根据反馈进行调整,最终形成完整的文章。这种方法虽然看似简单,但能够有效提升文章的质量和逻辑性。 在实际应用中,例如帮助测试工程师编写测试用例的场景,如果直接将需求作为输入,让模型生成测试用例,可能会因为需求的复杂性和不确定性而影响结果。采用CoT的思想,将任务分解,例如先分析需求,提取关键点,再设计测试用例,可以显著提高测试用例的质量和覆盖率。 在面对一项复杂的任务时,我们可以将其分解为若干个阶段,这不仅有助于我们更好地理解和掌握任务的全貌,而且能够使我们更加高效地推进任务的完成。首先,我们需要对任务的需求进行深入的分析,明确需求中的关键点以及可能的测试对象。接着,基于这些需求点,我们可以设计出相应的用例,构建用例集的结构,并为每条用例确定测试点,即用例的标题。最后,我们根据需求和标题,详细编写用例的执行步骤和预期结果。通过这样的分阶段处理,我们能够从研发和应用两个角度出发,提高任务的完成质量和效率。

从研发的角度来看,将任务分解为多个阶段,有助于我们快速识别出相对简单的部分,从而作为切入点,避免一开始就陷入复杂的需求分析中。例如,在需求分析阶段可能较为困难,而编写测试用例的步骤则相对简单,我们可以优先从这些简单部分入手,快速实现任务的初步应用。这种思路不仅适用于当前任务,同样适用于其他类型的任务,如文章编写,其中输出大纲和调整内容显然更为简单,我们可以先从这些部分开始,以加快任务的进展。

从应用的角度来看,尽管大型模型展现出了强大的能力,但其在实际应用中也存在一定的局限性。越来越多的人开始认识到,人机协同(copilot)可能是更有效的应用方式。人机协同是一个共同参与的过程,如果模型只是简单地完成整个任务,那么人类的参与度就会大大降低。而当我们将任务拆分成多个子任务后,每个子任务都可以与人类协同完成。例如,在用例生成过程中,人类可以先对需求进行分析,然后让模型进行用例设计,通过这种人机协作的方式,可以更快速地实现模型的应用落地。

在Prompt调试的过程中,我们可以通过一些附加技巧来进一步优化模型的输出。例如,通过调整模型的参数,如温度(Temperature)和Top-P,我们可以控制模型输出的确定性。温度参数影响生成文本的随机性和多样性,当温度较低时,模型倾向于选择概率较高的词,生成的文本质量可能较高但多样性较低;而当温度较高时,模型的随机性增加,生成的文本多样性更高,但质量可能有所下降。通过合理调整这些参数,我们可以在保证文本质量的同时,增加输出的多样性。 在自然语言处理领域,‘Top-p’是一种用于控制语言模型生成文本的策略,它通过累积概率来筛选候选词汇。具体操作是,模型首先根据词汇出现的可能概率进行排序,然后选择一个词汇集合,这个集合的累积概率要达到或超过给定的阈值p。如果p值接近1,意味着模型会考虑几乎所有可能的词汇,这样生成的文本会具有很高的随机性和多样性。相反,如果p值较小,模型则只选择那些概率较高的词汇,这会减少文本的随机性,但可能提高输出的准确性和质量。如果p值过低,模型可能会过于谨慎,导致生成的文本缺乏变化,显得单调。

举个例子,假设有一个语言模型正在预测句子中缺失的词。给定的句子是’我喜欢吃苹果和____’,模型可能会根据概率给出不同的候选词:‘香蕉’有0.4的概率,‘橙子’和’鸭梨’各有0.2的概率,而’白菜’和’萝卜’则分别有0.1的概率。 在自然语言处理领域,模型的输出质量往往受到多种因素的制约,其中Top-P和Temperature是两个关键参数。Top-P参数通过限制概率的累积和来控制词汇的多样性,例如,当设置Top-P为0.8时,模型会倾向于选择概率较高的词汇,如“香蕉”、“橙子”和“鸭梨”,而避免选择会使总概率超过0.8的“白菜”。一旦词汇选择完成,模型将根据调整后的概率分布进行随机选择,例如,50%的概率选择“香蕉”,其余词汇各占25%。此外,Temperature参数进一步影响这一过程,调整输出的随机性与确定性。通过调整这两个参数,我们可以根据不同的应用需求,获得更加稳定或多样化的模型输出。 在Prompt工程中,优化Prompt以提高模型性能是一个重要的研究方向。大型语言模型不仅可以对现有的Prompt进行改进,还能自动发现新的Prompt语句,以提高模型的通用性和效果。例如,谷歌通过优化Prompt语句,使得GSM8K的性能从71.8%显著提升至80.2%。这一领域的研究正在快速发展,涌现出多种算法。其中,APE算法以其经典性而受到广泛关注,其核心策略是在候选Prompt中筛选出表现较好的,然后在这些Prompt的邻近区域进行探索性搜索,通过模拟蒙特卡洛搜索过程,不断优化以获得最佳的Prompt。 这些方法和算法的不断进步,为提升大型语言模型的实用性和灵活性提供了强有力的支持。

APO 算法则是引入了 “梯度下降” 的方法,通过训练集得到当前 Prompt 的梯度,在应用“梯度下降”的方式得到新的 Prompt,最后与 APE 一样进行采样,得到最终的 Prompt。

OPRO 算法则是更复杂的利用 LLMs 作为优化器。与传统的迭代优化技术不同,OPRO 采用自然语言描述和指引优化任务,通过 LLMs 的指导,结合先前找到的解决方案,不断生成更新的策略。

本文旨在系统性地梳理Prompt工程的相关工作,结合研发经验,提出一套通用框架,并对Prompt工程进行总结。尽管本文未深入讨论各种技巧,但特别强调了三个关键方法:自我一致性、反思和知识生成,它们在实践中对提升模型输出的准确性具有显著作用。自我一致性通过多次模型输出选择重复答案来增强果的可靠性;反思则是让模型评估自身输出,以获得更优结果;知识生成则是让模型生成相关问题的知识,进而提出问题,以提高回答的准确率。这些方法若有机会将在后续文章中详细介绍。同时,本文也介绍了Prompt调试的方法和常用指标,包括分类问题和生成问题的评估指标,如准确率、精确率、召回率、F1 Score、BLEU、METEOR、困惑度和采纳率等。此外,还提及了专项任务的数据集准备和评估方法,以及通用NLP能力的开源数据集,如GLUE Benchmark、SuperGLUE Benchmark、SQuAD等英文数据集,以及ChineseGLUE、LCQMC等中文数据集。这些数据集为模型的调试和评估提供了重要支持。最后,文章强调了Prompt工程的重要性,并鼓励大家学习和传播Prompt Engineering Guid知识库,以促进AI技术的发展。 本文基于作者刘琮玮的研发经验,系统性地梳理了“Prompt工程”的标准化流程,旨在帮助读者从基础到精通,完成Prompt的构建与优化。文章通过五个步骤,即“第2节至第6节”的详细阐述,指导读者如何构建有效的Prompt:首先,利用Prompt模板快速生成初版;其次,细化模板内容,优化格式;接着,通过RAG技术丰富信息,提升模型的few-shot学习能力和专业知识;然后,应用CoT技术加强模型的推理能力;最后,运用多种技巧持续优化Prompt。作者强调,Prompt在大型模型工程中的重要性,它不仅是模型工程师的必备技能,也是确保模型稳定、可扩展的关键。文章还展望了Prompt工程的未来,计划深入探讨模型推理技术,特别是Agent技术,并分析LangChain、Dify等推理框架,以及Agent框架的应用实践,以期为读者提供更深入的技术见解和实践指导。