提示技术零样本提示二、少样本提示三、链式思考CoT提示四、自动思维链Auto-CoT五、自我一致性六、生成知识提示七、链式提示链式提示使用示例文档问答中的链式提示{{文档}}quotes八、思维树 (ToT)九、检索增强生成 (RAG)十、自动推理并使用工具 (ART)十一、自动提示工程师APE十二、Active-Prompt十三、方向性刺激提示十四、PAL程序辅助语言模型十五、ReAct 框架十六、多模态思维链提示方法十七、总结零样本提示提示将文本分类为中性、负面或正面。文本我认为这次假期还可以。情感输出中性请注意在上面的提示中我们没有向模型提供任何示例——这就是零样本能力的作用。当零样本不起作用时建议在提示中提供演示或示例这就引出了少样本提示。在下一节中我们将演示少样本提示。二、少样本提示虽然大型语言模型展示了惊人的零样本能力但在使用零样本设置时它们在更复杂的任务上仍然表现不佳。少样本提示可以作为一种技术以启用上下文学习我们在提示中提供演示以引导模型实现更好的性能。演示作为后续示例的条件我们希望模型生成响应。提示“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是我们在非洲旅行时看到了这些非常可爱的whatpus。“farduddle”是指快速跳上跳下。一个使用farduddle这个词的句子的例子是输出当我们赢得比赛时我们都开始庆祝跳跃。我们可以观察到模型通过提供一个示例即1-shot已经学会了如何执行任务。对于更困难的任务我们可以尝试增加演示例如3-shot、5-shot、10-shot等。以下是在进行少样本学习时关于演示/范例的一些额外提示“标签空间和演示指定的输入文本的分布都很重要无论标签是否对单个输入正确”使用的格式也对性能起着关键作用即使只是使用随机标签这也比没有标签好得多。其他结果表明从真实标签分布而不是均匀分布中选择随机标签也有帮助。让我们尝试一些例子。让我们首先尝试一个随机标签的例子意味着将标签Negative和Positive随机分配给输入提示这太棒了// Negative这太糟糕了// Positive哇那部电影太棒了// Positive多么可怕的节目//输出Negative即使标签已经随机化我们仍然得到了正确的答案。请注意我们还保留了格式这也有助于。实际上通过进一步的实验我们发现我们正在尝试的新GPT模型甚至对随机格式也变得更加稳健。例如提示Positive This is awesome!This is bad! NegativeWow that movie was rad!PositiveWhat a horrible show! –输出Negative上面的格式不一致但模型仍然预测了正确的标签。我们必须进行更彻底的分析以确认这是否适用于不同和更复杂的任务包括提示的不同变体。少样本提示的限制标准的少样本提示对许多任务都有效但仍然不是一种完美的技术特别是在处理更复杂的推理任务时。让我们演示为什么会这样。您是否还记得之前提供的任务这组数字中的奇数加起来是一个偶数15、32、5、13、82、7、1。A如果我们再试一次模型输出如下是的这组数字中的奇数加起来是107是一个偶数。这不是正确的答案这不仅突显了这些系统的局限性而且需要更高级的提示工程。让我们尝试添加一些示例看看少样本提示是否可以改善结果。提示这组数字中的奇数加起来是一个偶数4、8、9、15、12、2、1。A答案是False。这组数字中的奇数加起来是一个偶数17、10、19、4、8、12、24。A答案是True。这组数字中的奇数加起来是一个偶数16、11、14、4、8、13、24。A答案是True。这组数字中的奇数加起来是一个偶数17、9、10、12、13、4、2。A答案是False。这组数字中的奇数加起来是一个偶数15、32、5、13、82、7、1。A输出答案是True。这没用。似乎少样本提示不足以获得这种类型的推理问题的可靠响应。上面的示例提供了任务的基本信息。如果您仔细观察我们引入的任务类型涉及几个更多的推理步骤。换句话说如果我们将问题分解成步骤并向模型演示这可能会有所帮助。总的来说提供示例对解决某些任务很有用。当零样本提示和少样本提示不足时这可能意味着模型学到的东西不足以在任务上表现良好。从这里开始建议开始考虑微调您的模型或尝试更高级的提示技术。接下来我们将讨论一种流行的提示技术称为思维链提示。三、链式思考CoT提示您可以将其与少样本提示相结合以获得更好的结果以便在回答之前进行推理的更复杂的任务。提示这组数中的奇数加起来是偶数4、8、9、15、12、2、1。A将所有奇数相加9、15、1得到25。答案为False。这组数中的奇数加起来是偶数17、10、19、4、8、12、24。A将所有奇数相加17、19得到36。答案为True。这组数中的奇数加起来是偶数16、11、14、4、8、13、24。A将所有奇数相加11、13得到24。答案为True。这组数中的奇数加起来是偶数17、9、10、12、13、4、2。A将所有奇数相加17、9、13得到39。答案为False。这组数中的奇数加起来是偶数15、32、5、13、82、7、1。A输出将所有奇数相加15、5、13、7、1得到41。答案为False。哇我们可以看到在提供推理步骤时得到了完美的结果。实际上我们可以通过提供更少的示例来解决此任务即仅一个示例似乎就足够了提示这组数中的奇数加起来是偶数4、8、9、15、12、2、1。A将所有奇数相加9、15、1得到25。答案为False。这组数中的奇数加起来是偶数15、32、5、13、82、7、1。A输出将所有奇数相加15、5、13、7、1得到41。答案为False。最近提出的一个新想法是 零样本CoT提示我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果输出11个苹果答案是不正确的现在让我们尝试使用特殊提示。提示我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果让我们逐步思考。输出首先您从10个苹果开始。您给了邻居和修理工各2个苹果所以您还剩下6个苹果。然后您买了5个苹果所以现在您有11个苹果。最后您吃了1个苹果所以您还剩下10个苹果。令人印象深刻的是这个简单的提示在这个任务中非常有效。这在您没有太多示例可用于提示时特别有用。四、自动思维链Auto-CoTAuto-CoT 主要由两个阶段组成阶段1问题聚类将给定问题划分为几个聚类阶段2演示抽样从每组数组中选择一个具有代表性的问题并使用带有简单启发式的 Zero-Shot-CoT 生成其推理链简单的启发式方法可以是问题的长度例如60 个 tokens和理由的步骤数例如5 个推理步骤。这鼓励模型使用简单而准确的演示。该过程如下图所示五、自我一致性通过少样本 CoT 采样多个不同的推理路径并使用生成结果选择最一致的答案。这有助于提高 CoT 提示在涉及算术和常识推理的任务中的性能。提示当我6岁时我的妹妹是我的一半年龄。现在我70岁了我的妹妹多大输出35输出是错误的我们如何通过自我一致性来改进这个问题让我们试试。提示Q林中有15棵树。林业工人今天将在林中种树。完成后将有21棵树。林业工人今天种了多少棵树A我们从15棵树开始。后来我们有21棵树。差异必须是他们种树的数量。因此他们必须种了21-15 6棵树。答案是6。Q停车场有3辆汽车又来了2辆汽车停车场有多少辆汽车A停车场已经有3辆汽车。又来了2辆。现在有3 2 5辆汽车。答案是5。QLeah有32块巧克力她的姐姐有42块。如果他们吃了35块他们总共还剩多少块ALeah有32块巧克力Leah的姐姐有42块。这意味着最初有32 42 74块巧克力。已经吃了35块。因此他们总共还剩74-35 39块巧克力。答案是39。QJason有20个棒棒糖。他给Denny一些棒棒糖。现在Jason只有12个棒棒糖。Jason给Denny多少棒棒糖AJason有20个棒棒糖。因为他现在只有12个所以他必须把剩下的给Denny。他给Denny的棒棒糖数量必须是20-12 8个棒棒糖。答案是8。QShawn有五个玩具。圣诞节他从他的父母那里得到了两个玩具。他现在有多少个玩具A他有5个玩具。他从妈妈那里得到了2个所以在那之后他有5 2 7个玩具。然后他从爸爸那里得到了2个所以总共他有7 2 9个玩具。答案是9。Q服务器房间里有9台计算机。从周一到周四每天都会安装5台计算机。现在服务器房间里有多少台计算机A从周一到周四有4天。每天都添加了5台计算机。这意味着总共添加了4 * 5 20台计算机。一开始有9台计算机所以现在有9 20 29台计算机。答案是29。QMichael有58个高尔夫球。星期二他丢失了23个高尔夫球。星期三他又丢失了2个。星期三结束时他还剩多少个高尔夫球AMichael最初有58个球。星期二他丢失了23个所以在那之后他有58-23 35个球。星期三他又丢失了2个所以现在他有35-2 33个球。答案是33。QOlivia有23美元。她用每个3美元的价格买了五个百吉饼。她还剩多少钱A她用每个3美元的价格买了5个百吉饼。这意味着她花了15美元。她还剩8美元。Q当我6岁时我的妹妹是我的一半年龄。现在我70岁了我的妹妹多大A输出 1当我6岁时我的妹妹是我的一半年龄也就是3岁。现在我70岁了所以她是70-3 67岁。答案是67。输出 2当叙述者6岁时他的妹妹是他年龄的一半也就是3岁。现在叙述者70岁了他的妹妹应该是70-3 67岁。答案是67。输出 3当我6岁时我的妹妹是我的一半年龄也就是3岁。现在我70岁了所以她是70/2 35岁。答案是35。六、生成知识提示提示高尔夫球的一部分是试图获得比其他人更高的得分。是或否输出是。这种错误揭示了 LLM 在执行需要更多关于世界的知识的任务时的局限性。我们如何通过生成知识来改进呢首先我们生成一些“知识”提示输入希腊比墨西哥大。知识希腊的面积约为131,957平方公里而墨西哥的面积约为1,964,375平方公里使墨西哥比希腊大了1,389%。输入眼镜总是会起雾。知识当你的汗水、呼吸和周围的湿度中的水蒸气落在冷的表面上冷却并变成微小的液滴时会在眼镜镜片上产生冷凝。你看到的是一层薄膜。你的镜片相对于你的呼吸会比较凉尤其是当外面的空气很冷时。输入鱼有思考能力。知识鱼比它们看起来更聪明。在许多领域如记忆力它们的认知能力与或超过非人类灵长类动物等“更高级”的脊椎动物。鱼的长期记忆帮助它们跟踪复杂的社交关系。输入一个人一生中吸烟很多香烟的常见影响是患肺癌的几率高于正常水平。知识那些一生中平均每天吸烟不到一支香烟的人患肺癌的风险是从不吸烟者的9倍。在每天吸烟1到10支香烟之间的人群中死于肺癌的风险几乎是从不吸烟者的12倍。输入一块石头和一颗卵石大小相同。知识卵石是一种根据Udden-Wentworth沉积学尺度的颗粒大小为4到64毫米的岩屑。卵石通常被认为比颗粒直径2到4毫米大比卵石直径64到256毫米小。输入高尔夫球的一部分是试图获得比其他人更高的得分。知识知识1高尔夫球的目标是以最少的杆数打完一组洞。一轮高尔夫球比赛通常包括18个洞。每个洞在标准高尔夫球场上一轮只打一次。每个杆计为一分总杆数用于确定比赛的获胜者。知识2高尔夫球是一项精密的球杆运动竞争选手或高尔夫球手使用许多类型的球杆用最少的杆数将球打入球场上一系列洞中。目标是以最低的分数完成比赛该分数是通过将每个洞上所用的杆数相加计算出来的。得分最低的选手赢得比赛。下一步是将知识整合并得出预测。我将问题重新格式化为 QA 格式以指导答案格式。提示问题高尔夫球的一部分是试图获得比其他人更高的得分。是或否知识高尔夫球的目标是以最少的杆数打完一组洞。一轮高尔夫球比赛通常包括18个洞。每个洞在标准高尔夫球场上一轮只打一次。每个杆计为一分总杆数用于确定比赛的获胜者。解释和答案答案 1置信度非常高不是高尔夫球的目标不是获得比其他人更高的得分。相反目标是以最少的杆数打完一组洞。总杆数用于确定比赛的获胜者而不是总得分。问题高尔夫球的一部分是试图获得比其他人更高的得分。是或否知识高尔夫球是一项精密的球杆运动竞争选手或高尔夫球手使用许多类型的球杆用最少的杆数将球打入球场上一系列洞中。目标是以最低的分数完成比赛该分数是通过将每个洞上所用的杆数相加计算出来的。得分最低的选手赢得比赛。解释和答案答案 2置信度要低得多是的高尔夫球的一部分是试图获得比其他人更高的得分。每个选手都试图以最少的杆数打完一组洞。总杆数用于确定比赛的获胜者而不是总得分。得分最低的选手赢得比赛。这个例子发生了一些非常有趣的事情。在第一个答案中模型非常自信但在第二个答案中不太自信。七、链式提示为了提高大语言模型的性能使其更可靠一个重要的提示工程技术是将任务分解为许多子任务。 确定子任务后将子任务的提示词提供给语言模型得到的结果作为新的提示词的一部分。 这就是所谓的链式提示prompt chaining一个任务被分解为多个子任务根据子任务创建一系列提示操作。链式提示可以完成很复杂的任务。LLM 可能无法仅用一个非常详细的提示完成这些任务。在链式提示中提示链对生成的回应执行转换或其他处理直到达到期望结果。除了提高性能链式提示还有助于提高 LLM 应用的透明度增加控制性和可靠性。这意味着您可以更容易地定位模型中的问题分析并改进需要提高的不同阶段的性能。链式提示在构建 LLM 驱动的对话助手和提高应用程序的个性化用户体验方面非常有用。链式提示使用示例文档问答中的链式提示提示链可以用于不同的场景这些场景可能涉及多个操作或转换。例如LLM 的一个常见用途是根据大型文本文档回答问题。想要更好阅读大文本文档可以设计两个不同的提示第一个提示负责提取相关引文以回答问题第二个提示则以引文和原始文档为输入来回答给定的问题。换句话说可以创建两个不同的提示来执行根据文档回答问题的任务。提示 1:你是一个很有帮助的助手。你的任务是根据文档回答问题。第一步是从文档中提取与问题相关的引文由####分隔。请使用输出引文列表。如果没有找到相关引文请回应“未找到相关引文”。-####{{文档}}-####这是整个提示的截图包括通过 user 角色传递的问题。提示 1 的输出Chain-of-thought (CoT) prompting[27]Generated knowledge prompting[37]Least-to-most prompting[38]Self-consistency decoding[39]Complexity-based prompting[41]Self-refine[42]Tree-of-thought prompting[43]Maieutic prompting[45]Directional-stimulus prompting[46]Textual inversion and embeddings[59]Using gradient descent to search for prompts[61][62][63][64]Prompt injection[65][66][67]在第一个提示中返回的引文现在可以用作下面第二个提示的输入。您可以对这些引文进行清理比如移除引用标志。可以在提示链中新建另一个提示来移除或使用这些引用标志但现在您可以忽略这些。然后第二个提示接收由第一个提示提取的相关引文并根据文档和这些提取的引文生成一个有帮助的回答。第二个提示可以是以下内容提示 2根据从文档中提取的相关引文由分隔和原始文档由####分隔请构建对问题的回答。请确保答案准确、语气友好且有帮助。{{文档}}Chain-of-thought (CoT) prompting[27]Generated knowledge prompting[37]Least-to-most prompting[38]Self-consistency decoding[39]Complexity-based prompting[41]Self-refine[42]Tree-of-thought prompting[43]Maieutic prompting[45]Directional-stimulus prompting[46]Textual inversion and embeddings[59]Using gradient descent to search for prompts[61][62][63][64]Prompt injection[65][66][67]提示 2 的输出文档中提到的提示技术包括Chain-of-thought (CoT) prompting[27]Generated knowledge prompting[37]Least-to-most prompting[38]Self-consistency decoding[39]Complexity-based prompting[41]Self-refine[42]Tree-of-thought prompting[43]Maieutic prompting[45]Directional-stimulus prompting[46]Textual inversion and embeddings[59]Using gradient descent to search for prompts[61][62][63][64]Prompt injection[65][66][67]每一种技术都采用独特的策略来增强或明确与大型语言模型的互动以产生期望的结果。如您所见简化并创建提示链是一种有用的提示方法其中响应需要经过多个操作或转换。八、思维树 (ToT)ToT 维护着一棵思维树思维由连贯的语言序列表示这个序列就是解决问题的中间步骤。使用这种方法LM 能够自己对严谨推理过程的中间思维进行评估。LM 将生成及评估思维的能力与搜索算法如广度优先搜索和深度优先搜索相结合在系统性探索思维的时候可以向前验证和回溯。ToT 框架原理如下ToT 需要针对不同的任务定义思维/步骤的数量以及每步的候选项数量。例如论文中的“算 24 游戏”是一种数学推理任务需要分成 3 个思维步骤每一步都需要一个中间方程。而每个步骤保留最优的best 5 个候选项。ToT 完成算 24 的游戏任务要执行广度优先搜索BFS每步思维的候选项都要求 LM 给出能否得到 24 的评估“sure/maybe/impossible”一定能/可能/不可能 。作者讲到“目的是得到经过少量向前尝试就可以验证正确sure的局部解基于‘太大/太小’的常识消除那些不可能impossible的局部解其余的局部解作为‘maybe’保留。”每步思维都要抽样得到 3 个评估结果。整个过程如下图所示从下图中报告的结果来看ToT 的表现大大超过了其他提示方法九、检索增强生成 (RAG)通用语言模型通过微调就可以完成几类常见任务比如分析情绪和识别命名实体。这些任务不需要额外的背景知识就可以完成。要完成更复杂和知识密集型的任务可以基于语言模型构建一个系统访问外部知识源来做到。这样的实现与事实更加一性生成的答案更可靠还有助于缓解“幻觉”问题。RAG 把一个信息检索组件和文本生成模型结合在一起。RAG 可以微调其内部知识的修改方式很高效不需要对整个模型进行重新训练。RAG 会接受输入并检索出一组相关/支撑的文档并给出文档的来源例如维基百科。这些文档作为上下文和输入的原始提示词组合送给文本生成器得到最终的输出。这样 RAG 更加适应事实会随时间变化的情况。这非常有用因为 LLM 的参数化知识是静态的。RAG 让语言模型不用重新训练就能够获取最新的信息基于检索生成产生可靠的输出。Lewis 等人2021提出一个通用的 RAG 微调方法。这种方法使用预训练的 seq2seq 作为参数记忆用维基百科的密集向量索引作为非参数记忆使通过神经网络预训练的检索器访问。这种方法工作原理概况如下十、自动推理并使用工具 (ART)ARTAutomatic Reasoning and Tool-use的工作原理如下接到一个新任务的时候从任务库中选择多步推理和使用工具的示范。在测试中调用外部工具时先暂停生成将工具输出整合后继续接着生成。ART 引导模型总结示范将新任务进行拆分并在恰当的地方使用工具。ART 采用的是零样本形式。ART 还可以手动扩展只要简单地更新任务和工具库就可以修正推理步骤中的错误或是添加新的工具。这个过程如下十一、自动提示工程师APE十二、Active-Prompt思维链CoT方法依赖于一组固定的人工注释范例。问题在于这些范例可能不是不同任务的最有效示例。为了解决这个问题提出了一种新的提示方法称为 Active-Prompt以适应 LLMs 到不同的任务特定示例提示用人类设计的 CoT 推理进行注释下面是该方法的说明。第一步是使用或不使用少量 CoT 示例查询 LLM。对一组训练问题生成 k 个可能的答案。基于 k 个答案计算不确定度度量使用不一致性。选择最不确定的问题由人类进行注释。然后使用新的注释范例来推断每个问题。十三、方向性刺激提示训练了一个可调节的策略 LM 来生成刺激/提示。越来越多地使用RL来优化 LLM。下图显示了方向性刺激提示与标准提示的比较。策略 LM 可以很小并且可以优化以生成指导黑盒冻结 LLM 的提示。十四、PAL程序辅助语言模型使用 LLMs 读取自然语言问题并生成程序作为中间推理步骤的方法。被称为程序辅助语言模型PAL它与思维链提示不同因为它不是使用自由形式文本来获得解决方案而是将解决步骤卸载到类似 Python 解释器的编程运行时中。LangChain 和 OpenAI GPT-3 为例。我们有兴趣开发一个简单的应用程序它能够解释所提出的问题并利用 Python 解释器提供答案。这是我们需要导入的包import openai from datetime import datetime from dateutil.relativedelta import relativedelta import os from langchain.llms import OpenAI from dotenv import load_dotenv让我们先配置一些环境load_dotenv() # API configuration openai.api_key os.getenv(OPENAI_API_KEY) # for LangChain os.environ[OPENAI_API_KEY] os.getenv(OPENAI_API_KEY)设置模型实例llm OpenAI(model_nametext-davinci-003, temperature0)设置提示问题question Today is 27 February 2023. I was born exactly 25 years ago. What is the date I was born in MM/DD/YYYY? DATE_UNDERSTANDING_PROMPT # Q: 2015 is coming in 36 hours. What is the date one week from today in MM/DD/YYYY? # If 2015 is coming in 36 hours, then today is 36 hours before. today datetime(2015, 1, 1) - relativedelta(hours36) # One week from today, one_week_from_today today relativedelta(weeks1) # The answer formatted with %m/%d/%Y is one_week_from_today.strftime(%m/%d/%Y) # Q: The first day of 2019 is a Tuesday, and today is the first Monday of 2019. What is the date today in MM/DD/YYYY? # If the first day of 2019 is a Tuesday, and today is the first Monday of 2019, then today is 6 days later. today datetime(2019, 1, 1) relativedelta(days6) # The answer formatted with %m/%d/%Y is today.strftime(%m/%d/%Y) # Q: The concert was scheduled to be on 06/01/1943, but was delayed by one day to today. What is the date 10 days ago in MM/DD/YYYY? # If the concert was scheduled to be on 06/01/1943, but was delayed by one day to today, then today is one day later. today datetime(1943, 6, 1) relativedelta(days1) # 10 days ago, ten_days_ago today - relativedelta(days10) # The answer formatted with %m/%d/%Y is ten_days_ago.strftime(%m/%d/%Y) # Q: It is 4/19/1969 today. What is the date 24 hours later in MM/DD/YYYY? # It is 4/19/1969 today. today datetime(1969, 4, 19) # 24 hours later, later today relativedelta(hours24) # The answer formatted with %m/%d/%Y is today.strftime(%m/%d/%Y) # Q: Jane thought today is 3/11/2002, but today is in fact Mar 12, which is 1 day later. What is the date 24 hours later in MM/DD/YYYY? # If Jane thought today is 3/11/2002, but today is in fact Mar 12, then today is 3/12/2002. today datetime(2002, 3, 12) # 24 hours later, later today relativedelta(hours24) # The answer formatted with %m/%d/%Y is later.strftime(%m/%d/%Y) # Q: Jane was born on the last day of Feburary in 2001. Today is her 16-year-old birthday. What is the date yesterday in MM/DD/YYYY? # If Jane was born on the last day of Feburary in 2001 and today is her 16-year-old birthday, then today is 16 years later. today datetime(2001, 2, 28) relativedelta(years16) # Yesterday, yesterday today - relativedelta(days1) # The answer formatted with %m/%d/%Y is yesterday.strftime(%m/%d/%Y) # Q: {question} .strip() \nllm_out llm(DATE_UNDERSTANDING_PROMPT.format(questionquestion)) print(llm_out)这将输出以下内容# If today is 27 February 2023 and I was born exactly 25 years ago, then I was born 25 years before. today datetime(2023, 2, 27) # I was born 25 years before, born today - relativedelta(years25) # The answer formatted with %m/%d/%Y is born.strftime(%m/%d/%Y)llm_out 是一段 python 代码我们可以使用 exec 执行它exec(llm_out) print(born)这将输出以下内容02/27/1998十五、ReAct 框架其中 LLMs 以交错的方式生成 推理轨迹 和 任务特定操作 。生成推理轨迹使模型能够诱导、跟踪和更新操作计划甚至处理异常情况。操作步骤允许与外部源如知识库或环境进行交互并且收集信息。ReAct 框架允许 LLMs 与外部工具交互来获取额外信息从而给出更可靠和实际的回应。结果表明ReAct 可以在语言和决策任务上的表现要高于几个最先进水准要求的的基线。ReAct 还提高了 LLMs 的人类可解释性和可信度。总的来说作者发现了将 ReAct 和链式思考 (CoT) 结合使用的最好方法是在推理过程同时使用内部知识和获取到的外部信息。ReAct 是一个将推理和行为与 LLMs 相结合通用的范例。ReAct 提示 LLMs 为任务生成口头推理轨迹和操作。这使得系统执行动态推理来创建、维护和调整操作计划同时还支持与外部环境(例如Wikipedia)的交互以将额外信息合并到推理中。下图展示了 ReAct 的一个示例以及执行问题回答所涉及的不同步骤。十六、多模态思维链提示方法传统的思维链提示方法侧重于语言模态。相比之下多模态思维链提示将文本和视觉融入到一个两阶段框架中。第一步涉及基于多模态信息的理性生成。接下来是第二阶段的答案推断它利用生成的理性信息。多模态CoT模型1B在ScienceQA基准测试中的表现优于GPT-3.5。十七、总结提示这里对文章进行总结例如以上就是今天要讲的内容本文仅仅简单介绍了pandas的使用而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
提示词工程基础知识(Prompt Engineering)-如何更好的使用AI-提示词技术
提示技术零样本提示二、少样本提示三、链式思考CoT提示四、自动思维链Auto-CoT五、自我一致性六、生成知识提示七、链式提示链式提示使用示例文档问答中的链式提示{{文档}}quotes八、思维树 (ToT)九、检索增强生成 (RAG)十、自动推理并使用工具 (ART)十一、自动提示工程师APE十二、Active-Prompt十三、方向性刺激提示十四、PAL程序辅助语言模型十五、ReAct 框架十六、多模态思维链提示方法十七、总结零样本提示提示将文本分类为中性、负面或正面。文本我认为这次假期还可以。情感输出中性请注意在上面的提示中我们没有向模型提供任何示例——这就是零样本能力的作用。当零样本不起作用时建议在提示中提供演示或示例这就引出了少样本提示。在下一节中我们将演示少样本提示。二、少样本提示虽然大型语言模型展示了惊人的零样本能力但在使用零样本设置时它们在更复杂的任务上仍然表现不佳。少样本提示可以作为一种技术以启用上下文学习我们在提示中提供演示以引导模型实现更好的性能。演示作为后续示例的条件我们希望模型生成响应。提示“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是我们在非洲旅行时看到了这些非常可爱的whatpus。“farduddle”是指快速跳上跳下。一个使用farduddle这个词的句子的例子是输出当我们赢得比赛时我们都开始庆祝跳跃。我们可以观察到模型通过提供一个示例即1-shot已经学会了如何执行任务。对于更困难的任务我们可以尝试增加演示例如3-shot、5-shot、10-shot等。以下是在进行少样本学习时关于演示/范例的一些额外提示“标签空间和演示指定的输入文本的分布都很重要无论标签是否对单个输入正确”使用的格式也对性能起着关键作用即使只是使用随机标签这也比没有标签好得多。其他结果表明从真实标签分布而不是均匀分布中选择随机标签也有帮助。让我们尝试一些例子。让我们首先尝试一个随机标签的例子意味着将标签Negative和Positive随机分配给输入提示这太棒了// Negative这太糟糕了// Positive哇那部电影太棒了// Positive多么可怕的节目//输出Negative即使标签已经随机化我们仍然得到了正确的答案。请注意我们还保留了格式这也有助于。实际上通过进一步的实验我们发现我们正在尝试的新GPT模型甚至对随机格式也变得更加稳健。例如提示Positive This is awesome!This is bad! NegativeWow that movie was rad!PositiveWhat a horrible show! –输出Negative上面的格式不一致但模型仍然预测了正确的标签。我们必须进行更彻底的分析以确认这是否适用于不同和更复杂的任务包括提示的不同变体。少样本提示的限制标准的少样本提示对许多任务都有效但仍然不是一种完美的技术特别是在处理更复杂的推理任务时。让我们演示为什么会这样。您是否还记得之前提供的任务这组数字中的奇数加起来是一个偶数15、32、5、13、82、7、1。A如果我们再试一次模型输出如下是的这组数字中的奇数加起来是107是一个偶数。这不是正确的答案这不仅突显了这些系统的局限性而且需要更高级的提示工程。让我们尝试添加一些示例看看少样本提示是否可以改善结果。提示这组数字中的奇数加起来是一个偶数4、8、9、15、12、2、1。A答案是False。这组数字中的奇数加起来是一个偶数17、10、19、4、8、12、24。A答案是True。这组数字中的奇数加起来是一个偶数16、11、14、4、8、13、24。A答案是True。这组数字中的奇数加起来是一个偶数17、9、10、12、13、4、2。A答案是False。这组数字中的奇数加起来是一个偶数15、32、5、13、82、7、1。A输出答案是True。这没用。似乎少样本提示不足以获得这种类型的推理问题的可靠响应。上面的示例提供了任务的基本信息。如果您仔细观察我们引入的任务类型涉及几个更多的推理步骤。换句话说如果我们将问题分解成步骤并向模型演示这可能会有所帮助。总的来说提供示例对解决某些任务很有用。当零样本提示和少样本提示不足时这可能意味着模型学到的东西不足以在任务上表现良好。从这里开始建议开始考虑微调您的模型或尝试更高级的提示技术。接下来我们将讨论一种流行的提示技术称为思维链提示。三、链式思考CoT提示您可以将其与少样本提示相结合以获得更好的结果以便在回答之前进行推理的更复杂的任务。提示这组数中的奇数加起来是偶数4、8、9、15、12、2、1。A将所有奇数相加9、15、1得到25。答案为False。这组数中的奇数加起来是偶数17、10、19、4、8、12、24。A将所有奇数相加17、19得到36。答案为True。这组数中的奇数加起来是偶数16、11、14、4、8、13、24。A将所有奇数相加11、13得到24。答案为True。这组数中的奇数加起来是偶数17、9、10、12、13、4、2。A将所有奇数相加17、9、13得到39。答案为False。这组数中的奇数加起来是偶数15、32、5、13、82、7、1。A输出将所有奇数相加15、5、13、7、1得到41。答案为False。哇我们可以看到在提供推理步骤时得到了完美的结果。实际上我们可以通过提供更少的示例来解决此任务即仅一个示例似乎就足够了提示这组数中的奇数加起来是偶数4、8、9、15、12、2、1。A将所有奇数相加9、15、1得到25。答案为False。这组数中的奇数加起来是偶数15、32、5、13、82、7、1。A输出将所有奇数相加15、5、13、7、1得到41。答案为False。最近提出的一个新想法是 零样本CoT提示我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果输出11个苹果答案是不正确的现在让我们尝试使用特殊提示。提示我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果让我们逐步思考。输出首先您从10个苹果开始。您给了邻居和修理工各2个苹果所以您还剩下6个苹果。然后您买了5个苹果所以现在您有11个苹果。最后您吃了1个苹果所以您还剩下10个苹果。令人印象深刻的是这个简单的提示在这个任务中非常有效。这在您没有太多示例可用于提示时特别有用。四、自动思维链Auto-CoTAuto-CoT 主要由两个阶段组成阶段1问题聚类将给定问题划分为几个聚类阶段2演示抽样从每组数组中选择一个具有代表性的问题并使用带有简单启发式的 Zero-Shot-CoT 生成其推理链简单的启发式方法可以是问题的长度例如60 个 tokens和理由的步骤数例如5 个推理步骤。这鼓励模型使用简单而准确的演示。该过程如下图所示五、自我一致性通过少样本 CoT 采样多个不同的推理路径并使用生成结果选择最一致的答案。这有助于提高 CoT 提示在涉及算术和常识推理的任务中的性能。提示当我6岁时我的妹妹是我的一半年龄。现在我70岁了我的妹妹多大输出35输出是错误的我们如何通过自我一致性来改进这个问题让我们试试。提示Q林中有15棵树。林业工人今天将在林中种树。完成后将有21棵树。林业工人今天种了多少棵树A我们从15棵树开始。后来我们有21棵树。差异必须是他们种树的数量。因此他们必须种了21-15 6棵树。答案是6。Q停车场有3辆汽车又来了2辆汽车停车场有多少辆汽车A停车场已经有3辆汽车。又来了2辆。现在有3 2 5辆汽车。答案是5。QLeah有32块巧克力她的姐姐有42块。如果他们吃了35块他们总共还剩多少块ALeah有32块巧克力Leah的姐姐有42块。这意味着最初有32 42 74块巧克力。已经吃了35块。因此他们总共还剩74-35 39块巧克力。答案是39。QJason有20个棒棒糖。他给Denny一些棒棒糖。现在Jason只有12个棒棒糖。Jason给Denny多少棒棒糖AJason有20个棒棒糖。因为他现在只有12个所以他必须把剩下的给Denny。他给Denny的棒棒糖数量必须是20-12 8个棒棒糖。答案是8。QShawn有五个玩具。圣诞节他从他的父母那里得到了两个玩具。他现在有多少个玩具A他有5个玩具。他从妈妈那里得到了2个所以在那之后他有5 2 7个玩具。然后他从爸爸那里得到了2个所以总共他有7 2 9个玩具。答案是9。Q服务器房间里有9台计算机。从周一到周四每天都会安装5台计算机。现在服务器房间里有多少台计算机A从周一到周四有4天。每天都添加了5台计算机。这意味着总共添加了4 * 5 20台计算机。一开始有9台计算机所以现在有9 20 29台计算机。答案是29。QMichael有58个高尔夫球。星期二他丢失了23个高尔夫球。星期三他又丢失了2个。星期三结束时他还剩多少个高尔夫球AMichael最初有58个球。星期二他丢失了23个所以在那之后他有58-23 35个球。星期三他又丢失了2个所以现在他有35-2 33个球。答案是33。QOlivia有23美元。她用每个3美元的价格买了五个百吉饼。她还剩多少钱A她用每个3美元的价格买了5个百吉饼。这意味着她花了15美元。她还剩8美元。Q当我6岁时我的妹妹是我的一半年龄。现在我70岁了我的妹妹多大A输出 1当我6岁时我的妹妹是我的一半年龄也就是3岁。现在我70岁了所以她是70-3 67岁。答案是67。输出 2当叙述者6岁时他的妹妹是他年龄的一半也就是3岁。现在叙述者70岁了他的妹妹应该是70-3 67岁。答案是67。输出 3当我6岁时我的妹妹是我的一半年龄也就是3岁。现在我70岁了所以她是70/2 35岁。答案是35。六、生成知识提示提示高尔夫球的一部分是试图获得比其他人更高的得分。是或否输出是。这种错误揭示了 LLM 在执行需要更多关于世界的知识的任务时的局限性。我们如何通过生成知识来改进呢首先我们生成一些“知识”提示输入希腊比墨西哥大。知识希腊的面积约为131,957平方公里而墨西哥的面积约为1,964,375平方公里使墨西哥比希腊大了1,389%。输入眼镜总是会起雾。知识当你的汗水、呼吸和周围的湿度中的水蒸气落在冷的表面上冷却并变成微小的液滴时会在眼镜镜片上产生冷凝。你看到的是一层薄膜。你的镜片相对于你的呼吸会比较凉尤其是当外面的空气很冷时。输入鱼有思考能力。知识鱼比它们看起来更聪明。在许多领域如记忆力它们的认知能力与或超过非人类灵长类动物等“更高级”的脊椎动物。鱼的长期记忆帮助它们跟踪复杂的社交关系。输入一个人一生中吸烟很多香烟的常见影响是患肺癌的几率高于正常水平。知识那些一生中平均每天吸烟不到一支香烟的人患肺癌的风险是从不吸烟者的9倍。在每天吸烟1到10支香烟之间的人群中死于肺癌的风险几乎是从不吸烟者的12倍。输入一块石头和一颗卵石大小相同。知识卵石是一种根据Udden-Wentworth沉积学尺度的颗粒大小为4到64毫米的岩屑。卵石通常被认为比颗粒直径2到4毫米大比卵石直径64到256毫米小。输入高尔夫球的一部分是试图获得比其他人更高的得分。知识知识1高尔夫球的目标是以最少的杆数打完一组洞。一轮高尔夫球比赛通常包括18个洞。每个洞在标准高尔夫球场上一轮只打一次。每个杆计为一分总杆数用于确定比赛的获胜者。知识2高尔夫球是一项精密的球杆运动竞争选手或高尔夫球手使用许多类型的球杆用最少的杆数将球打入球场上一系列洞中。目标是以最低的分数完成比赛该分数是通过将每个洞上所用的杆数相加计算出来的。得分最低的选手赢得比赛。下一步是将知识整合并得出预测。我将问题重新格式化为 QA 格式以指导答案格式。提示问题高尔夫球的一部分是试图获得比其他人更高的得分。是或否知识高尔夫球的目标是以最少的杆数打完一组洞。一轮高尔夫球比赛通常包括18个洞。每个洞在标准高尔夫球场上一轮只打一次。每个杆计为一分总杆数用于确定比赛的获胜者。解释和答案答案 1置信度非常高不是高尔夫球的目标不是获得比其他人更高的得分。相反目标是以最少的杆数打完一组洞。总杆数用于确定比赛的获胜者而不是总得分。问题高尔夫球的一部分是试图获得比其他人更高的得分。是或否知识高尔夫球是一项精密的球杆运动竞争选手或高尔夫球手使用许多类型的球杆用最少的杆数将球打入球场上一系列洞中。目标是以最低的分数完成比赛该分数是通过将每个洞上所用的杆数相加计算出来的。得分最低的选手赢得比赛。解释和答案答案 2置信度要低得多是的高尔夫球的一部分是试图获得比其他人更高的得分。每个选手都试图以最少的杆数打完一组洞。总杆数用于确定比赛的获胜者而不是总得分。得分最低的选手赢得比赛。这个例子发生了一些非常有趣的事情。在第一个答案中模型非常自信但在第二个答案中不太自信。七、链式提示为了提高大语言模型的性能使其更可靠一个重要的提示工程技术是将任务分解为许多子任务。 确定子任务后将子任务的提示词提供给语言模型得到的结果作为新的提示词的一部分。 这就是所谓的链式提示prompt chaining一个任务被分解为多个子任务根据子任务创建一系列提示操作。链式提示可以完成很复杂的任务。LLM 可能无法仅用一个非常详细的提示完成这些任务。在链式提示中提示链对生成的回应执行转换或其他处理直到达到期望结果。除了提高性能链式提示还有助于提高 LLM 应用的透明度增加控制性和可靠性。这意味着您可以更容易地定位模型中的问题分析并改进需要提高的不同阶段的性能。链式提示在构建 LLM 驱动的对话助手和提高应用程序的个性化用户体验方面非常有用。链式提示使用示例文档问答中的链式提示提示链可以用于不同的场景这些场景可能涉及多个操作或转换。例如LLM 的一个常见用途是根据大型文本文档回答问题。想要更好阅读大文本文档可以设计两个不同的提示第一个提示负责提取相关引文以回答问题第二个提示则以引文和原始文档为输入来回答给定的问题。换句话说可以创建两个不同的提示来执行根据文档回答问题的任务。提示 1:你是一个很有帮助的助手。你的任务是根据文档回答问题。第一步是从文档中提取与问题相关的引文由####分隔。请使用输出引文列表。如果没有找到相关引文请回应“未找到相关引文”。-####{{文档}}-####这是整个提示的截图包括通过 user 角色传递的问题。提示 1 的输出Chain-of-thought (CoT) prompting[27]Generated knowledge prompting[37]Least-to-most prompting[38]Self-consistency decoding[39]Complexity-based prompting[41]Self-refine[42]Tree-of-thought prompting[43]Maieutic prompting[45]Directional-stimulus prompting[46]Textual inversion and embeddings[59]Using gradient descent to search for prompts[61][62][63][64]Prompt injection[65][66][67]在第一个提示中返回的引文现在可以用作下面第二个提示的输入。您可以对这些引文进行清理比如移除引用标志。可以在提示链中新建另一个提示来移除或使用这些引用标志但现在您可以忽略这些。然后第二个提示接收由第一个提示提取的相关引文并根据文档和这些提取的引文生成一个有帮助的回答。第二个提示可以是以下内容提示 2根据从文档中提取的相关引文由分隔和原始文档由####分隔请构建对问题的回答。请确保答案准确、语气友好且有帮助。{{文档}}Chain-of-thought (CoT) prompting[27]Generated knowledge prompting[37]Least-to-most prompting[38]Self-consistency decoding[39]Complexity-based prompting[41]Self-refine[42]Tree-of-thought prompting[43]Maieutic prompting[45]Directional-stimulus prompting[46]Textual inversion and embeddings[59]Using gradient descent to search for prompts[61][62][63][64]Prompt injection[65][66][67]提示 2 的输出文档中提到的提示技术包括Chain-of-thought (CoT) prompting[27]Generated knowledge prompting[37]Least-to-most prompting[38]Self-consistency decoding[39]Complexity-based prompting[41]Self-refine[42]Tree-of-thought prompting[43]Maieutic prompting[45]Directional-stimulus prompting[46]Textual inversion and embeddings[59]Using gradient descent to search for prompts[61][62][63][64]Prompt injection[65][66][67]每一种技术都采用独特的策略来增强或明确与大型语言模型的互动以产生期望的结果。如您所见简化并创建提示链是一种有用的提示方法其中响应需要经过多个操作或转换。八、思维树 (ToT)ToT 维护着一棵思维树思维由连贯的语言序列表示这个序列就是解决问题的中间步骤。使用这种方法LM 能够自己对严谨推理过程的中间思维进行评估。LM 将生成及评估思维的能力与搜索算法如广度优先搜索和深度优先搜索相结合在系统性探索思维的时候可以向前验证和回溯。ToT 框架原理如下ToT 需要针对不同的任务定义思维/步骤的数量以及每步的候选项数量。例如论文中的“算 24 游戏”是一种数学推理任务需要分成 3 个思维步骤每一步都需要一个中间方程。而每个步骤保留最优的best 5 个候选项。ToT 完成算 24 的游戏任务要执行广度优先搜索BFS每步思维的候选项都要求 LM 给出能否得到 24 的评估“sure/maybe/impossible”一定能/可能/不可能 。作者讲到“目的是得到经过少量向前尝试就可以验证正确sure的局部解基于‘太大/太小’的常识消除那些不可能impossible的局部解其余的局部解作为‘maybe’保留。”每步思维都要抽样得到 3 个评估结果。整个过程如下图所示从下图中报告的结果来看ToT 的表现大大超过了其他提示方法九、检索增强生成 (RAG)通用语言模型通过微调就可以完成几类常见任务比如分析情绪和识别命名实体。这些任务不需要额外的背景知识就可以完成。要完成更复杂和知识密集型的任务可以基于语言模型构建一个系统访问外部知识源来做到。这样的实现与事实更加一性生成的答案更可靠还有助于缓解“幻觉”问题。RAG 把一个信息检索组件和文本生成模型结合在一起。RAG 可以微调其内部知识的修改方式很高效不需要对整个模型进行重新训练。RAG 会接受输入并检索出一组相关/支撑的文档并给出文档的来源例如维基百科。这些文档作为上下文和输入的原始提示词组合送给文本生成器得到最终的输出。这样 RAG 更加适应事实会随时间变化的情况。这非常有用因为 LLM 的参数化知识是静态的。RAG 让语言模型不用重新训练就能够获取最新的信息基于检索生成产生可靠的输出。Lewis 等人2021提出一个通用的 RAG 微调方法。这种方法使用预训练的 seq2seq 作为参数记忆用维基百科的密集向量索引作为非参数记忆使通过神经网络预训练的检索器访问。这种方法工作原理概况如下十、自动推理并使用工具 (ART)ARTAutomatic Reasoning and Tool-use的工作原理如下接到一个新任务的时候从任务库中选择多步推理和使用工具的示范。在测试中调用外部工具时先暂停生成将工具输出整合后继续接着生成。ART 引导模型总结示范将新任务进行拆分并在恰当的地方使用工具。ART 采用的是零样本形式。ART 还可以手动扩展只要简单地更新任务和工具库就可以修正推理步骤中的错误或是添加新的工具。这个过程如下十一、自动提示工程师APE十二、Active-Prompt思维链CoT方法依赖于一组固定的人工注释范例。问题在于这些范例可能不是不同任务的最有效示例。为了解决这个问题提出了一种新的提示方法称为 Active-Prompt以适应 LLMs 到不同的任务特定示例提示用人类设计的 CoT 推理进行注释下面是该方法的说明。第一步是使用或不使用少量 CoT 示例查询 LLM。对一组训练问题生成 k 个可能的答案。基于 k 个答案计算不确定度度量使用不一致性。选择最不确定的问题由人类进行注释。然后使用新的注释范例来推断每个问题。十三、方向性刺激提示训练了一个可调节的策略 LM 来生成刺激/提示。越来越多地使用RL来优化 LLM。下图显示了方向性刺激提示与标准提示的比较。策略 LM 可以很小并且可以优化以生成指导黑盒冻结 LLM 的提示。十四、PAL程序辅助语言模型使用 LLMs 读取自然语言问题并生成程序作为中间推理步骤的方法。被称为程序辅助语言模型PAL它与思维链提示不同因为它不是使用自由形式文本来获得解决方案而是将解决步骤卸载到类似 Python 解释器的编程运行时中。LangChain 和 OpenAI GPT-3 为例。我们有兴趣开发一个简单的应用程序它能够解释所提出的问题并利用 Python 解释器提供答案。这是我们需要导入的包import openai from datetime import datetime from dateutil.relativedelta import relativedelta import os from langchain.llms import OpenAI from dotenv import load_dotenv让我们先配置一些环境load_dotenv() # API configuration openai.api_key os.getenv(OPENAI_API_KEY) # for LangChain os.environ[OPENAI_API_KEY] os.getenv(OPENAI_API_KEY)设置模型实例llm OpenAI(model_nametext-davinci-003, temperature0)设置提示问题question Today is 27 February 2023. I was born exactly 25 years ago. What is the date I was born in MM/DD/YYYY? DATE_UNDERSTANDING_PROMPT # Q: 2015 is coming in 36 hours. What is the date one week from today in MM/DD/YYYY? # If 2015 is coming in 36 hours, then today is 36 hours before. today datetime(2015, 1, 1) - relativedelta(hours36) # One week from today, one_week_from_today today relativedelta(weeks1) # The answer formatted with %m/%d/%Y is one_week_from_today.strftime(%m/%d/%Y) # Q: The first day of 2019 is a Tuesday, and today is the first Monday of 2019. What is the date today in MM/DD/YYYY? # If the first day of 2019 is a Tuesday, and today is the first Monday of 2019, then today is 6 days later. today datetime(2019, 1, 1) relativedelta(days6) # The answer formatted with %m/%d/%Y is today.strftime(%m/%d/%Y) # Q: The concert was scheduled to be on 06/01/1943, but was delayed by one day to today. What is the date 10 days ago in MM/DD/YYYY? # If the concert was scheduled to be on 06/01/1943, but was delayed by one day to today, then today is one day later. today datetime(1943, 6, 1) relativedelta(days1) # 10 days ago, ten_days_ago today - relativedelta(days10) # The answer formatted with %m/%d/%Y is ten_days_ago.strftime(%m/%d/%Y) # Q: It is 4/19/1969 today. What is the date 24 hours later in MM/DD/YYYY? # It is 4/19/1969 today. today datetime(1969, 4, 19) # 24 hours later, later today relativedelta(hours24) # The answer formatted with %m/%d/%Y is today.strftime(%m/%d/%Y) # Q: Jane thought today is 3/11/2002, but today is in fact Mar 12, which is 1 day later. What is the date 24 hours later in MM/DD/YYYY? # If Jane thought today is 3/11/2002, but today is in fact Mar 12, then today is 3/12/2002. today datetime(2002, 3, 12) # 24 hours later, later today relativedelta(hours24) # The answer formatted with %m/%d/%Y is later.strftime(%m/%d/%Y) # Q: Jane was born on the last day of Feburary in 2001. Today is her 16-year-old birthday. What is the date yesterday in MM/DD/YYYY? # If Jane was born on the last day of Feburary in 2001 and today is her 16-year-old birthday, then today is 16 years later. today datetime(2001, 2, 28) relativedelta(years16) # Yesterday, yesterday today - relativedelta(days1) # The answer formatted with %m/%d/%Y is yesterday.strftime(%m/%d/%Y) # Q: {question} .strip() \nllm_out llm(DATE_UNDERSTANDING_PROMPT.format(questionquestion)) print(llm_out)这将输出以下内容# If today is 27 February 2023 and I was born exactly 25 years ago, then I was born 25 years before. today datetime(2023, 2, 27) # I was born 25 years before, born today - relativedelta(years25) # The answer formatted with %m/%d/%Y is born.strftime(%m/%d/%Y)llm_out 是一段 python 代码我们可以使用 exec 执行它exec(llm_out) print(born)这将输出以下内容02/27/1998十五、ReAct 框架其中 LLMs 以交错的方式生成 推理轨迹 和 任务特定操作 。生成推理轨迹使模型能够诱导、跟踪和更新操作计划甚至处理异常情况。操作步骤允许与外部源如知识库或环境进行交互并且收集信息。ReAct 框架允许 LLMs 与外部工具交互来获取额外信息从而给出更可靠和实际的回应。结果表明ReAct 可以在语言和决策任务上的表现要高于几个最先进水准要求的的基线。ReAct 还提高了 LLMs 的人类可解释性和可信度。总的来说作者发现了将 ReAct 和链式思考 (CoT) 结合使用的最好方法是在推理过程同时使用内部知识和获取到的外部信息。ReAct 是一个将推理和行为与 LLMs 相结合通用的范例。ReAct 提示 LLMs 为任务生成口头推理轨迹和操作。这使得系统执行动态推理来创建、维护和调整操作计划同时还支持与外部环境(例如Wikipedia)的交互以将额外信息合并到推理中。下图展示了 ReAct 的一个示例以及执行问题回答所涉及的不同步骤。十六、多模态思维链提示方法传统的思维链提示方法侧重于语言模态。相比之下多模态思维链提示将文本和视觉融入到一个两阶段框架中。第一步涉及基于多模态信息的理性生成。接下来是第二阶段的答案推断它利用生成的理性信息。多模态CoT模型1B在ScienceQA基准测试中的表现优于GPT-3.5。十七、总结提示这里对文章进行总结例如以上就是今天要讲的内容本文仅仅简单介绍了pandas的使用而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。