大模型基础~03.Prompt 工程
第 1 节 概述
随着模型训练数据规模和参数数量的持续增长,大语言模型突破了泛化瓶颈,并涌现出了强大的指令跟随能力。泛化能力的增强使得模型能够处理和理解多种未知任务,而指令跟随能力的提升则确保了模型能够准确响应人类的指令。
1.1 Prompt 与 Prompt 工程
「Prompt」:是指用于指导生成式人工智能模型执行特定任务的输入指令,这些指令通常以自然语言文本的形式出现。

「Prompt 工程」:又称提示工程,是指设计和优化用于与生成式人工智能模型交互的 Prompt 的过程。这种技术的核心在于,将新任务通过 Prompt 构建为模型在预训练阶段已经熟悉的形式,利用模型固有的泛化能力来执行新的任务,而无需在额外的特定任务上进行训练。

经过良好设计的Prompt 通常由任务说明、上下文、问题、输出格式四个基本元素组成:
- 「任务说明」:向模型明确提出具体的任务要求。任务说明应当清晰、直接,并尽可能详细地描述期望模型完成的任务。
- 「上下文」:向模型提供的任务相关背景信息,用以增强其对任务的理解以及提供解决任务的思路。上下文可以包括特定的知识前提、目标受众的背景、相关任务的示例,或任何有助于模型更好地理解任务的信息。
- 「问题」:向模型描述用户的具体问题或需要处理的信息。这部分应直接涉及用户的查询或任务,为模型提供一个明确的起点。问题可以是显式的提问,也可以是隐式的陈述句,用以表达用户的潜在疑问。
- 「输出格式」:期望模型给出的回答的展示形式。这包括输出的格式,以及任何特定的细节要求,如简洁性或详细程度。例如,可以指示模型以JSON 格式输出结果。
在此基础上,Prompt 工程包括多种技巧和技术,如上下文学习(In-Context Learning)和思维链(Chain of Thought)等。
1.2 Prompt 分词向量化
语言模型无法直接理解文本,在 Prompt 进入大模型之前,需要将它拆分成 Token 序列。

在构建大语言模型的词表时,分词器依赖于分词算法,如 BBPE 、BPE 和WordPiece 等,这些算法通过分析语料库中的词频等信息来划分 Token。BBPE 算法的流程主要包括以下四个步骤:
- 「初始化词表」:首先,将所有字符按照其底层编码拆分为若干字节,并将这些单字节编码作为初始词表的 Token。
- 「统计词频」:接下来,统计词表中所有 Token 对(即相邻 Token 的组合)的出现频率。在初始阶段,Token 对即为相邻字节的组合。
- 「合并高频 Token 对」:然后,选择出现频率最高的Token 对,将其合并成一个新的Token 并加入词表。
- 「迭代合并」:重复步骤 2 和步骤 3,不断迭代合并,直至达到预设的词表大小或达到指定的合并次数。
词表中收录了语料库中高频出现的词语或短语,形成独立的 Token。
「干脆」一词在词表中以一个 Token 来表示。
为了优化 Token 空间并压缩词表大小,构建词表时会包含了一些特殊的 Token,这些 Token 既能单独表示语义,也能通过两两组合,表示语料库中低频出现的生僻字。
「浣」字使用两个 Token,æ\mu 和 来表示。
在完成分词之后,这些 Token 随后会经过模型的嵌入矩阵(Embedding Matrix)处理,转化为固定大小的表征向量。
在模型生成阶段,模型会根据输入的向量序列计算出词表中每个词的概率分布。模型从这些概率分布中选择并输出对应的 Token,这些 Token 再被转换为相应的文本内容。
第 2 节 上下文学习
上下文学习(In-Context Learning, ICL)是一种通过构造特定的 Prompt,来使得语言模型理解并学习下游任务的范式,这些特定的 Prompt 中可以包含演示示例,任务说明等元素。

