March 15, 2023 · 21 min · Lilian Weng

Prompt Engineering,也称为 In-Context Prompting ,指的是如何与LLM沟通以引导其行为以获得所需结果,而不更新模型权重的方法。这是一门经验性科学,提示工程方法的效果在不同模型之间可能会有很大的变化,因此需要大量的实验和启发式方法。

本文仅关注自回归语言模型的提示工程,所以不涉及Cloze测试、图像生成或多模态模型。提示工程的核心目标是对齐和模型的可控性。请查看我之前关于可控文本生成的文章

[我个人的看法] 我认为,一些提示工程的论文并不值得写8页,因为这些技巧可以用一两句话解释,其余的都是关于基准测试的内容。一个易于使用且共享的基准测试基础设施对社区来说可能更有益。设置迭代提示或使用外部工具并不是微不足道的。也不容易使整个研究社区接受它。

基本提示

零样本和少样本学习是提示模型的两种最基本方法,由许多LLM论文开创并常用于评估LLM性能。

零样本

零样本学习 是简单地将任务文本提供给模型并请求结果。

(以下情感分析的例子都来自SST-2)

文本:我打赌这个视频游戏比电影有趣得多。
情感:

少样本

少样本学习 提供了一套高质量的示范,每个示范都包含输入和期望的输出,作为目标任务。当模型首次看到好的示例时,它可以更好地理解人类的意图和对所需答案的标准。因此,少样本学习通常比零样本学习有更好的性能。但是,这增加了更多的token消耗,当输入和输出文本很长时可能会达到上下文长度限制。

文本:(劳伦斯在舞台上蹦跳)到处都是,跳舞、跑步、流汗、擦脸,总的来说,显示了他最初赢得名声的那种古怪才华。
情感:正面

文本:尽管所有的证据都与此相反,这部电影仍然设法作为一部真正的特色电影,这种电影收取全价票,并在电视上大肆宣传,声称可以娱乐小孩和成年人。
情感:负面

文本:多年来,德尼罗第一次深情地挖掘,也许是因为他被他的合作伙伴的出色表现所触动。
情感:正面

文本:我打赌这个视频游戏比电影有趣得多。
情感:

许多研究探讨了如何构造在上下文中的示例以最大化性能,并观察到提示格式、训练示例和示例的顺序选择可以导致截然不同的性能,从几乎是随机猜测到接近最新技术水平。

Zhao et al.(2021年) 研究了少样本分类的情况,并提出了与LLM(他们在实验中使用GPT-3)存在几种偏见有关的高方差:(1) 多数标签偏见 存在于示例之间的标签分布不平衡的情况;(2) 近期偏见 指的是模型可能会重复最后的标签的倾向;(3) 常见token偏见 表明LLM倾向于比稀有tokens更常产生常见tokens。为了克服这种偏见,他们提出了一种方法,当输入字符串为N/A时,校准模型输出的标签概率为均匀。

示例选择的提示

  • 使用$k$-NN聚类在嵌入空间中选择与测试示例语义相似的示例(Liu et al., 2021 )。

  • 为了选择一个多样性和有代表性的示例集,Su et al. (2022) 提议使用基于图的方法:(1)首先,基于嵌入(例如SBERT其他 嵌入 模型 )的余弦相似度构建一个有向图$G=(V, E)$,每个节点都指向其$k$个最近邻居;(2)从一个已选示例集$\mathcal{L}=\emptyset$ 和一个剩余示例集$\mathcal{U}$开始。每个示例 $u \in \mathcal{U}$ 由 $$ \text{score}(u) = \sum_{v \in \{v \mid (u, v) \in E, v\in \mathcal{U}\}} s(v)\quad\text{where }s(v)=\rho^{- \vert \{\ell \in \mathcal{L} \vert (v, \ell)\in E \}\vert},\quad\rho > 1 $$ 得分,其中$s(v)$在$v$的许多邻居被选中时较低,因此评分鼓励选择多样性的示例。

  • Rubin et al. (2022) 提议通过对比学习 训练特定于一个训练数据集的嵌入,用于在上下文中的学习示例选择。给定每对训练对 $(x, y)$,可以通过LM分配的条件概率来测量一个示例 $e_i$ (格式化的输入-输出对) 的质量:$\text{score}(e_i) = P_\text{LM}(y \mid e_i, x)$。我们可以识别出对于每个训练对的正和负集的前$k$和后$k$得分的其他示例,并用于对比学习。

  • 一些研究者尝试使用Q-学习 进行样本选择。(Zhang et al. 2022 )

  • 受基于不确定性的主动学习 的启发,Diao et al. (2023) 建议识别在多次抽样试验中存在高度分歧或熵的示例。然后对这些示例进行注释,以在少数提示中使用。

