AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


小白学大模型:提示词工程与Agent
发布日期:2024-10-23 17:45:18 浏览次数: 1647 来源:Coggle数据科学


Prompt是大模型的输入,用来指导生成式人工智能的输出。本文提出了33个词汇术语的全面词汇表,58种纯文本提示技术的分类法,以及其他模态的40种技术。

The Prompt Report: A Systematic Survey of Prompting Techniques

https://arxiv.org/pdf/2406.06608

大模型通常依赖用户提供的输入“提示”(prompt)来生成输出。提示可能是文本形式的——“写一首关于树的诗。” 或者采取其他形式:图像、音频、视频或它们的组合。自然语言提示的能力使得这些模型易于交互,并能在广泛的用例中灵活使用。

有效地构建、评估和执行与提示相关的其他任务对于使用这些模型至关重要。实证研究表明,更好的提示可以在广泛的任务中带来改进的结果。

unsetunset什么是提示(Prompt)?unsetunset

提示是输入给生成式人工智能(Generative AI)模型的指令,用于指导模型的输出。提示可以由文本、图像、声音或其他媒体组成。一些提示的例子包括:“为会计公司的营销活动写一个三段式的电子邮件”,一张桌子上放着东西的照片,附带文本“描述桌子上的所有东西”,或者一段在线会议的录音,附带指示“总结这个会议”。

提示模板(Prompt Template)

提示通常是通过提示模板构建的。提示模板是一个包含一个或多个变量的函数,这些变量将被某些媒体(通常是文本)替换,以创建一个提示。然后,这个提示可以被认为是模板的一个实例。

考虑将提示应用于推文的二元分类任务。这里有一个初始的提示模板,可以用来对输入进行分类。

将推文分类为积极或消极:{TWEET}

数据集中的每个推文都将被插入到模板的一个单独实例中,然后将产生的提示交给大型语言模型(LLM)进行推断。

写一首关于树的诗。

写一首关于以下主题的诗:{USER_INPUT}

提示的组成部分

提示中包含多种常见的组成部分。我们总结了最常用的组成部分,并讨论了它们如何适应提示。

  • 指令(Directive):许多提示以指令或问题的形式发出指令。这是提示的核心意图,有时简称为“意图”。
  • 示例(Examples):示例,也称为范例或射击,作为演示,指导GenAI完成任务。上述提示是一个一次性提示(即一个示例)。
  • 输出格式化(Output Formatting):通常希望GenAI以某些格式输出信息,例如CSV或Markdown格式。
  • 风格指令(Style Instructions):风格指令是一种输出格式化,用于修改输出的风格而不是结构。
  • 角色(Role):角色,也称为人物,是一个经常讨论的组成部分,可以改进写作和风格文本。
  • 额外信息(Additional Information):通常需要在提示中包含额外的信息。例如,如果指令是写一封电子邮件,你可能会包括你的姓名和职位等信息,

提示术语

提示领域的术语正在快速发展。目前,许多定义理解不足(例如提示、提示工程)和相互冲突的定义(例如角色提示与人物提示)。缺乏一致的词汇妨碍了社区清晰描述各种提示技术的能力。

  • 提示(Prompting):提示是向GenAI提供提示的过程,然后GenAI生成响应。例如,发送一段文本或上传图像的行为构成了提示。

  • 提示链(Prompt Chain):由两个或更多的提示模板连续使用组成。第一个提示模板生成的提示的输出用于参数化第二个模板,直到所有模板都耗尽为止。

  • 提示技术(Prompting Technique):提示技术是一个蓝图,描述了如何构建一个提示、提示或多个提示的动态序列。提示技术可能包含条件或分支逻辑、并行性或跨越多个提示的其他架构考虑。

  • 提示工程(Prompt Engineering):提示工程是通过修改或更改所使用的提示技术来开发提示的迭代过程。

  • 提示工程技术(Prompt Engineering Technique):迭代改进提示的策略。通常是自动化技术,但在消费者设置中,用户通常手动执行提示工程。

  • 范例(Exemplar):在提示中向模型展示的任务完成示例。