按照示例数量的不同,上下文学习可以呈现出多种形式:零样本(Zero-shot)、单样本(One-shot)和少样本(Few-shot)。
- 「零样本上下文学习」:在此种学习方式下,仅需向模型提供任务说明,而无需提供任何示例。其具有强大的场景泛化能力。但零样本学习的性能完全依赖于大语言模型的能力,并且在处理任务时可能表现欠佳。
- 「单样本上下文学习」:这种方式仅需为模型提供一个示例,贴合人类“举一反三”的学习模式。不过,单样本学习的效果强依赖于示例相对于任务的代表性。
- 「少样本上下文学习」:这种方法通过为模型提供少量的示例(通常为几个至十几个),显著提升模型在特定任务上的表现。但在,示例的增加会显著增加大语言模型推理时的计算成本。示例的代表性和多样性也将影响其生成效果。

在大语言模型的预训练阶段,模型从大量文本中学习潜在的概念。当运用上下文学习进行推理时,大语言模型借助演示示例来“锚定”其在预训练期间所习得的相关概念,从而进行上下文学习,并对问题进行预测。
模型之所以能给出正确答案,是因为模型在预训练时已经学习到与情感相关的概念,比如积极情感的表现形式(满意的笑容,手舞足蹈…..)、句法结构和句法关系等等,当模型在推理时,借助「浣熊吃了一包麻辣味的干脆面,辣得肚子疼。\n 消极」等示例“锚定”到情感等相关概念,并基于这些概念,给出问题答案。
2.1 演示示例选择
演示示例在引导大语言模型理解任务中扮演着重要作用,其内容和质量直接影响着学习效果,演示示例选择主要依靠相似性和多样性:
- 「相似性」:精心挑选出与待解决问题最为相近的示例。相似性可以从多个层面进行度量,如语言层面的相似性(包括关键字匹配或语义相似度匹配)、结构相似性等等。通过选取相似的示例,能够为模型提供与待解决问题接近的参照,使大语言模型更易理解该问题。
- 「多样性」:所选的示例涵盖尽量广的内容,扩大演示示例对待解决问题的覆盖范围。多样化的示例能够帮助模型从不同的角度去理解任务,增强其应对各种问题的能力。
直接检索
给定一组候选示例,直接检索的方法依据候选示例与待解决问题间的相似性对候选示例进行排序,然后选取排名靠前的 K 个示例。

直接检索的代表性方法是 KATE:
- 利用 RoBERTa 对待解决问题和候选示例(移除标签)进行编码。
- 然后通过计算解决问题编码和候选示例编码间的向量余弦相似度对二者的相似度进行评分。
- 基于此评分,选择评分最高的 K 个示例作为上下文学习的演示示例。
直接检索的方法简单易操作,是目前应用广泛的示例选择策略之一。但是,其未对示例的多样性进行考虑,选择出的示例可能趋向同质化。
聚类检索
聚类检索方法采用先聚类后检索的方法来保证检索结果的多样性。其先把所有候选示例划分为K 个簇,然后从每个簇中选取最为相似的一个示例。

Self-Prompting 是其中的代表性方法:
- 首先将候选示例和待解决问题编码成向量形式。
- 接着运用K-Means 算法把示例集合聚为 K 个簇。
- 依照问题与示例之间的余弦相似度,从每个簇中选取与问题最相似的示例,由此得到 K 个示例。
虽然聚类检索方法提高了示例的多样性,但因为有些簇与问题可能并不相似,导致选择的示例的相似性可能不够高。
迭代检索
为了兼顾相似性和多样性,迭代检索策略应运而生。迭代检索首先挑选与问题高度相似的示例,随后在迭代过程中,结合当前问题和已选示例,动态选择下一个示例,从而确保所选示例的相似性和多样性。

