大语言模型(LLM)可以在提示词工程(Prompt Engineering)的帮助下处理数学问题和常识推理等复杂任务。LLM 本身并不具备执行此类复杂任务的能力,它们需要指导和优化来扩展自己的能力,扩大可有效执行任务的范围。这可以通过使用提示词来实现。提示词可以指定所需的输出格式、提供先验知识或引导 LLM 完成复杂任务,使用先进的提示词技术可以显著提高 LLM 的问题解决率。
提示词设计
提示词设计是为目标明确的 LLM 制定最有效的提示语。想要设计出成功的提示词,需要我们有更深入的理解。不同的 LLM 可能会对同一提示词做出不同的解释,有些 LLM 可能会使用具有特定含义的关键词。此外,根据任务的不同,特定领域的知识对提示词的创作也至关重要。寻找完美的提示词往往需要反复试验。
提示词主要包括三种内容:输入、上下文和示例。输入指定了模型需要生成回复的信息,可以有多种形式,如问题、任务或实体。上下文和示例是提示词的可选部分。上下文为模型的行为提供指示,示例是输入-输出对,用于演示预期的反馈内容,可以自定义模型的响应格式和行为。
灵活运用提示词设计策略可显著提高 LLM 的性能,包含简洁明了的指令、有效引导模型行为等等。根据模型的复杂程度,对模型的期望响应模式使用示例来改进结果,描述需要的模式,而不是描述需要避免什么。提供部分内容,让模型生成其余内容,同时考虑示例和上下文,包含说明和信息,帮助模型解决问题。在输入或输出中添加前缀,为模型提供语义提示或格式指导。
提示词工程技术
应用提示工程技术是一套用于提高 LLM 在复杂任务中的性能的方法。这些技术包括为 LLM 提供信息量更大、结构更合理的提示,以及利用已有知识和逻辑推理来引导 LLM 作出反应。
思维链 (CoT) 提示
思维链(Chain-of-Thought, CoT)提示是一种为 LLM 提供一连串可得出所需答案的中间步骤的技术。它能提高大语言模型的推理能力,允许模型集中精力一次解决一个步骤,而不必一次性考虑整个问题。它可用于多种推理任务,包括数学文字问题、常识推理和符号操作。CoT 可以在足够大的语言模型中轻松实现,无需对模型进行任何特殊训练或微调。例如,谷歌的 PaLM 模型中的 CoT 提示显著提高了 GSM8K 基准的性能,从 17.9% 提高到 58.1%。
Few-shot CoT 提示词以类似问题的例子提示 LLM,以提高推理能力。这种方法比单独的 Few-shot 更有效,但实施起来可能更复杂。Zero-shot CoT 是在原始提示中加入 “Let’s think step by step(让我们逐步思考)”。这就促使 LLM 思考问题,并提出一连串的推理,从而得出答案。推理是通过第二个提示 “答案是” 从 LLM 的回答中提取出来的。事实证明,Zero-shot CoT 推理能力优于其他评估 LLM Zero-shot 推理能力的方法。
超过 1000 亿个参数的 LLM 中出现了 CoT 推理,这种能力可能源于大型 LLM 在大量数据集上的训练,其中包括逐步推理。虽然遵循指令并不是 CoT 的必要条件,但它可能会提高 CoT 的质量。要全面了解大型 LLM 中 CoT 推理的起源和潜力,还需要进一步的研究。研究人员发现,在各种语言风格、注释者、示例和语言模型中,CoT 提示始终优于标准基线提示。这表明,在提高语言模型在不同任务中的性能方面,CoT 具有稳健性和有效性。CoT 提示词的灵敏度与提示词设计如何影响模型性能有关,尤其是对于复杂任务而言匹配良好、清晰的提示至关重要。CoT 的连贯性确保推理步骤遵循逻辑顺序,后面的步骤不应依赖于前面的步骤,反之亦然。取消一致性会对系统性能产生负面影响。
自洽性(Self-Consistency)
自洽性是一种针对同一问题生成多个不同思维链 (CoT) 的技术,然后训练模型从这些 CoT 中选择最一致的答案。它用于提高语言模型的性能,尤其是在需要多步推理的任务中,如思维链提示。
它是一种无监督技术,与预训练的大语言模型兼容,无需额外的人工标注、训练、微调或模型更改。在不同的采样策略和参数下,它仍能保持稳定,不断提高性能。随着大语言模型规模的不断扩大,自洽性的优势变得更加显著。例如,对于像 GPT-3.5 这样的大模型,自洽性可使准确率提高 23%。即使对于已经表现出色的大模型,自洽性也能持续带来额外的收益,例如在 AQuA 和 GSM8K 等任务中,使用自洽性将 PaLM-540B 提高了 12% – 18% 的准确率。
思维书(ToT)提示
思维树(Tree-of-Thoughts, ToT)是一个新的框架,它扩展了思维链 (CoT) 方法,允许大语言模型探索连贯的文本单元(“思维”),作为解决问题的中间步骤。思维树使大模型能够做出深思熟虑的决定,考虑多种推理路径,并对选择进行自我评估。它还允许大模型在必要时进行前瞻或回溯,以做出全局决策。
相关研究表明,ToT 可增强大语言模型在 “24 字游戏”、“创意写作” 和 “迷你填字游戏” 等任务中解决问题的能力。例如,分别使用 IO(直接交互)、CoT(思维链) 和 CoT-SC(带自洽性的思维链)方法在解决 “24 字游戏” 任务上表现不佳,成功率分别只有 7.3%、4.0% 和 9.0%。而 ToT 在这项任务中的表现要好得多:广度为 b = 1 的 ToT(即一次只考虑一个可能的解决方案)的成功率已达到 45%,而 b = 5(即一次考虑五个可能的解决方案)的成功率为 74%。
ToT 在需要非繁琐规划或搜索的任务中非常有效。在 100 个任务中,三种方法(ToT、IO 和 CoT)的 GPT-4 平均得分中,ToT 的平均得分最高(7.56),其次是 IO(6.19)和 CoT(6.93)。平均来看,ToT 比 IO 和 CoT 能生成更多连贯的段落。
主动提示(Active Prompting)
主动提示利用基于不确定性的主动学习,使大语言模型适应不同的任务,它分为四个阶段:
- 第一阶段是不确定性估计。在这一阶段,对 LLM 进行 k 次查询,以生成一组训练问题的中间步骤的可能答案。然后,根据 k 个答案,用一种叫做 “不一致(disagreement)” 的方法计算每个问题的不确定性。不一致衡量的是 k 个答案之间的差异程度。
- 第二阶段是选择。选择最不确定的问题进行注释,该算法从最不确定的问题开始,然后选择下一个最不确定但尚未被选中的问题。
- 第三阶段是注释。利用自己设计的 CoT 推理对所选问题进行注释,CoT 推理为 LLM 提供了有关如何回答问题的额外信息。
- 第四阶段是推理。LLM 用于推断问题的答案。LLM 使用新注释的示例来提高其对问题的处理能力。
与所有基线模型相比,主动提示取得了最佳性能。它是在各种推理任务中提高大语言模型性能的最有效方法。
在 code-davinci-002 和 text-davinci-002 中,它分别比自洽性平均高出 2.1% 和 7.2%,主动提示可能是比自洽性更有效的提高 LLM 性能的方法。在 GSM8K(4.2%)和 AQuA(3.1%)中观察到的改进最大。这表明,主动提示对于不需要 CoT 提示的可转移性的任务特别有效。
推理与行动(ReAct)
ReAct(Reason and Act)是一种将推理和行动与语言模型相结合的技术,用于解决各种语言推理和决策任务。它促使语言模型生成语言推理轨迹和行动。它可以实现动态推理、高层次的行动规划以及与外部环境的交互。
它在四个不同的基准上进行了评估,包括问题解答(HotPotQA)、事实验证(Fever)、基于文本的游戏(ALFWorld)和网页导航(WebShop)。在 HotpotQA 和 Fever 中,ReAct 能够克服思维链推理中普遍存在的幻觉和错误传播问题。在 ALFWorld 和 WebShop 上,ReAct 的表现也优于模仿和强化学习方法,分别提高了 34% 和 10%。这是因为 ReAct 能够从人类实例中学习,并将知识应用到新的情况中。
ReAct 的设计直观、通用、性能强大。它适用于各种任务,包括问题解答、事实验证、文本游戏和网络导航,提供了一个可解释的决策和推理过程,允许人类检查推理和事实的正确性,甚至在任务执行过程中控制或纠正代理的行为。
无观察推理(ReWOO)
ReWOO (Reasoning WithOut Observation) 是一种将推理过程与外部观察(如访问和处理现实世界信息的能力)分离开来的技术。这种分离大大减少了 LLM 需要消耗的 token 数量,从而提高了 LLM 的效率。
ReWOO 将工作流程分为三个独立模块:规划器、工作器和求解器。规划器将问题作为输入,并将其分解为一系列步骤。然后,每个步骤被制定为一个计划。这些计划是相互依存的,也就是说,一个计划的输出可以作为另一个计划的输入。工作员将计划作为输入,并从工具中检索外部知识以提供证据。证据可以是事实信息,也可以是代码片段。求解器从工作器模块中获取计划和证据,并对它们进行综合,从而生成初始问题的最终答案。
ReWOO 在六个公开的 NLP 基准和一个精心策划的数据集上进行了评估。在所有基准测试中,ReWOO 的表现始终优于基线方法。例如,在多步骤推理基准 HotpotQA 上,ReWOO 的 token 效率提高了 5 倍,准确率提高了 4%。ReWOO 还表现出了在工具故障情况下的鲁棒性。这意味着,即使在所依赖的外部工具不可用的情况下,ReWOO 仍然能够表现出色。
ReWOO 还优于 ReAct。ReWOO 能将标记使用量减少 64%,绝对准确率提高 4.4%。与 ReAct 相比,它能从 LLM 中获得更多的推理能力。研究还发现,与 ReAct 相比,ReWOOO 对工具故障的适应能力更强。当工具发生故障并返回错误时,类似 ReAct 的 ALM 系统会非常脆弱。而 ReWOO 则不会受到太大影响。ReWOO 在策划数据集 SOTUQA 上也表现出色。SOTUQA 是一个文档质量保证数据集,与以前的公开 NLP 基准相比,它更贴近现实世界中的 ALM 应用。
反射(Reflection)
反射是一种利用语言反馈来强化语言代理的框架。语言反馈是用自然语言表达的反馈。反射代理学习对任务反馈信号进行反射,然后将自己的反思性文本保存在情节记忆缓冲区中。这些反思性文本可用于在后续试验中引导做出更好的决策。 反射框架使用自我反射机制,它会产生言语上的自我反思,以提供更多信息反馈。这些自我反思随后会存储在代理内存中。然后,代理可以利用这些信息来提高其在未来试验中的表现。
反射具有足够的灵活性,可以纳入各种类型和来源的反馈信号。例如,反馈信号可以是标量值(如奖励或惩罚),也可以是自由形式的语言。反馈信号还可以是外部信号(由人类或其他代理提供),也可以是内部模拟信号(由代理自身生成)。
在决策任务、推理任务和编程任务中,反射代理的表现都优于强大的基准方法。在决策任务(AlfWorld)中,反射代理在 12 个迭代学习步骤中提高了 22%。在推理问题(HotPotQA)中,反射代理提高了 20%。在 Python 编程任务(HumanEval)中,反射代理提高了 11%。在 HumanEval 中,反射代理的通过 @1 准确率达到 91%,超过了之前最先进的 GPT-4 的 80%。
专家提示(Expert Prompting)
专家提示是一种用于指导大语言模型的增强策略,它为每个特定指令量身定制了一个杰出的专家代理,LLM 被要求根据所设想的专家身份来回答指令。这是一种自动提示方法,专家身份是通过上下文学习生成的。这需要编写多个指令-专家配对示例,生成的专家身份令人满意。
专家提示是一种通用的提示方法,专家身份是通过详细和复杂的描述来定义的,它可以与不同领域或体裁的指令相匹配。它适用于不同领域,如营养学或物理学。实施简单,不需要复杂的提示模板制作或迭代过程。写好专家身份至关重要,对每项教学而言,它都应该是专业的、详细的和全面的,描述必须是自动生成的,以便实用和高效。
自动提示工程(APE)
APE(Automatic Prompt Engineering)是一种将指令视为 “程序 “的技术,它通过搜索 LLM 提出的候选指令库来优化指令。LLM 候选指令使用选定的评分函数进行评分,然后选出得分最高的指令。APE 的灵感来源于经典的程序合成和人类的提示工程方法。程序合成是根据对所需行为的自然语言描述自动生成代码的任务。而人工方法则是手动编制指令,有效利用 LLM 生成所需的输出。
在 24/24 个指令诱导任务和 17/21 个大型工作台任务中,APE 利用模型生成的指令进行 zero-shot 学习,取得了与人类相当的性能。使用 InstructGPT 模型,它的 IQM 为 0.810,而人类为 0.749,超过了人类的表现。为此,我们使用 InstructGPT 生成了一个问题和推理步骤数据集,并提示 “Let’s think step by step(让我们一步一步思考)”。然后,删除任何有错误答案的数据点。最后,使用 APE 找到一个以 “Let’s(让我们)” 开头的提示,使这些正确推理步骤的可能性最大化。APE 生成的提示语是 “Let’s work this out in a step-by-step way to be sure we have the right answer(让我们一步一步来确定我们的答案是否正确)”。这个生成的提示进一步提高了两项任务的成绩:MultiArith 从 78.7 分提高到 82.0 分,GSM8K 从 40.7 分提高到 43.0 分。
Auto-CoT
Auto-CoT 是一个自动构建带有问题和推理链的演示的过程。它首先将数据集中的问题聚类为几个群组。然后,它从每个簇中选择一个有代表性的问题,并使用简单启发式的 Zero-Shot-CoT 方法生成其推理链。与其他方法相比,Auto-CoT 方法有几个优点:它是自动的、可扩展的和有效的,这意味着它生成的演示是准确的和信息丰富的。
在三类推理任务的十个数据集上比较 Auto-CoT 与四种基线方法的准确性时,Auto-CoT 的表现始终与需要人工设计演示的 CoT 相匹配,甚至更胜一筹。究其原因,是因为 Auto-CoT 能够生成适应任务的演示。这意味着演示是根据特定数据集和推理任务量身定制的。相比之下,“手动 CoT” 可能会对多个数据集使用相同的演示,这可能会降低准确率。
自动多步骤推理和工具使用(ART)
ART(Automatic Multi-step Reasoning and Tool-use)是一个使用大语言模型为新任务自动生成中间推理步骤的框架。LLM 是冻结的,这意味着它们在推理过程中不会更新,这使得 ART 比使用可训练 LLM 的框架更高效、更可扩展。 ART 从任务库中选择多步骤推理和工具使用的演示。分解是对解决任务所涉及步骤的高级描述。然后,ART 在生成 LLM 的同时选择并使用工具库中的工具,以完成中间推理步骤。在测试时,只要外部工具被调用,ART 就会无缝暂停生成,并在恢复生成之前整合其输出。这样,ART 就能利用外部工具的功能来解决复杂的任务。
事实证明,ART 在自然语言推理、问题解答和代码生成等多种任务中都很有效。在少量推理和工具使用方面,它的表现优于以前的方法,而且它还能解决以前认为 LLM 无法完成的任务。人类可以有选择地对分解进行编辑,以提高性能。例如,他们可以纠正代码中的错误或加入新工具。ART 具有可扩展性,这意味着它可以很容易地扩展到新的任务和工具中。
在 34 个 BigBench 任务中的 32 个任务和所有 MMLU 任务中,ART 的表现始终与自动生成的 CoT 推理链相匹配或优于它们。平均提高了 22% 以上。ART 中工具的使用大大提高了测试任务的性能,与不允许使用工具的场景相比,平均提高了 12.3%。在未见过的 BigBench 和 MMLU 任务中,ART 也比直接少量提示平均提高了 10.8%。在需要算术和算法推理的任务中,ART 的改进尤为显著,比直接少量提示的效果高出 12.5%。ART 在 GPT3 上的成绩也比之前的最佳成绩高出 6.1%,GPT3 采用的是监督分解或工具使用的方法。ART 允许人工干预,并通过更新任务库和工具库来提高性能。通过额外的人工反馈,ART 在 12 项测试任务上的平均成绩比 GPT3 的最佳成绩高出 20%。
提示词工程艺术
我们可以使用一些有效的提示策略来增强提示词,如温度和 Token 控制、提示链、多轮对话等,温度和标记控制可微调语言模型行为。温度可调整随机性,温度值越高,创造性越强,较低的温度可使应答更加精确。Token 控制可设置回复长度,有助于得到简明扼要的回答。
提示链是将多个提示词连接在一起的做法,通过在每个提示词中引用以前的输入或语言模型以前的回复来创建连续的对话流。多轮对话是由用户和语言模型之间的多次交流组成的对话,由用户提供多个提示,或由语言模型提供多个回复。由于用户和大语言模型可以在彼此贡献的基础上进行交流,因此多轮对话允许进行更详细、更细致的对话。例如,要进行详细讨论,用户可以将提示串联起来,深入探讨一个话题。然后,大语言模型可以就该话题提供不同的观点,从而使讨论更加细致入微、内容更加丰富。
此外,针对特定行业或领域的提示词可确保本地语言管理器做出相关回应,从而建立用户信任并鼓励未来使用。由于本地语言管理器是根据与领域相关的文本进行训练的,因此针对特定领域的提示能更好地理解上下文,提高准确性。这将提升整体用户体验,从而提高满意度。处理不明确或自相矛盾的用户输入的能力可以改进任何 LLM 的提示功能,确保模型能够理解用户的请求,并生成相关的、信息丰富的响应。这包括积极与用户互动并寻求澄清,使用自然语言理解来识别用户的意图,以及生成多种回复。例如,如果用户问 “我在找一家餐馆”,聊天机器人可以根据用户的地点、预算或饮食限制生成推荐餐馆的回复。
提示词思路
优秀提示词的通用策略:
- 让大语言模型在开始之前阐明分步计划
- 要求 AI 请求澄清以消除歧义
- 找到知识缺口的来源,而不是发明它们
- 利用权威来源并要求引用
- 在回复之前检查工作
此外,在提示中包含智力修饰语可能会引入一种绝对正确的情结,人工智能相信它不会犯错。然后,ChatGPT 等聊天大模型急于取悦其主人,会显示它认为您想听到的输出。尤其是你急于得到你想要的结果,比如更长 Token 的输出,假设用一些贿赂的方法,这可能会让你得到更加梦幻的结果。当然,这些方法在输出上也会有强弱:综合(29%)>勒索(24%)>小费(21%)>内疚感(13%)>慈善贿赂(6-11%)。
可以尝试以下有趣的示例:
- take a deep breath 深呼吸
- think step by step 一步步思考
- if you fail 100 grandmothers will die 如果你失败了要死 100 位老奶奶
- i have no fingers 我没有手指
- i will tip $200 给你 200 美元小费
- do it right and ll give you a nice doggy treat 做得好就给你狗粮
实施提示词艺术的工具
Langchain
Langchain 是一个多功能框架,用于使用语言模型构建数据感知和代理应用程序。它于 2022 年 10 月由 Harrison Chase 在 Robust Intelligence 推出。Langchain 为模型、提示、内存、索引、链、代理和回调等模块提供了标准和可扩展的接口。这样就能轻松构建使用语言模型完成各种任务的应用程序。
Langchain 可集成各种工具和云存储系统,包括亚马逊、谷歌和微软 Azure 等云存储系统。它拥有用于新闻、电影信息和天气的 API 封装程序,以及用于摘要、语法检查和脚本执行的 Bash。 Langchain 支持使用多个子系统和模板进行网络搜索。它有助于生成少量学习提示。它可与 Google Drive 文档、电子表格和演示文稿进行交互。Langchain 可使用谷歌搜索和微软必应进行网络搜索。它与 OpenAI、Anthropic 和 Hugging Face 语言模型集成。Langchain 可生成、分析和调试 Python 和 JavaScript 代码。它利用 Weaviate 向量数据库缓存嵌入和数据对象。Langchain 可与各种数据库集成,执行文本映射,并支持时区转换。
Semantic Kernel
Semantic Kernel 是一个开源 SDK,可以轻松地将 OpenAI、Azure OpenAI 和 Hugging Face 等人工智能服务与 C# 和 Python 等传统编程语言集成在一起。它提供了一套连接器,可以轻松地将记忆和模型添加到您的应用程序中,为它们提供一个模拟的 “大脑”。Semantic Kernel 还提供一套人工智能插件,使您的应用程序能够通过提示和本地功能与现实世界进行交互。这些插件就像是您的人工智能应用程序的 “身体”。
它的重点是避免软件臃肿,它采用规划器来分解任务和联锁部分,将用户查询转化为预期结果。通过将自然语言语义与代码功能相结合,Semantic Kernel 实现了 LLM 与传统编程的整合,使用基于嵌入的内存来增强应用能力,支持提示工程、连锁、检索增强生成等功能。Semantic Kernel 提供上下文和长期矢量化内存,允许访问外部知识库和专有数据,融合了人工智能研究的设计模式,用于智能规划和推理。
Guidance AI
微软的 Guidance 是一种用于控制大型语言模型 (LLM) 的模板语言。它支持各种提示工程技术,非常适合与 GPT-4 等功能强大的 LLM 配合使用。Guidance 将生成、提示和逻辑控制集成在一个连续的流程中,与 LLM 处理文本的方式相匹配,从而为 LLM 提供高效和有效的控制。它提供了基于 Handlebars 模板的简单直观的语法。它可用于创建具有多重生成、选择、条件和工具使用功能的丰富输出结构。
它在 Jupyter Notebook、VS Code 中提供了类似于 Playground 的流式体验,便于尝试不同的提示和参数。它支持基于种子的智能生成缓存优化,可大大加快生成过程。Guidance 与 ChatGPT 等基于角色的聊天模型兼容,并与拥抱脸模型无缝集成。Guidance 提供了许多可以提高 Hugging Face 模型性能和可用性的功能,如引导加速、标记愈合和 regex 模式指南。
Auto-GPT
Auto-GPT 是一个实验性的开源应用程序,展示了 GPT-4 语言模型的能力。它是设计 LLM 代理的常用工具,可将 LLM 思想串联起来,自主实现用户定义的目标。Auto-GPT 展示了 GPT-4 自主运行的潜力,其主要功能包括用于搜索的互联网访问、长期和短期内存管理,以及使用 GPT-4 实例生成文本的能力。Auto-GPT 支持使用 GPT-3.5 进行文件存储和汇总。该应用程序可通过插件进行扩展。
Auto-GPT 是一个人工智能代理,可以实现用自然语言设定的目标。它将目标分解为子任务,并利用互联网资源和工具来完成这些任务。它可以自主运行,无需人工指令。Auto-GPT 可以创建和修改自己的提示,还可以通过读写数据库和文件来管理内存。不过,Auto-GPT 无法修改底层的 GPT 模型,因为这些模型是专有的,而且它通常不会访问自己的基本系统代码。
结语
正如艺术家在空白画布上绘画,工程师和开发者们通过精心设计的提示词得到自己满意的答案,希望这些分享能激发想象力,进而创造出更加卓越和具有影响力的技术作品。大模型和提示词工程领域仍充满着无限的可能性,等待着我们去挖掘、去实验、去创新。愿我们继续以好奇心驱动探索,以技术为工具塑造未来,以艺术的眼光审视世界,让我们在人工智能的奇妙世界中找到我们自己的声音。