unsetunset常见的「提示词」技术unsetunset

上下文学习(In-Context Learning, ICL)

ICL指的是大模型通过在提示中提供范例和/或相关指令来学习技能和任务的能力,无需权重更新/重新训练。这些技能可以从范例和/或指令中学习。

与此相比,相比少样本提示(Few-Shot Prompting)仅用几个例子(范例)学习完成任务。为提示选择范例是一项困难的任务——性能在很大程度上取决于范例的各种因素,而且只有有限数量的范例适合典型的LLM的上下文窗口。这些决策对输出质量有重要影响:

  • 范例的顺序影响模型行为
  • 提示中范例标签的分布影响行为
  • 范例的格式也影响性能
  • 选择与测试样本相似的范例

思维推理

思维链(Chain-of-Thought, CoT)

思维链(Chain-of-Thought, CoT)提示利用少样本提示鼓励LLM在给出最终答案之前表达其思维过程。

最直接版本的CoT不包含范例。它涉及在提示中添加一个诱发思考的短语,

  • 退一步提示(Step-Back Prompting)是CoT的修改版,其中LLM首先被问到一个关于相关概念或事实的通用、高层次的问题,然后再进行推理。
  • 类比提示(Analogical Prompting)与SG-ICL类似,自动生成包含思维链的范例。它在数学推理和代码生成任务中显示出改进。
  • 思路线索(Thread-of-Thought, ThoT)提示由一个改进的思维引导短语组成,用于CoT推理。它不是使用“Let’s think step by step”,而是使用“Walk me through this context in manageable parts step by step, summarizing and analyzing as we go.”

少样本思维链(Few-Shot CoT)

  • 对比思维链提示(Contrastive CoT Prompting)在思维链提示中添加了带有正确和错误解释的范例,以向LLM展示如何不进行推理。这种方法在算术推理和事实问答等领域显示出显著改进。
  • 不确定性导向的思维链提示(Uncertainty-Routed CoT Prompting)采样多个思维链推理路径,然后如果多数超过某个阈值(根据验证数据计算),则选择多数。
  • 基于复杂度的提示(Complexity-based Prompting)涉及对思维链的两个主要修改。首先,它根据问题长度或所需的推理步骤等因素选择复杂的范例进行注释和包含在提示中。
  • 主动提示(Active Prompting)从一些训练问题/范例开始,要求LLM解决它们,然后计算不确定性(这种情况下的不一致性),并要求人工注释者重写最不确定的范例。
  • 记忆思维链提示(Memory-of-Thought Prompting)利用未标记的训练范例在测试时构建少样本思维链提示。在测试之前,它对未标记的训练范例进行思维链推理。
  • 自动思维链(Auto-CoT)提示使用零样本提示自动生成思维链。然后这些被用来为测试样本构建少样本思维链提示。

思维分解

将复杂问题分解为更简单的子问题上。这是人类以及大模型的有效问题解决策略。

  • 由少到多提示(Least-to-Most Prompting)首先提示LLM将给定问题分解为子问题而不解决它们。然后,它依次解决这些子问题,每次将模型响应附加到提示中,直到得出最终结果。
  • 分解提示(DECOMP)通过少样本提示LLM展示如何使用某些功能。这些可能包括字符串分割或互联网搜索;这些通常实现为单独的LLM调用。
  • 计划和解决提示(Plan-and-Solve Prompting)由改进的零样本CoT提示组成,“让我们首先理解问题并制定解决计划。
  • 思维树(Tree-of-Thought, ToT),也称为思维树,通过从初始问题开始然后以思维(如CoT)的形式生成多个可能的步骤来创建类似树的搜索问题。
  • 思维递归(Recursion-of-Thought)与常规CoT类似。然而,每当它在推理链中遇到一个复杂问题时,它会将这个问题发送到另一个提示/LLM调用中。完成后,答案被插入原始提示中。
  • 思维程序(Program-of-Thoughts)使用像Codex这样的LLM生成编程代码作为推理步骤。代码解释器执行这些步骤以获得最终答案。它在数学和编程相关任务中表现出色,但在语义推理任务中效果较差。