示例排序的提示

  • 一个通用的建议是保持选择的示例多样性、与测试样本相关并随机排序,以避免主要标签偏见和近期偏见。
  • 增加模型大小或包含更多的训练示例并不减少不同上下文示例的排列之间的差异。相同的顺序对一个模型可能效果很好,但对另一个模型可能效果很差。当验证集有限时,考虑选择这样的顺序,使得模型不产生极度不平衡的预测或对其预测过于自信。(Lu et al. 2022 )

指令提示

在提示中呈现少数示例的目的是向模型解释我们的意图;换句话说,以示范的形式描述任务指令给模型。然而,少样本提示在 token 使用方面可能很昂贵,并限制了输入长度,因为上下文长度有限。那为什么不直接给出指令呢?

Instructed LM (例如InstructGPT , 自然指导 )使用高质量的(任务指令, 输入, 真实输出)元组对预训练的模型进行微调,使LM更好地理解用户意图并遵循指令。RLHF (从人类反馈中的强化学习)是这样做的常见方法。指令跟随风格的微调的好处是使模型与人类意图更为一致,并大大减少了通信的成本。

与指令模型交互时,我们应该详细描述任务要求,尽量具体和精确,并避免说“不做某事”,而是指定要做的事。

请标注给定电影评论对电影的情感。情感标签应为"积极"或"消极"。
文本:我敢打赌这个视频游戏比电影有趣得多。
情感:

解释目标受众是给出指示的另一种聪明方式

  • 例如为孩子们制作教育材料,

    向一个6岁的孩子描述什么是量子物理学。

  • 并确保内容安全,

    … 使用适合工作场合的语言。

上下文指令学习 (Ye et al. 2023 ) 结合了少量示例学习和指令提示。它在提示中结合了多个示例,这些示例跨越不同的任务,每个示例都由指令、任务输入和输出组成。请注意,他们的实验仅限于分类任务,并且指令提示包含所有标签选项。

定义:确定对话的发言者是"代理人"还是"客户"。
输入:我已成功为您预订了机票。
输出:代理人

定义:确定问题询问的类别是"数量"还是"位置"。
输入:美国最古老的建筑是什么?
输出:位置

定义:对给定的电影评论进行情感分类,是"积极"还是"消极"。
输入:我打赌这个视频游戏比电影有趣得多。
输出:

自洽抽样

自洽抽样Wang et al. 2022a )的方法是在温度大于0时抽取多个输出,然后从这些候选者中选择最佳的一个。选择最佳候选的标准可以根据任务的不同而变化。一个通用的解决方案是选择多数票。对于容易验证的任务,例如带有单元测试的编程问题,我们可以简单地通过解释器运行并使用单元测试来验证其正确性。

思维链

思维链(CoT)提示Wei et al. 2022 )生成一系列短句,逐步描述推理逻辑,这被称为 推理链理由 ,最终导致最后的答案。对于复杂的推理任务,使用CoT的好处更加明显,尤其是使用大型模型(例如参数超过500亿的模型)。简单的任务从CoT提示中只获得了轻微的好处。

CoT提示的类型

CoT提示主要有两种:

  • Few-shot CoT。给模型提供几个示例,每个示例都包含手工编写(或模型生成)的高质量推理链。

(所有数学推理示例均来自GSM8k )

问题:Tom和Elizabeth比赛爬山。Elizabeth用30分钟爬山。Tom用了Elizabeth的四倍时间来爬山。Tom爬山需要多少小时?
答案:Tom需要30*4 = <<30*4=120>>120分钟爬山。
Tom需要120/60 = <<120/60=2>>2小时爬山。
所以答案是2。
===
问题:Jack是一名足球运动员。他需要买两双袜子和一双足球鞋。每双袜子9.50美元,鞋子92美元。Jack有40美元。Jack还需要多少钱?
答案:两双袜子的总价是$9.50 x 2 = $<<9.5*2=19>>19。
袜子和鞋的总价是$19 + $92 = $<<19+92=111>>111。
Jack还需要$111 - $40 = $<<111-40=71>>71。
所以答案是71。
===
问题:Marty有100厘米的缎带,他必须切成4个相等的部分。每个切割部分必须再分成5个相等的部分。每个最终的切割部分有多长?
答案:
  • Zero-shot CoT。使用自然语言句子如让我们一步一步地思考明确鼓励模型首先生成推理链,然后用因此,答案是来产生答案(Kojima et al. 2022 )。或者使用类似的句子让我们一步一步地工作,以确保我们有正确的答案(Zhou et al. 2022 )。

    问题:Marty有100厘米的缎带,他必须切成4个相等的部分。每个切割部分必须再分成5个相等的部分。每个最终的切割部分有多长? 答案:让我们一步一步地思考。

