LangChain 与 LangGraph:4 个主要差异以及何时使用每个差异

为您的代理工作流程和系统选择合适工具的实用指南LangChain 与 LangGraph:4 个关键差异以及何时使用每个差异首先出现在 Towards Data Science 上。

来源:走向数据科学

我们的生活早在 LangGraph 之前。这清楚地表明 LangGraph 缩小了差距。换句话说,LangGraph 做了一些更复杂或者 LangChain 做不到的事情。

在本文中,我们将讨论 LangChain 和 LangGraph 之间的 4 个关键区别,以及它们如何影响我们为构建代理工作流程而编写的代码。

首先我们要提一下,这些不是竞争工具。 LangGraph是LangChain生态系统的一部分。它是一种建立在 LangChain 之上的扩展。

1. 管道与循环

LangChain是一个有明确方向的管道:

我们将组件链接在一起,但朝一个方向,代码如下所示:

链 = 提示 |型号|解析器

输出 = chain.invoke(输入)

我们仍然可以分支、并行运行步骤以及构建 DAG,但默认抽象是通过管道向前移动数据。

  • 这个结构足以解决很多问题,例如
  • 检索文档,然后生成答案
  • 提取字段,然后保存它们
  • 总结文本,然后对其进行分类

    然而,当涉及到向后发送时,我们需要编写一个外部Python循环。因此,应用程序会处理其余的事情,而不是 LangChain。

  • 另一方面,LangGraph 将循环视为工作流程本身的一部分。它基本上是一个带有节点和边的图。
  • 节点执行特定任务。
  • 普通边定义节点之间的固定过渡。
  • 条件边决定下一步去哪里。

    由于正常边缘和条件边缘,我们可以毫不费力地路由回较早的节点。这是我用 LangGraph 构建的客户服务代理的图:

    Customer代表输入节点,AI Agent是模型,价格和预订引擎是其他节点。我们可以在节点之间来回移动。

    2. 无状态与有状态

    LangChain 管道本身不保存状态。每个可运行对象通常接收一个输入并返回一个输出。状态以字典、消息或自定义对象的形式向前传递。LangGraph 然后将该更新合并到现有状态中。