批评与反思

在创建大模型系统时,让LLM批评自己的输出可能是有用的。这可以是一个简单的判断(例如,这个输出正确吗),或者LLM可以被提示提供反馈,然后这些反馈被用来改进答案。已经开发了许多生成和整合自我批评的方法。

  • 自我校准(Self-Calibration)首先提示LLM回答一个问题。然后,它构建一个新的提示,包括问题、LLM的答案以及一个额外的指示,询问答案是否正确。这在应用LLM时衡量信心水平很有用,可以帮助决定何时接受或修改原始答案。
  • 自我改进(Self-Refine)是一个迭代框架,给定LLM的初始答案,它提示同一个LLM对答案提供反馈,然后提示LLM根据反馈改进答案。这个迭代过程一直持续到满足停止条件(例如,达到最大步数)。自我改进在一系列推理、编码和生成任务中显示出改进。
  • 逆向思维链(Reversing Chain-of-Thought, RCoT)首先提示LLM根据生成的答案重建问题。然后,它生成原始问题和重建问题之间的细粒度比较,作为检查任何不一致性的方法。这些不一致性然后被转换为LLM修订生成答案的反馈。
  • 自我验证(Self-Verification)使用思维链(Chain-of-Thought, CoT)生成多个候选解决方案。然后它通过掩盖原始问题的某些部分,并要求LLM根据问题的其余部分和生成的解决方案来预测它们,来对每个解决方案进行评分。这种方法在八个推理数据集上显示出改进。
  • 思维链验证(Chain-of-Verification, COVE)首先使用LLM为给定问题生成答案。然后,它创建一个相关的问题列表,这些问题将有助于验证答案的正确性。每个问题都由LLM回答,然后将所有信息提供给LLM以产生最终修订的答案。这种方法在各种问答和文本生成任务中显示出改进。
  • 累积推理(Cumulative Reasoning)首先生成多个潜在的步骤来回答这个问题。然后它有一个LLM评估它们,决定接受或拒绝这些步骤。最后,它检查是否已经得出最终答案。如果是这样,它终止该过程,否则它重复该过程。这种方法在逻辑推理任务和数学问题上显示出改进。

自动提示工程

除了调查提示技术外,我们还回顾了用于自动优化提示的提示工程技术。我们讨论了一些使用梯度更新的技术,因为提示工程技术的集合比提示技术的集合要小得多。

  • 元提示(Meta Prompting)是提示LLM生成或改进提示或提示模板的过程。
  • AutoPrompt使用一个冻结的LLM以及一个包含一些“触发令牌”的提示模板,这些令牌的值在训练时通过反向传播更新。这是软提示的一个版本。
  • 自动提示工程师(Automatic Prompt Engineer, APE)使用一组范例来生成零样本指令提示。它生成多个可能的提示,对它们进行评分,然后创建最佳提示的变体(例如,通过提示改写)。它迭代这个过程,直到达到某些期望。
  • 无梯度指令提示搜索(Gradient-free Instructional Prompt Search, GrIPS)与APE类似,但使用更复杂的操作集,包括删除、添加、交换和改写,以创建起始提示的变体。

unsetunsetAgent与外部工具unsetunset

Agents

随着LLMs的能力迅速提高,公司和研究人员探索了如何让它们利用外部系统。这主要是因为LLMs在数学计算、推理和事实性方面的不足。这推动了提示技术的显著创新;这些系统通常由提示和提示链驱动,这些提示和提示链经过精心设计,以允许类似代理的行为。

