跳到内容

为何选择 LangGraph?

大型语言模型(LLM)功能极其强大,特别是当它们连接到检索器或 API 等其他系统时。这就是为什么许多 LLM 应用程序在调用 LLM 之前和/或之后使用一系列步骤的控制流。例如,RAG 会检索与问题相关的文档,并将这些文档传递给 LLM 以支撑其回答。通常,在调用 LLM 之前和/或之后的一系列步骤的控制流被称为“链”(chain)。链是 LLM 编程的流行范式,并提供了高度的可靠性;每次链调用都会运行相同的步骤集。

然而,我们经常希望 LLM 系统能够选择自己的控制流!这就是智能体(agent)的定义之一:智能体是一个使用 LLM 来决定应用程序控制流的系统。与链不同,智能体赋予 LLM 对应用程序中步骤序列的一定程度的控制。使用 LLM 来决定应用程序控制的例子包括:

  • 使用 LLM 在两条潜在路径之间进行路由
  • 使用 LLM 决定调用多个工具中的哪一个
  • 使用 LLM 决定生成的答案是否足够,或者是否需要更多工作

有许多不同类型的智能体架构可供选择,它们赋予 LLM 不同程度的控制。一个极端是,路由器允许 LLM 从一组指定的选项中选择一个步骤;另一个极端是,一个完全自主的长期运行的智能体可能完全自由地选择它想要的任何步骤序列来解决给定的问题。

Agent Types

许多智能体架构中都利用了以下几个概念:

  • 工具调用:LLM 通常以此方式做出决策
  • 采取行动:通常,LLM 的输出被用作行动的输入
  • 记忆:可靠的系统需要了解发生过的事情
  • 规划:规划步骤(无论是显性还是隐性)对于确保 LLM 在做出决策时以最高保真度的方式做出决策非常有用。

挑战

在实践中,控制和可靠性之间常常存在权衡。当我们赋予 LLM 更多控制权时,应用程序的可靠性通常会降低。这可能是由于 LLM 的不确定性以及/或在选择智能体使用的工具(或步骤)时出现错误等因素造成的。

Agent Challenge

核心原则

LangGraph 的动机是帮助改变这种趋势,在赋予智能体更多应用程序控制权的同时,保持更高的可靠性。我们将概述 LangGraph 的几个特定支柱,这些支柱使其非常适合构建可靠的智能体。

Langgraph

可控性

LangGraph 通过将应用程序的流程表示为一组节点和边,赋予开发者高度的控制。所有节点都可以访问和修改共同的状态(内存)。应用程序的控制流可以使用连接节点的边来设置,可以是确定性的,也可以是通过条件逻辑。

持久化

LangGraph 为开发者提供了许多选项,用于使用短期或长期(例如,通过数据库)内存来持久化图状态。

人工干预

持久化层支持与智能体进行几种不同的人工干预交互模式;例如,可以暂停智能体,查看其状态,编辑其状态,并批准后续步骤。

流式传输

LangGraph 对流式传输提供一流支持,这可以在智能体执行过程中向用户(或开发者)公开状态。LangGraph 支持事件(如执行工具调用)和 LLM 可能发出的令牌的流式传输。

调试

一旦构建了图,您通常会想要对其进行测试和调试。LangGraph Studio 是一个专门用于 LangGraph 应用程序可视化和调试的 IDE。

Langgraph Studio

部署

一旦您对 LangGraph 应用程序充满信心,许多开发人员都希望能够轻松部署。LangGraph 团队提供的LangGraph Cloud 是一种独到的、简单的部署 LangGraph 对象的方式。当然,您也可以使用 Express.js 等服务,并根据需要从 Express.js 服务器内部调用您的图。