在上一个视频中,您看到了如何使用结构化提示来帮助LLM编写解决复杂数学问题的Python脚本。使用PAL的应用程序可以将LLM连接到Python解释器以运行代码并将答案返回给LLM。大多数应用程序将要求LLM管理更复杂的工作流程,包括与多个外部数据源和应用程序的交互。在本视频中,您将探讨一种名为ReAct的框架,该框架可以帮助LLM规划和执行这些工作流程。
ReAct是一种结合了思维链与行动规划的提示策略。该框架由2022年普林斯顿大学和谷歌的研究人员提出。该论文开发了一系列基于Hot Pot QA问题和Fever问题的复杂提示示例。
Hot Pot QA是一个多步问题回答基准,需要对两个或更多维基百科段落进行推理,而Fever是一个使用维基百科段落来验证事实的基准。右侧的图中显示了来自论文的一些示例提示,我们将很快探讨其中一个,所以现在不必担心阅读本幻灯片上的提示。您可以在视频后的阅读练习中更详细地查看图表。
ReAct使用结构化示例来向大型语言模型展示如何推理问题并决定采取的行动,以使其更接近解决方案。示例提示以一个需要多个步骤来回答的问题开始。在此示例中,目标是确定两本杂志中哪一本首次出版。
示例然后包括相关的思考-行动-观察(T-A-O)三元字符串。思考是解决问题和确定要采取的行动的推理步骤。
在报纸出版的示例中,提示指定模型将搜索两本杂志并确定哪本首次出版。
为了使模型能够与外部应用程序或数据源进行交互,它必须从预定的列表中确定要采取的操作。在ReAct框架的情况下,作者创建了一个小型Python API,用于与维基百科进行交互。三个允许的操作是搜索(search,查找特定主题的维基百科条目)、查找(lookup,搜索包含指定关键字的维基百科页面)和完成(finish,模型确定已经得出答案时执行的操作)。
正如您在上一幻灯片上所看到的,提示中的思考标识了要进行的两次搜索,每次搜索一本杂志。在此示例中,第一次搜索将是关于"Arthur's magazine"的搜索。操作使用特定的方括号表示法格式化,如您在这里看到的,以便模型可以以相同的方式格式化其完成。Python解释器搜索此代码以触发特定的API操作。
提示模板的最后部分是观察,这是外部搜索提供的新信息带入提示的上下文的地方。
然后,模型为了解释提示重复这个循环,直到获得最终答案。在第二个思考中,提示说明了"Arthur's magazine"的创刊年份并确定解决问题所需的下一步。第二个操作是搜索"first for women",第二个观察包含了发布的起始日期,这种情况下是1989年的文本。此时,已知回答问题所需的所有信息。
第三个思考中说明了"first for women"的创刊年份,然后提供了用于确定哪本杂志首次出版的明确逻辑。最后一个操作是完成循环并将答案传递回用户。
需要注意的是,在ReAct框架中,LLM只能从一组由示例提示文本前置的一组说明中选择操作。以下是说明的全文。首先,任务被定义,告诉模型使用您刚刚详细探讨的提示结构来回答问题。
接下来,说明提供了关于"思考"是什么意思的更多细节,然后指定了操作步骤只能是三种类型中的一种。
第一种是搜索操作,用于查找与指定实体相关的维基百科条目。
第二种是查找操作,用于检索包含指定关键字的下一句。
最后一个操作是完成,用于返回答案并结束任务。在使用LLM规划将驱动应用程序的任务时,定义一组允许的操作是至关重要的。
LLM非常有创造力,可能会提出与应用程序实际无法执行的步骤相对应的步骤。说明的最后一句让LLM知道接下来将出现一些示例在提示文本中。
好的,让我们把所有这些要素放在一起进行推理。您将从ReAct示例提示开始。请注意,根据您使用的LLM,您可能需要包括多个示例并进行未来的推理。
接下来,您将在示例的开头预置说明,
然后在末尾插入要回答的问题。
完整的提示现在包含所有这些个别要素,并可以传递给LLM进行推理。
ReAct框架展示了一种通过推理和行动规划来使用LLM驱动应用程序的方式。通过创建示例,您可以扩展此策略,以适应您的特定用例,以解决应用程序中即将发生的决策和操作。值得庆幸的是,目前正积极开发使用语言模型驱动的应用程序的框架。其中一种被广泛采用的解决方案称为LangChain,LangChain框架为您提供了包含与LLM合作所需的组件的模块化部分。
这些组件包括用于各种不同用例的提示模板,您可以使用它们来格式化输入示例和模型完成。
还包括与LLM的交互的存储器。
该框架还包括预构建的工具,使您能够执行各种任务,包括调用外部数据集和各种API。将这些个别组件的选择连接在一起会形成一个链。
LangChain的创建者已经为不同的用例优化了一组预定义的链,您可以直接使用它们,快速启动应用程序。
有时,您的应用程序工作流程可能根据用户提供的信息采用多个路径。在这种情况下,您无法使用预定义的链,而是需要具有灵活性,以决定用户在工作流程中移动时采取哪些操作。LangChain定义了另一个构造,称为"代理",您可以使用它来解释用户的输入并确定要完成任务所需的工具。
LangChain目前包括用于PAL和ReAct等多种代理。代理可以合并到链中,以采取行动或计划并执行一系列操作。
LangChain正在积极开发中,不断添加新功能,例如能够检查和评估LLM在整个工作流程中的完成。这是一个令人兴奋的框架,可以帮助您进行快速原型设计和部署,很可能会成为您未来生成式人工智能工具箱中的重要工具。
在开发使用LLM的应用程序时,请牢记模型的推理和规划行动能力取决于其规模。通常情况下,更大的模型是使用高级提示技术(如PAL或ReAct)的最佳选择。
较小的模型可能会在高度结构化的提示中理解任务,可能需要进行额外的微调以提高其推理和规划能力。这可能会拖慢开发过程。
相反,如果您从部署中开始使用大型、功能强大的模型并收集大量用户数据,那么您可能可以使用它来训练和微调一个较小的模型,以便稍后切换使用。