提示工程(Prompt Engineering)完全指南
提示工程(Prompt Engineering),也叫上下文提示(In-Context Prompting),指的是在不更新模型权重的前提下,通过与 LLM 沟通来引导其行为以获得预期结果的方法。这是一门经验性的科学,不同提示工程方法的效果因模型而异,因此需要大量实验和启发式技巧。
本文只讨论自回归语言模型的提示工程,不涉及完形填空测试、图像生成或多模态模型。提示工程的核心目标是模型的对齐性和可控性。可以参考我之前关于可控文本生成的文章。
【个人观点,不喜勿喷】在我看来,一些提示工程论文不值得写 8 页长,因为那些技巧一两句就能讲清楚,其余篇幅全是在跑基准测试。一个易用、共享的基准测试基础设施对社区更有价值。迭代式提示或外部工具的接入并不容易搭建,要让整个研究社区都采用也绝非易事。
基础提示#
零样本学习和少样本学习是两种最基本的提示方法,由许多 LLM 论文开创,并被广泛用于评估 LLM 性能。
零样本(Zero-Shot)#
零样本学习就是直接把任务文本喂给模型,然后让它给出结果。
(以下情感分析示例均来自 SST-2 数据集)
Text: i'll bet the video game is a lot more fun than the film.
Sentiment:
少样本(Few-shot)#
少样本学习会提供一组高质量的示例,每个示例都包含输入和期望输出。由于模型先看到了好的范例,它能更好地理解人类意图以及回答的标准。因此,少样本学习的性能通常优于零样本。但代价是消耗更多 token,且当输入和输出文本较长时可能触及上下文长度上限。
文本:(lawrence bounces) all over the stage, dancing, running, sweating, mopping his face and generally displaying the wacky talent that brought him fame in the first place.
情感:正面
文本:despite all evidence to the contrary, this clunker has somehow managed to pose as an actual feature movie, the kind that charges full admission and gets hyped on tv and purports to amuse small children and ostensible adults.
情感:负面
文本:for the first time in years, de niro digs deep emotionally, perhaps because he's been stirred by the powerful work of his co-stars.
情感:正面
文本:i'll bet the video game is a lot more fun than the film.
情感:
许多研究探讨了如何构建上下文示例以最大化性能,并观察到提示格式、训练示例以及示例顺序的选择会导致截然不同的表现,从近乎随机猜测到接近最先进水平。
Zhao 等人 (2021) 研究了少样本分类的情况,并提出 LLM 中的几种偏置(他们在实验中使用的是 GPT-3)导致了这种高方差:(1) 多数标签偏置:当示例中标签的分布不均衡时存在;(2) 近因偏置:模型倾向于重复末尾出现的标签;(3) 常见词元偏置:LLM 倾向于更多地生成常见词元而非罕见词元。为了克服这些偏置,他们提出了一种方法,当输入字符串为 N/A 时,将模型输出的标签概率校准为均匀分布。
示例选择技巧#
-
使用 $k$-NN 聚类在嵌入空间中选择与测试示例语义相似的示例(Liu 等人, 2021)
-
为了挑选出多样且有代表性的样本集,Su 等人(2022)提出了一种基于图的方法:(1) 首先,根据样本间的余弦相似度构建有向图 $G=(V, E)$(相似度可通过 SBERT 或其他嵌入模型计算 embedding 得到),其中每个节点指向其 $k$ 个最近邻;(2) 初始化已选样本集 $\mathcal{L}=\emptyset$ 和剩余样本集 $\mathcal{U}$。对 $\mathcal{U}$ 中的每个样本 $u$,按如下公式打分:$$ \text{score}(u) = \sum_{v \in \{v \mid (u, v) \in E, v\in \mathcal{U}\}} s(v)\quad\text{其中 }s(v)=\rho^{- \vert \{\ell \in \mathcal{L} \vert (v, \ell)\in E \}\vert},\quad\rho > 1 $$ 该公式的设计思路是:若 $v$ 的邻居中已有较多被选中,则 $s(v)$ 较低,从而引导打分函数倾向于挑选多样化的样本。
-
Rubin 等人(2022)提出,针对特定训练数据集,通过对比学习来训练 embedding,以用于上下文学习的样本选取。对于每个训练对 $(x, y)$,可以用语言模型给出的条件概率来衡量某个示例 $e_i$(格式化后的输入-输出对)的质量:$\text{score}(e_i) = P_\text{LM}(y \mid e_i, x)$。接着,可以为每个训练对找出得分最高的前 $k$ 个和最低的后 $k$ 个示例,分别作为对比学习中的正例和负例候选集。
-
也有研究者尝试使用 Q-Learning 来进行样本选择(Zhang 等人,2022)。
-
受基于不确定性的主动学习启发,Diao 等人(2023)建议通过多次采样来识别那些模型预测之间分歧较大或熵较高的示例,然后对这些示例进行人工标注,以用于 few-shot prompt。
示例排序的技巧#
- 通常建议让示例选择多样化、与测试样本相关,并以随机顺序排列,以避免多数标签偏差和近因偏差。
- 增大模型规模或增加训练样本数量,并不能降低上下文示例不同排列之间的方差。同一顺序在一个模型上效果很好,在另一个模型上却可能很差。在验证集有限的情况下,可以考虑挑选一种顺序,使模型不会产生极度不平衡的预测,也不会对预测过于自信。(Lu et al. 2022)
指令提示#
在提示中给出 few-shot 示例的目的,是向模型说明我们的意图;换句话说,就是以演示的形式向模型描述任务指令。然而,few-shot 在 token 使用上开销较大,并且受限于上下文长度。所以,为什么不直接给出指令呢?
Instructed LM(例如 InstructGPT、natural instruction)使用高质量的(任务指令,输入,标准输出)三元组对预训练模型进行微调,使 LM 更好地理解用户意图并遵从指令。RLHF(基于人类反馈的强化学习)是实现这一目标的常用方法。指令遵循式微调的好处在于,让模型更对齐人类意图,并大幅降低沟通成本。
在与指令模型交互时,我们应该详细描述任务需求,尽量做到具体和精确,避免使用"不要做某事"这类否定表达,而是明确指出应该做什么。
Please label the sentiment towards the movie of the given movie review. The sentiment label should be "positive" or "negative".
Text: i'll bet the video game is a lot more fun than the film.
Sentiment:
说明目标受众是另一种给出指令的巧妙方式
- 例如,要为儿童制作教学材料,
Describe what is quantum physics to a 6-year-old.
- 以及内容安全,
... 以适合办公环境的语言表述。
上下文指令学习(Ye 等人,2023)将少样本学习与指令提示相结合。它在提示中纳入了跨多个任务的多个示例,每个示例由指令、任务输入和输出组成。需要注意的是,他们的实验仅在分类任务上进行,且指令提示中包含了所有标签选项。
定义:判断对话的说话者是"agent"还是"customer"。
输入:我已经成功为您预订了门票。
输出:agent
定义:判断问题所问的类别是"Quantity"还是"Location"。
输入:美国最古老的建筑是什么?
输出:Location
定义:对给定的电影评论进行情感分类,判断为"positive"或"negative"。
输入:i'll bet the video game is a lot more fun than the film.
输出:
自一致性采样#
自一致性采样(Wang 等人,2022a)是在 temperature > 0 的条件下采样多个输出,然后从这些候选结果中选出最佳的一个。最佳候选的筛选标准因任务而异。一个通用的解决方案是采用多数投票。对于像带单元测试的编程题这样易于验证的任务,我们可以直接运行解释器并通过单元测试来验证正确性。
思维链(CoT)#
思维链(CoT)提示(Wei 等人,2022)通过生成一系列短句来逐步描述推理逻辑,这些短句被称为推理链或推理依据,最终得出答案。CoT 的优势在复杂推理任务上更为明显,并且需要使用大模型(例如参数量超过 50B 的模型)。对于简单任务,CoT 提示带来的提升较小。
CoT 提示的类型#
CoT 提示主要有两种类型:
- 少样本 CoT。即通过若干示例对模型进行提示,每个示例都包含人工编写(或模型生成)的高质量推理链。
(所有数学推理示例来自 GSM8k)
Question: Tom and Elizabeth have a competition to climb a hill. Elizabeth takes 30 minutes to climb the hill. Tom takes four times as long as Elizabeth does to climb the hill. How many hours does it take Tom to climb up the hill?
Answer: It takes Tom 30*4 = <<30*4=120>>120 minutes to climb the hill.
It takes Tom 120/60 = <<120/60=2>>2 hours to climb the hill.
So the answer is 2.
===
Question: Jack is a soccer player. He needs to buy two pairs of socks and a pair of soccer shoes. Each pair of socks cost $9.50, and the shoes cost $92. Jack has $40. How much more money does Jack need?
Answer: The total cost of two pairs of socks is $9.50 x 2 = $<<9.5*2=19>>19.
The total cost of the socks and the shoes is $19 + $92 = $<<19+92=111>>111.
Jack need $111 - $40 = $<<111-40=71>>71 more.
So the answer is 71.
===
Question: Marty has 100 centimeters of ribbon that he must cut into 4 equal parts. Each of the cut parts must be divided into 5 equal parts. How long will each final cut be?
Answer:
- Zero-shot CoT。使用类似
Let's think step by step的自然语言语句,明确引导模型先生成推理链,再用Therefore, the answer is引导模型给出答案(Kojima et al. 2022)。也可以使用类似的表述Let's work this out it a step by step to be sure we have the right answer(Zhou et al. 2022)。
Question: Marty has 100 centimeters of ribbon that he must cut into 4 equal parts. Each of the cut parts must be divided into 5 equal parts. How long will each final cut be?
Answer: Let's think step by step.
技巧与扩展#
-
Self-consistency sampling(自一致性采样)通过采样多个不同的答案并取多数票,可以提升推理准确率。(Wang et al. 2022a)
-
另一种集成学习方法是打乱示例顺序,或用模型生成的推理过程替代人工撰写的部分,从而在多次采样中引入随机性,再通过多数投票聚合模型输出得到最终答案。(Wang et al. 2022b)
-
如果训练样本只有关联正确答案(这类答案容易验证!)但没有推理过程,可以采用 STaR(Self-Taught Reasoner;Zelikman et al. 2022)方法:(1)让 LLM 生成推理链,只保留能推出正确答案的部分;(2)用生成的推理过程对模型进行微调,并重复该过程直至收敛。注意,温度参数越高,越容易在正确答案下生成错误的推理过程。如果训练样本没有标准答案,可以考虑用多数投票的结果作为"正确"答案。
-
包含更高推理复杂度的示例提示能带来更好的表现,这里的复杂度以推理链中的步骤数衡量。在分隔推理步骤时,换行符
\n效果优于step i、句号.或分号;。(Fu et al. 2023) -
基于复杂度的一致性指在所有生成结果中显式偏好复杂推理链,方法是仅在复杂度排名前 $k$ 的推理链之间进行多数投票。(Fu et al. 2023)
-
后来,Shum et al. (2023) 发现,在他们的实验中,只包含复杂示例的 CoT 提示能提升复杂问题的准确率,但在简单问题上表现欠佳,GSM8k 数据集上已有相关证据。
-
把
Q:换成Question:被发现是有帮助的。(Fu et al. 2023) -
Ye & Durrett(2022) 发现,在需要基于文本进行推理的 NLP 任务(如问答 QA 和自然语言推理 NLI)中,在 prompt 里加入解释带来的收益较小到中等,且效果因模型而异。他们观察到,相比"解释与预测不一致",解释更可能出现"不符合事实"的问题。而不符合事实的解释往往导致错误的预测。
-
Self-Ask(Press 等,2022)是一种通过反复提示模型提出后续问题来逐步构建思考过程的方法。后续问题可以通过搜索引擎结果来回答。类似地,IRCoT(Interleaving Retrieval CoT,检索与思维链交替;Trivedi 等,2022)和 ReAct(Reason + Act,边推理边行动;Yao 等,2023)将迭代式 CoT 提示与调用 Wikipedia API 相结合,先搜索相关实体和内容,再将其回填到上下文里。
(图片来源:Press 等,2022)
- Tree of Thoughts(Yao 等,2023)在 CoT 的基础上做了扩展,在每一步都探索多种推理路径。它先把问题分解成多个思维步骤,再在每一步生成多个想法,从而构建出一棵树状结构。搜索过程可采用 BFS 或 DFS,每个状态由一个分类器(通过 prompt 实现)或多数投票来评估。
(图片来源:Yao 等,2022)
Automatic Prompt Design#
Prompt 是一段前缀 token 序列,用于提高在给定输入下获得期望输出的概率。因此我们可以将其视为可训练参数,直接在嵌入空间上通过梯度下降进行优化,例如 AutoPrompt(Shin et al., 2020)、Prefix-Tuning(Li & Liang (2021))、P-tuning(Liu et al. 2021)以及 Prompt-Tuning(Lester et al. 2021)。这些方法在我《可控神经文本生成》一文的对应章节中有详尽介绍。从 AutoPrompt 到 Prompt-Tuning 的演进趋势是设置逐渐简化。
APE(Automatic Prompt Engineer;Zhou et al. 2022)是一种在一组模型生成的指令候选中搜索,再依据选定的打分函数过滤候选集,最终选出得分最高候选的方法。
-
用 LLM 基于少量输入-输出对形式的示例来生成指令候选。例如
{{Given desired input-output pairs}}\n\nThe instruction is。 -
给定数据集 $\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)$。
-
使用迭代蒙特卡洛搜索方法,通过类似
Generate a variation of the following instruction while keeping the semantic meaning.\n\nInput: ...\n\nOutput:...的 prompt 来生成语义相近的变体,从而改进最优候选。
为了自动构建思维链 prompt,Shum et al. (2023) 提出了「增广—剪枝—选择」三步流程:
- 扩充:使用少样本或零样本思维链提示,根据问题生成多条伪思维链;
- 剪枝:根据生成的答案是否与真实答案匹配来剪除伪思维链。
- 选择:采用方差削减的策略梯度方法,学习所选样本的概率分布,其中以样本的概率分布作为策略,以验证集准确率作为奖励。
Zhang 等人(2023)则改用聚类技术来采样问题,然后再生成思维链。他们观察到 LLM 倾向于犯某些特定类型的错误。其中一类错误在嵌入空间中彼此相似,因此会被归到同一簇。通过只从高频错误簇中采样一个或少量样本,可以避免同一类错误出现过多错误示范,从而收集到多样化的样本集。
- 问题聚类:对问题做嵌入,然后运行 $k$-means 聚类。
- 示范选择:从每个簇中选出一组具有代表性的问题,即每个簇选一个示范。每个簇内的样本按到簇中心的距离排序,优先选择距中心更近的样本。
- 推理生成:使用零样本思维链为选中的问题生成推理链,并构造少样本提示来运行推理。
增强型语言模型#
Mialon 等人(2023)对增强型语言模型的综述涵盖了多种类别的语言模型增强方法,包括推理能力以及使用外部工具的能力,内容非常全面。推荐阅读。
检索#
我们经常需要完成那些依赖模型预训练截止时间之后的最新知识,或依赖内部/私有知识库的任务。在这种情况下,如果不把相关上下文显式写进提示,模型就无法获知。许多开放域问答方法都依赖于先在知识库上做检索,再把检索到的内容纳入提示的一部分。这一流程的准确率同时取决于检索和生成两个步骤的质量。
Lazaridou 等人(2022)研究了如何利用 Google 搜索检索文档来增强 LLM。给定一个问题 $q$,从 Google 返回的 20 个 URL 中提取干净的文本,得到一组文档。由于这些文档较长,每个文档被切分为包含 6 个句子的段落 $\{p\}$。段落根据证据段落与查询之间的 TF-IDF 余弦相似度进行排序,提示中仅使用最相关的段落来生成答案 $a$。
对于闭卷问答,每个示例按以下格式构造少样本提示。实验发现,将问题和证据交换位置(问题和答案之间的距离更大)在所有数据集上的效果都持续更差。
Evidence: ...
Question: ...
Answer: ...
答案概率通过三种方式计算:
- 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 段落表示与问题表示之间的归一化余弦相似度。
- Noisy channel inference,$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)}$
- Product-of-Experts(PoE),将上述所有概率以及 $p_\text{LM}(p_i \mid q)$ 组合在一起。
根据他们在生成和分类任务上的实验,在三种答案重排序分数中,效果排序为 PoE > Noisy channel > 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)$ 衡量了在给定证据段落和答案的条件下,语言模型对问题的解释程度,可以可靠地用于答案候选的重排序。
在 SituatedQA 数据集(包含基于不同时间点的问题)上有一个发现:尽管 LM(预训练截止于 2020 年)可以通过 Google 搜索获取最新信息,但它在 2020 年之后问题上的表现仍然远差于在 2020 年之前问题上的表现。这表明上下文信息和模型内部知识之间存在某些差异或冲突。
有趣的是,研究发现即使只做"内部检索"——即在回答问题之前先生成相关知识——也能带来收益(Liu et al. 2022)。首先可以用下面的模板来提取知识:
Generate some knowledge about the input. Examples:
Input: What type of water formation is formed by clouds?
Knowledge: Clouds are made of water vapor.
Input: {question}
Knowledge:
然后用模型生成的知识进一步提示 LM,从而得到答案。
Programming Language#
PAL(Program-aided language models;Gao et al. 2022)和 PoT(Program of Thoughts prompting;Chen et al. 2022)都让 LLM 生成编程语言语句来解决自然语言推理问题,从而将求解步骤交给 Python 解释器之类的运行时执行。这种方式把复杂计算和推理解耦,但它依赖具备足够编码能力的 LM。
External APIs#
TALM(Tool Augmented Language Models;Parisi et al. 2022)是一种用 text-to-text API 调用增强的语言模型。LM 根据任务输入生成 |tool-call 和 tool input text 来构造 API 请求;遇到 |result 时就调用对应的工具 API,把返回结果拼接到文本序列后面;最终在出现 |output token 后输出结果。
TALM 采用自博弈(self-play)方法,通过迭代方式扩充工具使用样本数据集,并用该数据集微调语言模型。所谓自博弈,是指模型与工具 API 交互,并根据新增的工具 API 能否提升模型输出来迭代扩展数据集。Toolformer 也沿用了同样的思路,后文将详细介绍。整体流程大致模仿强化学习过程:以语言模型作为策略网络,通过策略梯度方法进行训练,奖励信号为二值信号。
(图片来源:Parisi et al. 2022)
Toolformer(Schick et al. 2023)是一个能够通过简单 API 调用外部工具的语言模型,它以自监督方式构建,每个 API 只需少量示例即可。其工具集包括:
- 计算器:弥补语言模型在精确数学计算上的不足;
- 问答系统:缓解内容失实和幻觉问题;
- 搜索引擎:提供预训练截止时间之后的最新信息;
- 翻译系统:提升在低资源语言上的表现;
- 日历:让语言模型具备时间感知能力。
(图片来源:Schick et al. 2023)
Toolformer 的训练步骤如下:
-
通过提示标注潜在的 API 调用。借助少量 API 调用示例进行少样本学习,让预训练语言模型对数据集进行标注。格式示例:
数据集中 API 调用的标注方式。
(图片来源:Schick et al. 2023)
- 每个 API 调用表示为一个二元组 (API 名称,对应输入),$c=(a_c, i_c)$,其对应结果记为 $r$。带结果和不带结果的 API 调用序列分别标记如下:
<div>
$$
\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}
$$
</div>
- 根据概率 $p_\text{LM}(\langle\texttt{API}\rangle \mid \text{prompt}(\mathbf{x}), \mathbf{x}_{1:i})$ 采样 API 调用,并在位置 $i$ 处选取概率大于阈值的前 $k$ 个候选位置来执行 API 调用。
- 然后以 $[\text{prompt}(\mathbf{x}), x_1, \dots, x_{i-1}, \langle\texttt{API}\rangle]$ 为前缀、$\langle\texttt{/API}\rangle$ 为后缀,从语言模型中采样可能的 API 调用。
-
根据 API 调用是否有助于模型预测后续 token 来过滤标注。 使用自监督损失来判断哪些 API 调用确实是有用的。
-
执行每个 API 调用 $c_i$ 以获得对应的结果 $r_i$。
-
在以 prompt 为前缀的情况下,计算语言模型在 token $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 调用及其结果能够帮助模型预测后续 token。
-
-
在该标注数据集上微调语言模型。 新的训练序列构造成 $\mathbf{x}^* = x_{1:i-1}, e(c_i, r_i), x_{i:n}$。训练数据由原始数据集(例如论文中 CCNet 的一个子集)及其增强版本组合而成。
在推理时,解码过程持续进行,直到模型生成“$\to$ " token,表明它接下来在等待 API 调用的响应。
Toolformer 目前不支持链式工具调用(即把一个工具的输出作为另一个工具的输入),也不支持交互式工具使用(即在人工选择后再纳入 API 响应)。这两个方向都值得在未来进一步扩展模型能力。
引用#
引用格式:
Weng, Lilian. (2023 年 3 月). Prompt Engineering. Lil'Log. https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/.
或:
@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/"
}
参考资料#
- OpenAI Cookbook 提供了大量深入示例,介绍如何高效使用 LLM。
- LangChain,一个用于将语言模型与其他组件结合以构建应用的库。
- Prompt Engineering Guide 仓库收录了相当全面的提示工程学习资料。
- learnprompting.org
- PromptPerfect
- Semantic Kernel
参考文献#
[1] Zhao 等人。《Calibrate Before Use: Improving Few-shot Performance of Language Models.》 ICML 2021。
[2] Liu 等人。《What Makes Good In-Context Examples for GPT-3?》 arXiv 预印本 arXiv:2101.06804 (2021)。
[3] Lu 等人。《Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity.》 ACL 2022。
[4] Ye 等人。《In-Context Instruction Learning.》 arXiv 预印本 arXiv:2302.14691 (2023)。
[5] Su 等人。《Selective annotation makes language models better few-shot learners.》 arXiv 预印本 arXiv:2209.01975 (2022)。
[6] Rubin 等人。"Learning to retrieve prompts for in-context learning." NAACL-HLT 2022
[7] Wei 等人。"Chain of thought prompting elicits reasoning in large language models." NeurIPS 2022
[8] Wang 等人。"Self-Consistency Improves Chain of Thought Reasoning in Language Models." ICLR 2023.
[9] Diao 等人。"Active Prompting with Chain-of-Thought for Large Language Models." arXiv 预印本 arXiv:2302.12246 (2023).
[10] Zelikman 等人。"STaR: Bootstrapping Reasoning With Reasoning." arXiv 预印本 arXiv:2203.14465 (2022).
[11] Ye & Durrett。"The unreliability of explanations in few-shot in-context learning." arXiv 预印本 arXiv:2205.03401 (2022).
[12] Trivedi 等人。"Interleaving retrieval with chain-of-thought reasoning for knowledge-intensive multi-step questions." arXiv 预印本 arXiv:2212.10509 (2022).
[13] Press 等人。"Measuring and narrowing the compositionality gap in language models." arXiv 预印本 arXiv:2210.03350 (2022).
[14] Yao 等人。"ReAct: Synergizing reasoning and acting in language models." ICLR 2023.
[15] Fu 等人。"Complexity-based prompting for multi-step reasoning." arXiv 预印本 arXiv:2210.00720 (2022).
[16] Wang 等人。"Rationale-augmented ensembles in language models." arXiv 预印本 arXiv:2207.00747 (2022).
[17] Zhang 等人。"Automatic chain of thought prompting in large language models." arXiv 预印本 arXiv:2210.03493 (2022).
[18] Shum 等人。"Automatic Prompt Augmentation and Selection with Chain-of-Thought from Labeled Data." arXiv 预印本 arXiv:2302.12822 (2023).
[19] Zhou 等人。"Large Language Models Are Human-Level Prompt Engineers." ICLR 2023.
[20] Lazaridou 等人。"Internet augmented language models through few-shot prompting for open-domain question answering." arXiv 预印本 arXiv:2203.05115 (2022).
[21] Chen 等人。"Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks." arXiv 预印本 arXiv:2211.12588 (2022).
[22] Gao 等人。"PAL: Program-aided language models." arXiv 预印本 arXiv:2211.10435 (2022).
[23] Parisi 等人。"TALM: Tool Augmented Language Models" arXiv 预印本 arXiv:2205.12255 (2022).
[24] Schick 等人。"Toolformer: Language Models Can Teach Themselves to Use Tools." arXiv 预印本 arXiv:2302.04761 (2023).
[25] Mialon 等人。"Augmented Language Models: a Survey" arXiv 预印本 arXiv:2302.07842 (2023).
[26] Yao 等人。"Tree of Thoughts: Deliberate Problem Solving with Large Language Models." arXiv 预印本 arXiv:2305.10601 (2023).