技巧与扩展

  • 自洽抽样(#self-consistency-sampling)通过抽取多个不同的答案,然后采取多数投票的方法来提高推理的准确性。(Wang et al. 2022a )

  • 另一种集成学习的方法是改变示例的顺序,或使用模型生成的推理来替换人写的推理,以在多次样本试验中引入随机性。然后通过多数投票汇总模型输出以获得最终答案。(Wang et al. 2022b )

  • 如果训练示例只与真实答案相关(容易验证!),但没有推理,我们可以遵循 STaR 方法(Zelikman et al. 2022 ):(1)要求LLM生成推理链,只保留那些导致正确答案的链;(2)然后使用生成的推理进行微调,并重复该过程,直至收敛。注意,较高的温度更容易产生正确答案的不正确推理。如果训练示例没有真实答案,可以考虑使用多数投票作为“正确”的答案。

  • 具有较高推理复杂性的示范可以获得更好的性能,其中复杂性是通过链中的推理步骤数量来衡量的。分离推理步骤时,换行符\n步骤i、句点.或分号;效果更好。(Fu et al. 2023 )

  • 基于复杂性的一致性 是在所有生成中明确优选复杂链,只从前$k$个复杂链中进行多数投票。(Fu et al. 2023 )

  • 后来,Shum et al. (2023) 发现,在他们的实验中,只有复杂示例的CoT提示可以提高复杂问题的准确性,但在简单问题上表现不佳;GSM8k上有证据。

  • Q:改为问题:被发现是有帮助的。(Fu et al. 2023 )

  • Ye & Durrett (2022) 发现,在涉及文本推理的NLP任务(如QA和NLI)中,提示中包含解释的好处是小到中等的,效果因模型而异。他们观察到,解释更可能是非事实性的,而不是不一致的(即解释是否包含预测)。非事实性解释最有可能导致不正确的预测。

  • Self-Ask (Press et al. 2022 ) 是一种方法,通过反复提示模型提出 后续问题 来迭代地构建思考过程。后续的问题可以通过搜索引擎结果来回答。同样地,IRCoT (交错检索CoT;Trivedi et al. 2022 ) 和 ReAct (理由 + 行动;Yao et al. 2023 ) 结合了迭代的CoT提示与查询维基百科API来搜索相关的实体和内容,然后将其加回到上下文中。

SelfAsk-search.png

图 1. Self-Ask 如何与外部搜索查询一起工作。 (图片来源:Press et al. 2022 )。

  • 思维之树 (Yao et al. 2023 ) 通过在每一步探索多种推理可能性来扩展CoT。它首先将问题分解为多个思维步骤,并在每个步骤生成多个思维,从本质上创建一个树结构。搜索过程可以是BFS或DFS,而每个状态都由一个分类器(通过提示)或多数票评估。

tree-of-thoughts.png

图 2. 思维之树如何解决问题。 (图片来源:Yao et al. 2023 )。

自动提示设计

提示是一系列前缀令牌,通过给定输入增加获得所需输出的概率。因此,我们可以将它们视为可训练的参数,并直接在嵌入空间上进行优化 通过梯度下降,例如 AutoPrompt (Shin等,2020 )、Prefix-Tuning (Li & Liang (2021) )、P-tuning (Liu等,2021 ) 和 Prompt-Tuning (Lester等,2021 )。我在“可控神经文本生成”帖子中的这一节 对它们进行了很好的介绍。从AutoPrompt到Prompt-Tuning的趋势是设置逐渐简化。

APE (Automatic Prompt Engineer; Zhou等,2022 )是一种从模型生成的指令候选池中进行搜索,然后根据所选的得分函数过滤候选集,最终选择得分最高的最佳候选的方法。

  1. 根据输入-输出对的形式的小型示例集提示LLM生成指令候选。例如,{{给定所需的输入-输出对}}\n\n指令是

  2. 对于数据集$\mathcal{D}_\text{train} = \{(x, y)\}$,我们希望找到一个指令$\rho$,使得$\rho^* = \arg\max_\rho \mathbb{E}_{(x, y) \in \mathcal{D}_\text{train}} [f(\rho, x, y)]$,其中$f(.)$是每个样本的得分函数,例如执行准确性$\mathbb{1}[\text{LM}(.\vert \rho, x)=y]$或对数概率:$p_\text{LM}(y \mid \rho, x)$。

  3. 使用迭代的蒙特卡罗搜索方法通过像生成以下指令的变体,同时保持语义含义。\n\n输入: ...\n\n输出:...这样的提示来改进最佳候选,提出语义上相似的变体。

为了自动构造思维链提示,Shum等人,2023 建议了增强-修剪-选择,一个三步过程:

  1. 增强:使用few-shot或zero-shot CoT提示为问题生成多个伪思维链;
  2. 修剪:根据生成的答案是否与基准真实值匹配来修剪伪链;
  3. 选择:应用方差减少策略梯度策略来学习所选示例上的概率分布,同时考虑示例上的概率分布作为策略和验证集准确性作为奖励。

Zhang等,2023 改为采用了 聚类 技术来抽样问题,然后生成链。他们观察到LLMs倾向于犯某种类型的错误。一种错误类型在嵌入空间中可以相似,因此被分组在一起。通过只从频繁错误集群中抽样一个或几个,我们可以防止同一错误类型的太多错误示范,并收集一组多样的示例。

  1. 问题聚类:嵌入问题并运行$k$-means进行聚类。
  2. 示范选择:从每个集群中选择一组代表性的问题;即从一个集群中选择一个示范。每个集群中的样本按距集群中心的距离进行排序,距离中心较近的样本首先被选中。
  3. 理由生成:使用zero-shot CoT为所选问题生成推理链,并构造few-shot提示进行推断。

增强型语言模型

Mialon等,2023 关于增强语言模型的调查对多种增强推理技能和使用外部工具的语言模型进行了很好的覆盖。推荐阅读。

检索

我们经常需要完成一些任务,这些任务要求在模型预训练时间结束后或内部/私有知识库中的最新知识。在这种情况下,如果我们不在提示中明确提供上下文,模型就不会知道。许多用于开放域问题回答 的方法首先依赖于在知识库上进行检索,然后将检索到的内容作为提示的一部分。这一过程的准确性取决于检索和生成步骤的质量。

Lazaridou et al. (2022) 研究了如何使用Google搜索来检索文档以增强LLM。给定一个问题$q$,从Google返回的20个URL中提取干净的文本,得到一组文档。因为这些文档很长,所以每个文档被分成6句话的段落,$\{p\}$。通过基于TF-IDF的余弦相似性对证据段落和查询进行排序。只有最相关的段落被用于提示来生成答案$a$。

对于闭卷式问答,每个示例都按照以下方式格式化,以构建少量提示。将问题与证据交换(问题和答案之间的距离更长)在所有数据集中都被发现会持续产生较低的结果。

证据: ...
问题: ...
答案: ...

答案的概率以三种方式计算:

  1. RAG 风格,$p(a_i \mid q) = \sum_{i=1}^n p_\text{tf-idf} (p_i \mid q) \cdot p_\text{LM}(a_i \mid q, p_i)$,其中$p_\text{tf-idf} (p_i \mid q)$是TF-IDF段落和问题表示之间的归一化余弦相似度。
  2. 噪声通道推断,$p(a_i\mid q) = \frac{p_\text{LM}(q \mid a_i, p_i) \cdot p_\text{LM}(a_i \mid p_i)}{p_\text{LM}(q \mid p_i)}$
  3. 专家之积(PoE),结合以上使用的所有概率,再加上$p_\text{LM}(p_i \mid q)$。

根据他们在生成和分类任务上的实验,在三种答案重新排名得分中,PoE > 噪声通道 > RAG。在单独的概率中,$p_\text{LM}(a \mid q, p_i)$和$p_\text{LM}(q \mid p_i, a)$被发现是最有信息的。$p_\text{LM}(q \mid p_i, a)$捕获了在给定证据段落和答案的情况下,问题如何被LM解释,可靠地用于重新排列答案候选。

SituatedQA 数据集中针对不同日期的问题的一个观察是,尽管LM(预训练截止是2020年)通过Google搜索可以访问到最新的信息,但它在2020年后的问题上的表现仍然比在2020年前的问题上差很多。这表明上下文信息和模型内部知识之间存在某种不一致或冲突。

有趣的是,即使只有“内部检索”,也是有益的,也就是说,在回答问题之前生成关于一个话题的知识(Liu et al. 2022 )。首先,我们可以使用以下模板来提取知识:

生成关于输入的一些知识。例如:

输入: 云是由什么水形态形成的?
知识: 云是由水蒸气组成的。

输入: {问题}
知识:

然后用模型生成的知识,进一步提示LM以获得答案。

编程语言

PAL(Program-aided language models);Gao et al. 2022 )和PoT(Program of Thoughts prompting;Chen et al. 2022 )都要求LLM生成编程语言语句来解决自然语言推理问题,从而将解决方案步骤卸载到运行时,例如Python解释器。这种设置将复杂的计算和推理解耦。它依赖于具有足够好的编码技能的LM。