RetICL 是迭代检索的代表性方法:
- 根据当前问题初始化基于 LSTM 的检索器内部状态,并选择一个示例。
- 接着根据当前问题和所选示例集更新检索器内部状态,并选择下一个示例。
- 这一过程不断迭代,直到得到 k 个示例。
尽管迭代检索在计算上相对复杂,但其能够生成更优的示例集,在复杂任务中展现出更好的适应性和灵活性。
2.2 演示示例的影响
我们已经讨论了演示示例选择对上下文学习的重要性。接下来,我们将继续探讨演示示例的格式、输入-标签映射、演示示例数量及顺序对上下文学习的影响。
演示示例的格式
不同的任务对于示例格式的要求不同:
- 对于简单的任务,我们只需要在演示示例中给出输入以及输出即可。
- 但是,一些复杂推理任务,例如算术、代码等,仅仅给出输入和输出不足以让模型掌握其中的推理过程。在这种情况下,以思维链的形式构造示例,即在输入和输出之间添加中间推理步骤,能帮助模型逐步推理并学习到更复杂的映射关系。
输入-输出映射
对于一个包含输入、输出的示例,大语言模型旨在从中学习到输入-输出映射,以完成目标任务。如果给定示例中的输入-输出映射是错误的,势必会对上下文学习的效果产生影响。
对输入-输出映射错误的敏感性与模型规模大小有关。
- 较大的模型对输入-输出映射的正确性表现出更高的敏感性。
- 较小的模型对输入-输出映射错误的敏感性较弱。
演示示例的数量和顺序
增加演示示例的数量通常能够提升上下文学习性能,但随着示例数量的增多,性能提升的速率会逐渐减缓。相较于分类任务,生成任务更能从增加的示例数量中获益。
演示示例的顺序同样是影响上下文学习性能的关键因素,不同示例顺序下的模型表现存在显著差异。
- 最优的示例顺序具有模型依赖性,即对某一模型有效的示例顺序未必适用于其他模型。
- 示例顺序的选择也受到所使用数据集的特定特性影响
2.3 预训练数据的影响
预训练数据是上下文学习能力的来源,深刻影响着上下文学习的性能。对预训练数据而言,以下三方面因素是影响上下文学习性能的关键:
- 「领域丰富度」:预训练数据的所覆盖的领域的丰富度直接影响模型的领域泛化能力。在丰富的跨领域语料库进行预训练的模型具备更稳定的上下文学习能力。而单一领域的语料库可能限制模型的适应性,即使该领域与目标任务高度相关,也无法保证最佳的上下文学习性。
- 「任务多样性」:预训练数据中的任务多样性是提升上下文学习性能的重要因素。多样化的任务类型有助于模型学习到更广泛的知识和技能,增强其任务泛化能力,从而在面对新任务时表现也更为出。
- 「训练数据的分布特性」:训练数据中存在突发性分布和罕见类别时,能够增强模型的上下文学习能力。突发性分布使得“文本-标签映射”的数据模式在整个训练过程中得以反复出现,罕见类别增强模型处理少见或新颖输入的能力,从而提升模型上下文学习的表现。
2.4 预训练模型的影响
预训练模型对上下文学习的性能影响主要体现在模型参数规模上。当模型参数达到一定的规模时,上下文学习才能得以涌现。
通常,模型的参数数量需达到亿级别及以上。常见的拥有上下文学习能力的模型中,规模最小的是来自阿里巴巴通义实验室的 Qwen2-0.5B 模型,具有 5 亿参数。
第 3 节 思维链
在面对算术求解、常识判断和符号推理等需要复杂推理能力的任务时,模型参数规模的增长并未带来预期的性能突破,这种现象被称作“Flat Scaling Curves”。
思维链提示(Chain-of-Thought,CoT)通过模拟人类解决复杂问题时的思考过程,引导大语言模型在生成答案的过程中引入一系列的中间推理步骤。这种方法不仅能够显著提升模型在推理任务上的表现,而且还能够揭示模型在处理复杂问题时的内部逻辑和推理路径。
CoT 方法的核心是构造合适的 Prompt 以触发大语言模型一步一步生成推理路径,并生成最终答案。早期方法在构造 Prompt 时,加入少量包含推理过程的样本示例(Few-Shot Demonstrations),来引导模型一步一步生成答案。