在GenAI的背景下,我们定义代理为通过与GenAI本身之外的系统交互来实现用户目标的GenAI系统。这个GenAI通常是LLM。作为一个简单的例子,考虑一个被赋予解决以下数学问题的任务的LLM:

如果Annie有4,939颗葡萄,并且把其中39%精确地给了Amy,她还剩下多少?

如果得到适当的提示,LLM可以输出字符串CALC(4,939*.39)。这个输出可以被提取并放入计算器中以获得最终答案。这是一个代理的例子:LLM输出文本,然后使用下游工具。

工具使用代理(Tool Use Agents)

工具使用是GenAI代理的一个关键组成部分。符号工具(例如计算器、代码解释器)和神经工具(例如单独的LLM)通常被使用。工具有时被称为专家或模块。

代码生成代理(Code-Generation Agents)

程序辅助语言模型(Program-aided Language Model, PAL)直接将问题翻译成代码,这些代码被发送到Python解释器以生成答案。

工具集成推理代理(Tool-Integrated Reasoning Agent, ToRA)与PAL类似,但它不是单一的代码生成步骤,而是在解决问题所需的时间内交错代码和推理步骤。

TaskWeaver与PAL类似,将用户请求转换为代码,但也可以利用用户定义的插件。

基于观察的代理(Observation-Based Agents)

一些代理被设计为通过与玩具环境交互来解决问题。这些基于观察的代理在其提示中接收插入的观察结果。

推理和行动(Reasoning and Acting, ReAct)在给定问题时生成一个想法,采取行动,并接收观察结果(并重复此过程)。所有这些信息都插入到提示中,因此它具有过去的想法、行动和观察的记忆。

Reflexion在ReAct的基础上增加了一层自省。它获得一系列行动和观察结果,然后给出成功/失败的评估。然后,它生成对其行为和出错原因的反思。这种反思被添加到其提示中作为工作记忆,然后重复该过程。

终身学习代理(Lifelong Learning Agents)

LLM集成的Minecraft代理的工作产生了令人印象深刻的结果,代理能够在这个世界开放的视频游戏中导航时获得新技能。我们不仅将这些代理视为将代理技术应用于Minecraft,而是将它们视为可以在需要终身学习的真实世界任务中探索的新型代理框架。

Voyager由三部分组成。首先,它为自己提出任务以更多地了解世界。其次,它生成代码来执行这些行动。最后,它将这些行动保存起来,以便在有用时检索,作为长期记忆系统的一部分。这个系统可以应用于需要代理探索和与工具或网站交互的真实世界任务(例如渗透测试、可用性测试)。

Ghost in the Minecraft(GITM)从任意目标开始,递归地将其分解为子目标,然后通过产生结构化文本(例如"equip(sword)")而不是编写代码来迭代规划和执行行动。GITM使用Minecraft项目的外部知识库来协助分解,并拥有过去经验的记忆。

检索增强生成(Retrieval Augmented Generation, RAG)

RAG是一种从外部源检索信息并将其插入提示中的范式。这可以增强知识密集型任务的性能。当检索本身被用作外部工具时,RAG系统被视为代理。

验证和编辑(Verify-and-Edit)通过生成多个思维链,然后选择一些进行编辑来改进自一致性。他们通过检索相关(外部)信息来做到这一点。

unsetunset提示词方法评测unsetunset

我们使用相同的通用提示模板对六种不同的提示技术进行基准测试。这个模板显示了提示的不同组件的位置。每个提示中只有基础指令和问题。基础指令是一个短语,如“解决问题并返回(A),(B),(C)或(D)。

零样本作为基线,我们直接通过模型运行问题,不使用任何提示技术。对于这个基线,我们使用了两种格式以及三种措辞变化的基础指令。因此,在这个基准测试中,有六种方式通过2800个问题。这没有包括任何范例或思维引导器。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询