PoT.png

图3. 比较CoT和PoT。 (图片来源: Chen et al. 2022 )。

外部APIs

TALM(Tool Augmented Language Models,Parisi et al. 2022 )是一个通过文本到文本API调用增强的语言模型。LM会在任务输入文本的条件下生成|tool-calltool input text来构造API调用请求。当|result出现时,会调用指定的工具API,并将返回的结果追加到文本序列中。最终的输出在|output标记之后生成。

TALM.png

图 4. TALM中API调用的格式。(图片来源:Parisi et al. 2022

TALM采用自我对弈的方法来迭代地引导工具使用示例的数据集并使用它来对LM进行微调。这种自我对弈,被定义为模型与工具API的交互,基于新添加的工具API是否能改进模型输出来迭代地扩展数据集。Toolformer也采用了同样的想法,下面会详细描述。这个流程模糊地模仿了一个强化学习过程,其中LM是策略网络,并通过带有二进制奖励信号的策略梯度进行训练。

TALM-iteration.png

图 5. 自我对弈的迭代有助于提高模型的性能。(图片来源:Parisi et al. 2022

Toolformer (Schick et al. 2023 )是一个可以通过简单APIs使用外部工具的LM,它以自我监督的方式构建,每个API只需要少量的示范。Toolformer的工具箱包括:

  • 计算器 用于帮助LM进行精确的数学计算;
  • 问答系统 用于处理不真实的内容和幻觉;
  • 搜索引擎 提供预训练切断时间后的最新信息;
  • 翻译系统 用于提高低资源语言的性能;
  • 日历 让LM了解时间进程。

toolformer.png

图 6. 如何构建Toolformer的示意图。(图片来源:Schick et al. 2023

Toolformer的训练步骤如下:

  1. 提示以标注潜在的API调用。要求一个预训练的LM通过使用API调用示例进行少次学习来标注一个数据集。格式化示例:

toolformer-annotation.png

图 7. 如何标注数据集以进行API调用。(图片来源:[Schick et al. 2023](https://arxiv.org/abs/2302.04761))
  • 每个API调用都表示为(API名称, 相应的输入)的元组,表示为 $c=(a_c, i_c)$,其对应的结果表示为 $r$。带有和不带有结果的API调用序列分别如下标记:

$$ \begin{aligned} e(c) &= \langle\texttt{API}\rangle a_c(i_c) \langle\texttt{/API}\rangle \\ e(c, r) &= \langle\texttt{API}\rangle a_c(i_c) \to r \langle\texttt{/API}\rangle \end{aligned} $$

  • 基于概率 $p_{LM}(\langle\texttt{API}\rangle | \text{prompt}(\mathbf{x}), \mathbf{x}_{1:i})$ 对API调用进行抽样,并选择顶部 $k$ 个候选位置在位置 $i$ 进行API调用,如果概率大于阈值。

  • 然后我们从LM中抽样潜在的API调用,给定序列 $\text{prompt}(\mathbf{x}), x_1, \dots, x_{i-1}, \langle\texttt{API}\rangle$ 作为前缀, $\langle\texttt{/API}\rangle$ 作为后缀。

  1. 基于API调用是否帮助模型预测未来的令牌来过滤注释。使用自我监督损失来确定哪些API调用实际上是有帮助的。

    • 执行每个API调用 $c_i$ 以获取相应的结果 $r_i$。

    • 当模型带有提示作为前缀时,计算LM在令牌 $x_i, \dots, x_n$ 上的加权交叉熵损失。计算两个版本,一个带API结果,另一个带空序列 $\varepsilon$。

      $$ \begin{aligned} L^+_i &= L_i(e(c_i, r_i)) \\ L^-_i &= \min(L_i(\varepsilon), L_i(e(c_i, \varepsilon))) \\ \end{aligned} $$

      只有当 $L^-_i - L^+_i$ 大于阈值的API调用才会被保留,这意味着添加此API调用及其结果有助于模型预测未来的令牌。

  2. 在此标注的数据集上微调LM。新的训练序列构造为 $\mathbf{x}^* = x_{1:i-1}, e(c_i, r_i), x_{i:n}$。训练数据是原始数据集(例如论文中的CCNet的一个子集)及其增强版本的组合。

在推断时,解码运行直到模型产生“$\to$ “令牌,表示它接下来期望来自API调用的响应。

Toolformer目前不支持以链式(即使用一个工具的输出作为另一个工具的输入)或交互式方式(即在人工选择后采纳API响应)使用工具。扩展模型的这两种方式都是有趣的未来发展方向。

Citation

Cited as:

Weng, Lilian. (Mar 2023). Prompt Engineering. Lil’Log. https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/ .

Or

@article{weng2023prompt,
  title   = "Prompt Engineering",
  author  = "Weng, Lilian",
  journal = "lilianweng.github.io",
  year    = "2023",
  month   = "Mar",
  url     = "https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/"
}

Useful Resources

References

[1] Zhao et al. “Calibrate Before Use: Improving Few-shot Performance of Language Models.” ICML 2021

[2] Liu et al. “What Makes Good In-Context Examples for GPT-3?" arXiv preprint arXiv:2101.06804 (2021).

[3] Lu et al. “Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity." ACL 2022

[4] Ye et al. “In-Context Instruction Learning." arXiv preprint arXiv:2302.14691 (2023).

[5] Su et al. “Selective annotation makes language models better few-shot learners." arXiv preprint arXiv:2209.01975 (2022).

[6] Rubin et al. “Learning to retrieve prompts for in-context learning." NAACL-HLT 2022

[7] Wei et al. “Chain of thought prompting elicits reasoning in large language models." NeurIPS 2022

[8] Wang et al. “Self-Consistency Improves Chain of Thought Reasoning in Language Models." ICLR 2023.

[9] Diao et al. “Active Prompting with Chain-of-Thought for Large Language Models." arXiv preprint arXiv:2302.12246 (2023).

[10] Zelikman et al. “STaR: Bootstrapping Reasoning With Reasoning." arXiv preprint arXiv:2203.14465 (2022).

[11] Ye & Durrett. “The unreliability of explanations in few-shot in-context learning." arXiv preprint arXiv:2205.03401 (2022).

[12] Trivedi et al. “Interleaving retrieval with chain-of-thought reasoning for knowledge-intensive multi-step questions." arXiv preprint arXiv:2212.10509 (2022).

[13] Press et al. “Measuring and narrowing the compositionality gap in language models." arXiv preprint arXiv:2210.03350 (2022).

[14] Yao et al. “ReAct: Synergizing reasoning and acting in language models." ICLR 2023.

[15] Fu et al. “Complexity-based prompting for multi-step reasoning." arXiv preprint arXiv:2210.00720 (2022).

[16] Wang et al. “Rationale-augmented ensembles in language models." arXiv preprint arXiv:2207.00747 (2022).

[17] Zhang et al. “Automatic chain of thought prompting in large language models." arXiv preprint arXiv:2210.03493 (2022).

[18] Shum et al. “Automatic Prompt Augmentation and Selection with Chain-of-Thought from Labeled Data." arXiv preprint arXiv:2302.12822 (2023).

[19] Zhou et al. “Large Language Models Are Human-Level Prompt Engineers." ICLR 2023.

[20] Lazaridou et al. “Internet augmented language models through few-shot prompting for open-domain question answering." arXiv preprint arXiv:2203.05115 (2022).

[21] Chen et al. “Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks." arXiv preprint arXiv:2211.12588 (2022).

[22] Gao et al. “PAL: Program-aided language models." arXiv preprint arXiv:2211.10435 (2022).

[23] Parisi et al. “TALM: Tool Augmented Language Models” arXiv preprint arXiv:2205.12255 (2022).

[24] Schick et al. “Toolformer: Language Models Can Teach Themselves to Use Tools." arXiv preprint arXiv:2302.04761 (2023).

[25] Mialon et al. “Augmented Language Models: a Survey” arXiv preprint arXiv:2302.07842 (2023).

[26] Yao et al. “Tree of Thoughts: Deliberate Problem Solving with Large Language Models." arXiv preprint arXiv:2305.10601 (2023).