在 CoT 核心思想的指引下,衍生出了一系列的扩展的方法。这些扩展的方法按照其推理方式的不同,可以归纳为三种模式:按部就班、三思后行和集思广益。
- 「按部就班」:模型一步接着一步地进行推理,推理路径形成了一条逻辑连贯的链条。在这种模式下,模型像是在遵循一条预设的逻辑路径,“按部就班”的一步步向前。这种模式以CoT、Zero-Shot CoT、Auto-CoT 等方法为代表。
- 「三思后行」:模型每一步都停下来评估当前的情况,然后从多个推理方向中选择出下一步的行进方向。在这种模式下,模型像是在探索一片未知的森林,模型在每一步都会停下来评估周围的环境,“三思后行”以找出最佳推理路径。这种模式以ToT、GoT 等方法为代表。
- 「集思广益」:模型同时生成多条推理路径并得到多个结果,然后整合这些结果,得到一个更为全面和准确的答案。在这种模式下,模型像是在召开一场智者的会议,每个智者都带来了自己的见解,最终通过讨论和整合,“集思广益”得出一个更优的结论。这一类模式以Self-Consistency 等方法为代表。

3.1 按部就班
原始的少样本思维链(CoT)方法就采用了按部就班模式。其通过手工构造几个一步一步推理回答问题的例子作为示例放入 Prompt 中,来引导模型一步一步生成推理步骤,并生成最终的答案。
这种方法在提升模型推理能力方面取得了一定的成功,但是需要费时费力地手工编写大量 CoT 示例,并且过度依赖于CoT 的编写质量。
Zero-Shot CoT
Zero-Shot CoT 通过简单的提示,如“Let’s think step by step”,引导模型自行生成一条推理链。其无需手工标注的 CoT 示例,减少了对人工示例的依赖,多个推理任务上展现出了与原始少样本CoT 相媲美甚至更优的性能。

Zero-Shot CoT 使用两阶段方法来回答问题:
- 首先,在第一阶段,在问题后面跟上一句“
让我们一步一步思考”或者“Let’s think step by step”来作为 CoT 的提示触发词,来指示大语言模型先生成中间推理步骤,再生成最后的答案。 - 在第二阶段,把原始的问题以及第一阶段生成的推理步骤拼接在一起,在末尾加上一句“
Therefore, the answer is”或者“因此,最终答案为”,把这些内容输给大语言模型,让他输出最终的答案。
Auto CoT
Auto-CoT 引入与待解决问题相关的问题及其推理链作为示例,以继续提升CoT 的效果。相关示例的生成过程是由大语言模型自动完成的,无需手工标注。

Auto-CoT 的流程如下:
- 利用聚类技术从问题库中筛选出与用户提问位于一个簇中的问题。
- 然后,借助 Zero-Shot CoT 的方式,为筛选出的问题生成推理链,形成示例。这些示例包含了不同问题及其对应的推理内容,可为模型提供不同解题思路,辅助模型做出更为审慎的推理。
- 在这些示例的基础上,Auto-CoT 以“
让我们一步一步思考” 引导大语言模型生成针对用户问题的推理链和答案。
3.2 三思后行
三思后行模式强调的是在决策过程中的融入审慎和灵活性。在这种模式下,模型在每一步都会停下来评估当前的情况,判断是否需要调整推理方向。这种模式的核心在于允许模型在遇到困难或不确定性时进行回溯和重新选择,确保决策过程的稳健性和适应性。
思维树(Tree of Thoughts, ToT)
ToT 将推理过程构造为一棵思维树,其从以下四个角度对思维树进行构造:
- 「拆解」:将复杂问题拆分成多个简单子问题,每个子问题的解答过程对应一个思维过程。思维过程拆解的形式和粒度依任务类别而定,例如在数学推理任务上以一行等式作为一个思维过程,在创意写作任务上以内容提纲作为思维过程。
- 「衍生」:模型需要根据当前子问题生成可能的下一步推理方向。衍生有两种模式:样本启发和命令提示。样本启发以多个独立的示例作为上下文,增大衍生空间,适合于创意写作等思维空间宽泛的任务;命令提示在Prompt 中指明规则和要求,限制衍生空间,适用于24 点游戏等思维空间受限的任务。
- 「评估」:利用模型评估推理节点合理性。根据任务是否便于量化评分,选择投票或打分模式。投票模式中,模型在多节点中选择,依据票数决定保留哪些节点;打分模式中,模型对节点进行评分,依据评分结果决定节点的保留。
- 「搜索」:从一个或多个当前状态出发,搜索通往问题解决方案的路径。依据任务特点选择不同搜索算法。可以使用深度优先搜索、广度优先搜索等经典搜索算法,也可以使用A* 搜索、蒙特卡洛树搜索等启发式搜索算法。

