AI代理工作流程:选择LangGraph或LangChain的完整指南

2024年10月29日 由 alex 发表 322 0

本文我们将探索构建代理式人工智能(Agentic AI)应用最流行的两个框架——LangChain和LangGraph。到本文结束时,你应能充分了解它们的主要构建模块、每个框架在处理核心功能方面的不同之处,并能就哪个框架最适合你的问题形成有根据的观点。


LangChain和LangGraph的基础组件

通过了解每个框架的不同基础元素,你将能更深入地理解它们在处理某些核心功能方面的关键差异。以下描述并非每个框架所有组件的详尽列表,而是作为理解它们在总体方法上差异的坚实基础。


LangChain

使用LangChain有两种方法:作为预定义命令的顺序链或使用LangChain代理。这两种方法在处理工具和编排方面各不相同。链遵循预定义的线性工作流,而代理则充当协调者,能够做出更动态(非线性)的决策。

  • 链(Chains):一系列步骤,可以包括调用大型语言模型(LLM)、代理、工具、外部数据源、过程代码等。链可以分支,意味着单个链可以基于逻辑条件分裂成多个路径。
  • 代理或语言模型(Agents or Language Models):语言模型具有生成自然语言响应的能力。而代理则使用语言模型,并增加了推理、调用工具以及在工具调用失败时重复调用过程的能力。
  • 工具(Tools):可在链中调用或由代理调用的基于代码的函数,用于与外部系统交互。
  • 提示(Prompts):这可以包括系统提示(指导模型如何完成任务以及可用哪些工具)、从外部数据源注入的信息(为模型提供更多上下文)以及用户提示或模型要完成的任务。


LangGraph

LangGraph从另一个角度处理人工智能工作流。正如其名,它像图一样编排工作流。由于其在处理人工智能代理、过程代码和其他工具之间的不同流方面的灵活性,它更适合那些线性链方法、分支链或简单代理系统无法满足需求的用例。LangGraph旨在处理比LangChain更复杂的条件逻辑和反馈循环。

  • 图(Graphs):一种灵活的工作流组织方式,可以包括调用LLM、工具、外部数据源、过程代码等。LangGraph支持循环图;这意味着你可以创建循环和反馈机制,以便多次访问节点。
  • 节点(Nodes):表示工作流中的步骤,如LLM查询、API调用或工具执行。
  • 边和条件边(Edges and Conditional Edges):边通过将一个节点的输出作为下一个节点的输入来定义信息的流动。条件边在满足特定条件时定义一个节点到另一个节点的信息流动。开发人员可以自定义这些条件。
  • 状态(State):状态是信息在图中流动时应用程序的当前状态。它是一个开发人员定义的、可变的TypedDict对象,包含当前图执行的所有相关信息。LangGraph在信息通过图流动时自动处理每个节点的状态更新。
  • 代理或语言模型(Agents or Language Models):图中的语言模型仅负责生成对输入的文本响应。代理能力利用语言模型,但使图具有多个表示代理不同组件的节点(如推理、工具选择和工具执行)。代理可以决定在图中走哪条路径、更新图的状态,并执行比文本生成更多的任务。


每个框架处理核心功能的方式之差异

LangGraph和LangChain在某些功能上有所重叠,但它们从不同的角度解决问题。LangChain专注于通过链或不同的人工智能代理模式实现的线性工作流。而LangGraph则专注于创建更灵活、更精细的基于过程的工作流,可以包括人工智能代理、工具调用、过程代码等。


总体而言,LangChain的学习曲线比LangGraph更平缓。LangChain有更多的抽象和预定义配置,使得对于简单用例来说更容易实现。LangGraph允许对工作流设计进行更多的自定义控制,这意味着它的抽象程度更低,开发人员需要学习更多才能有效地使用该框架。


工具调用:


LangChain

在LangChain中,根据你是使用链来序列化一系列步骤,还是仅使用其代理功能而不明确定义在链中,工具有两种不同的调用方式。在链中,工具是作为链中的预定义步骤包含的——这意味着它们并不一定是由代理调用的,因为它们在链中已经被预先确定要调用。然而,当你有一个未定义在链中的代理时,该代理有权自主决定基于其所了解的工具列表,何时调用哪个工具。


链的流动示例:


2


  1. 创建一个函数来表示该工具,并使其与链条兼容
  2. 将该工具整合到链条中
  3. 执行链条


代理的流程示例:


3


  1. 工具已定义
  2. 工具已添加到代理中
  3. 代理收到查询并决定是否以及何时使用搜索工具。如果需要,代理可以多次使用工具。


LangGraph(语言图)

在LangGraph中,工具通常表示为图上的一个节点。如果图中包含一个代理,那么代理将根据其推理能力决定调用哪个工具。基于代理的工具决策,图会导航到“工具节点”以处理工具的执行。在从代理到工具节点的边上可以包含条件逻辑,以添加额外的逻辑来确定工具是否执行。这给了开发者另一层控制,如果需要的话。如果图中没有代理,那么就像在LanchChain的链中一样,工具可以基于条件逻辑包含在工作流中。


带有代理的图流程示例:


4


  1. 工具已定义
  2. 工具已绑定到代理
  3. 代理决定是否需要工具,如果需要,则决定使用哪个工具。
  4. LangGraph框架检测到需要调用工具,并导航到图中的工具节点以执行工具调用。
  5. 捕获工具输出并将其添加到图的状态中
  6. 使用更新后的状态再次调用代理,以便它可以决定下一步要做什么


没有代理的图的流程示例:


5


  1. 工具已定义
  2. 工具作为节点添加到图中
  3. 可以使用条件边来确定何时使用某个工具节点并控制图的流程
  4. 工具可以配置为更新图的状态


总结

你可以单独使用LangChain、单独使用LangGraph,或者将两者一起使用!通过使AutoGen代理成为图中的节点,完全有可能探索将LangGraph的基于图的编排与其他代理式AI框架(如微软的AutoGen)结合使用。


文章来源:https://medium.com/towards-data-science/ai-agent-workflows-a-complete-guide-on-whether-to-build-with-langgraph-or-langchain-117025509fa0
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消