本文我们将探索构建代理式人工智能(Agentic AI)应用最流行的两个框架——LangChain和LangGraph。到本文结束时,你应能充分了解它们的主要构建模块、每个框架在处理核心功能方面的不同之处,并能就哪个框架最适合你的问题形成有根据的观点。
LangChain和LangGraph的基础组件
通过了解每个框架的不同基础元素,你将能更深入地理解它们在处理某些核心功能方面的关键差异。以下描述并非每个框架所有组件的详尽列表,而是作为理解它们在总体方法上差异的坚实基础。
LangChain
使用LangChain有两种方法:作为预定义命令的顺序链或使用LangChain代理。这两种方法在处理工具和编排方面各不相同。链遵循预定义的线性工作流,而代理则充当协调者,能够做出更动态(非线性)的决策。
LangGraph
LangGraph从另一个角度处理人工智能工作流。正如其名,它像图一样编排工作流。由于其在处理人工智能代理、过程代码和其他工具之间的不同流方面的灵活性,它更适合那些线性链方法、分支链或简单代理系统无法满足需求的用例。LangGraph旨在处理比LangChain更复杂的条件逻辑和反馈循环。
每个框架处理核心功能的方式之差异
LangGraph和LangChain在某些功能上有所重叠,但它们从不同的角度解决问题。LangChain专注于通过链或不同的人工智能代理模式实现的线性工作流。而LangGraph则专注于创建更灵活、更精细的基于过程的工作流,可以包括人工智能代理、工具调用、过程代码等。
总体而言,LangChain的学习曲线比LangGraph更平缓。LangChain有更多的抽象和预定义配置,使得对于简单用例来说更容易实现。LangGraph允许对工作流设计进行更多的自定义控制,这意味着它的抽象程度更低,开发人员需要学习更多才能有效地使用该框架。
工具调用:
LangChain
在LangChain中,根据你是使用链来序列化一系列步骤,还是仅使用其代理功能而不明确定义在链中,工具有两种不同的调用方式。在链中,工具是作为链中的预定义步骤包含的——这意味着它们并不一定是由代理调用的,因为它们在链中已经被预先确定要调用。然而,当你有一个未定义在链中的代理时,该代理有权自主决定基于其所了解的工具列表,何时调用哪个工具。
链的流动示例:
代理的流程示例:
LangGraph(语言图)
在LangGraph中,工具通常表示为图上的一个节点。如果图中包含一个代理,那么代理将根据其推理能力决定调用哪个工具。基于代理的工具决策,图会导航到“工具节点”以处理工具的执行。在从代理到工具节点的边上可以包含条件逻辑,以添加额外的逻辑来确定工具是否执行。这给了开发者另一层控制,如果需要的话。如果图中没有代理,那么就像在LanchChain的链中一样,工具可以基于条件逻辑包含在工作流中。
带有代理的图流程示例:
没有代理的图的流程示例:
总结
你可以单独使用LangChain、单独使用LangGraph,或者将两者一起使用!通过使AutoGen代理成为图中的节点,完全有可能探索将LangGraph的基于图的编排与其他代理式AI框架(如微软的AutoGen)结合使用。