思维图(Graph of Thoughts, GoT)
GoT 将树扩展为有向图,以提供了每个思维自我评估修正以及思维聚合的操作。
- 顶点代表某个问题(初始问题、中间问题、最终问题)的一个解决方案
- 有向边代表使用“出节点”作为直接输入,构造出思维“入节点”的过程。
GoT 相比于ToT 的核心优势是其思维自我反思,以及思维聚合的能力,能够将来自不同思维路径的知识和信息进行集成,形成综合的解决方案。
3.3 集思广益
集思广益模式强调的是通过汇集多种不同的观点和方法来优化决策过程。在这种模式下,模型不仅仅依赖于单一的推理路径,而是通过探索多种可能的解决方案,从中选择最优的答案。这种方法借鉴了集体智慧的概念,即通过整合多个独立的思考结果,可以得到更全面、更准确的结论。
Self-Consistency 实现过程可以分为三个步骤:
- 在随机采样策略下,使用 CoT 或 Zero-Shot CoT 的方式来引导大语言模型针对待解决问题生成一组多样化的推理路径。
- 针对大语言模型生成的每个推理内容,收集其最终的答案,并统计每个答案在所有推理路径中出现的频率。
- 选择出现频率最高的答案作为最终的、最一致的答案。

第 4 节 Prompt 技巧
经典的Prompt通常由任务说明,上下文,问题,输出格式等部分中的一个或几个组成:

4.1 规范 Prompt 编写
任务说明要明确
-「 明确的动词」:选择能够清晰表达动作的动词,如“判断”、“分类”、“生成”等,避免使用模糊的动词如“处理”或“操作”。
- 「具体的名词」:使用具体的名词来定义任务的输出或目标,例如“积极”和“消极”在情感分类任务中提供了明确的分类标准。
- 「简洁明了」:任务说明应简洁且直接,避免冗长或复杂的句子结构,使模型能够快速抓住任务的核心要求。
- 「结构化布局」:在较长的Prompt 中,将任务说明放置在开头和结尾,因为模型通常更关注这些部分的信息。这种布局有助于确保模型首先和最后接触到的是最关键的任务信息。

上下文丰富且清晰
一个丰富且清晰的上下文能够显著提升模型的理解和回答准确率。
- 上下文的丰富性体现在其内容的多样性和相关性。
- 上下文的清晰性则要求上下文信息必须与问题紧密相关,避免包含冗余或不必要的信息。

输出格式要规范
为了确保输出格式的规范性,可以采取以下措施:
- 「明确指定输出格式」:在Prompt 中明确指出希望模型使用的输出格式,如“请以 JSON 格式返回结果”,并且选择广泛接受和易于处理的输出格式,如JSON、CSV 等,易于解析和数据交换。
- 「提供输出格式的示例」:在 Prompt 中提供一个输出格式的具体示例,比如在 JSON 中明确指出关键字,帮助模型理解预期的输出结构。

排版要清晰
为了确保 Prompt 的排版清晰,可以采取以下措施:
- 「使用一致的分隔符」:选择并坚持使用一种或几种分隔符(如
#、###、—等),以区分不同的 Prompt 部分。 - 「合理使用空白和缩进」:通过增加空白行和适当的缩进,增强 Prompt 的可读性,帮助模型区分不同的内容块。
- 「清晰的标题和子标题」:为每个部分提供清晰的标题或子标题,使模型能够快速识别每个部分的主题。

4.2 合理归纳提问
复杂问题拆解
在处理复杂问题时,我们可以将问题分解为更小、更易于理解的子问题,并逐一解决。在计算机算法设计中,这种策略被称为“分而治之”,其基本理念是通过逐一解决子问题,最终达成解决整个问题的目标。
这一过程包括两个关键步骤:分步引导和归纳总结。
- 在分步引导阶段,我们需将复杂问题细化为多个子问题,并引导模型针对每个子问题进行深入分析和回答。这一步骤旨在确保每个子问题都能得到详尽的解答,从而为后续的归纳总结奠定坚实基础。
- 在归纳总结阶段,我们将各个子问题的答案进行汇总,并综合形成最终的全面回答。这一步骤不仅有助于我们全面把握问题的各个方面,还能确保最终答案的准确性和完整性。

追问
通过在对话中进行追问,用户可以引导大语言模型的输出更贴合心意的内容。这种对话形式的交互不仅可以促进更深层次的理解和更为丰富的讨论,而且有助于更精确地表达用户的真实想法,从而更好地指导模型的思考,使其输出更加贴合用户需求。
深入追问
深入追问的形式是指用户可以根据大语言模型的输出继续发问来深入挖掘特定话题的深层信息。这种追问适用于需要对某个概念、现象或过程有详尽解释的场景。

扩展追问
扩展追问是一种在大语言模型给出回答的基础上,进一步要求模型提供更多相关信息或例子的提问方式,其目的在于拓宽讨论的广度,收集更多数据、例证或选项,帮助用户获得更广泛的视角,增加对话题的理解。

反馈追问
反馈追问的形式是在大语言模型的输出不符合预期或存在错误时,提供反馈,指出问题所在,并请求模型进行更正或澄清。其目的在于通过反馈机制提升模型的准确性,确保信息的正确性。

4.3 适时使用 CoT
何时使用CoT
在决定何时使用CoT 时,需要对任务类别、模型规模以及模型能力三方面因素进行考虑。
- 在任务类别方面,CoT 技术特别适用于需要复杂推理的任务,如算术、常识和符号推理。对于简单问题,标准的 Prompt 方法已足够有效,使用 CoT 可能难以提升效果,反而可能引入不必要的复杂性。

- 在模型规模方面,CoT 技术应用于参数量超过千亿的巨型模型时,能够显著提升其性能。在规模较小的模型上应用 CoT 技术可能会遭遇挑战,如生成逻辑不连贯的思维链,或导致最终结果的准确性不如直接的标准提示方法。

- 在模型能力方面,CoT 是否起效与模型在预训练阶段是否进行过推理方面的指令微调有关。对于那些未经推理方面的指令微调的大语言模型,适当的 CoT 提示能够激发其卓越的CoT 推理能力。对于已经历过推理方面的指令微调的大语言模型,即便在没有 CoT 指令的情况下,也能自发生成条理清晰的中间推理步骤。在许多情况下,这些模型在没有 CoT 指令的条件下反而展现出更佳的性能。
灵活使用CoT
调整 CoT 的详细程度
我们可以指定 CoT 输出的详细程度,以适应不同的用户需求。
- 对于简单的计算问题,在用户不需要推理的中间过程时,我们可以直接给出最终乘法和加法的结果。
- 对于复杂的计算、推理问题,或者用户需要理解中间推理过程时,我们需要通过样例进行引导,以使其展示完整的推理步骤。
使用不同的 CoT 形式
我们可以根据不同任务场景,选择不同的CoT 形式。
- 在不需要特定领域知识,仅需对问题进行逻辑推理和逐步分析时,可以使用 Zero-Shot CoT 或者Auto CoT 的方式,通过“让我们一步一步思考”这种 CoT 提示触发词,来引导模型以CoT 的形式回答内容。
- 在处理需要高准确度和可靠性的任务时,可要求模型生成多个回答并提出最终结果,进而运用 Self-Consistency 方法筛选出一致性最强的答案。

4.4 善用心理暗示
在硅谷,流传着一句创业金句,“Fake it till you make it”(假装它直到你成功)。这句话具体含义为,先吹嘘你的想法,进而吸引资本和人才,最终在实践中努力追赶并实现既定目标。这句话源自一种积极的心理暗示方法:通过模仿自信和乐观的心态,一个人可以在他们的现实生活中实现这些品质。
角色扮演
通过 Prompt 指导大语言模型扮演特定角色能够显著改善其与角色相关的技能。这种技术被称为角色扮演(Role-Playing),它可使大语言模型能够生成更为准确、角色相关的内容。为了构建一个有效的角色,需要在指令中包含具体属性、职责、知识和技能。

情景代入
通过将模型置于特定的“情景”或“环境”中,可以影响其生成的文本内容和风格。情景代入指的是将特定情境下所需的专业知识、历史背景等信息嵌入到模型的响应中。

第 5 节 相关应用
5.1 基于大语言模型的Agent
智能体(Agent)是一种能够自主感知环境并采取行动以实现特定目标的实体。 基于大语言模型的 Agent 系统中,大语言模型作为核心控制器,能够完成规划、决策、行动等操作,这些操作很多都依赖 Prompt 完成。
该框架主要由四大部分组成:配置模块(Profile)、记忆模块(Memory)、计划模块(Planning)和行动模块(Action)。

- 「配置模块」利用Prompt 工程中的角色扮演技术,来定义Agent 的角色。设定Agent 的背景、技能、职责等信息,这些角色设定信息以上下文的形式嵌入到 Agent 每一次交互的 Prompt 中。
- 「记忆模块」是 Agent 的知识与交互记忆的存储中心。记忆模块通过检索增强等技术获取记忆,这一过程涉及到使用Prompt 工程中的上下文学习技术来构造和优化查询,从而帮助更加精准检索到相关记忆。在获取记忆之后,将这些记忆将被添加到交互的Prompt 中,帮助Agent 利用这些记忆知识,实现更为准确高效的决策与行动。
- 「计划模块」则扮演着任务分解者的角色,它将复杂的任务细化为一系列更为简单、易于管理的子任务。在这一过程中,通过 Prompt 工程中的思维链技术,让大语言模型分解任务并进行规划,按照链式顺序输出子任务;同时还利用了上下文学习技术,构造少样本示例来调控分解出的子任务的粒度,确保整个任务流程的顺畅与高效。
- 「行动模块」负责将计划模块生成的计划转化为具体的行动步骤,并借助外部工具执行这些步骤以实现 Agent 的目标。通常会为 Agent 提供工具 API 的接口,把调用 API 接口的示例作为上下文,让大语言模型生成调用 API 的代码,之后执行这些代码,从而得到执行步骤的结果。
5.2 数据合成
公共领域的高质量语言数据,如书籍、新闻、科学论文和维基百科,预计将在2026 年左右耗尽。特定领域的垂直数据因隐私保护和标注难度高等问题,难以大量提供高质量数据,限制了模型的进一步发展。
利用大语言模型强大的思维能力、指令跟随能力,来合成高质量数据是一种补充或替代真实数据的有效手段。Self-Instruct 通过Prompt 工程技术构建 Prompt,通过多步骤调用大语言模型,并依据已有的少量指令数据,合成大量丰富且多样化的指令数据。

Self-Instruct 包含构建任务池、指令生成、指令分类、数据生成、数据过滤五个步骤。
- 「构建任务池」人工手工设计了 175 个指令数据集,作为初始任务池,后续模型会不断参考任务池的示例,来生成指令数据,并将生成的指令数据加入任务池中。
- 「指令生成」从任务池中随机抽取 8 个现有指令作为演示示例组成 Prompt中的上下文,以少样本学习的方式构造 Prompt 让模型生成指令。
- 「指令分类」编写若干条“指令-分类任务/生成任务”样例对,作为上下文构造 Prompt,让模型判断该指令对应的任务是分类任务还是生成任务。
- 「数据生成」对分类任务和生成任务使用 Prompt 工程中的上下文学习技术,构造不同的Prompt 来生成指令数据中的输入部分和回答部分。
- 「数据过滤」通过设置各种启发式方法过滤低质量或者高重复度的指令数据,然后将剩余的有效任务添加到任务池中。
5.3 Text-to-SQL
Text-to-SQL 技术可以将自然语言查询翻译成可以在数据库中执行的 SQL 语句,是实现零代码或低代码数据查询的有效途径。

5.4 GPTS
GPTs 是 OpenAI 推出的支持用户自定义的 GPT 应用,允许用户通过编写 Prompt,添加工具等方式创建定制版的 GPT 应用,也可以使用别人分享的 GPTs 模型。
