跳到内容

为什么选择 LangGraph?

LLM 非常强大,尤其是在连接到其他系统(如检索器或 API)时。这就是为什么许多 LLM 应用程序在使用 LLM 调用之前和/或之后使用步骤控制流的原因。例如,RAG 执行检索与问题相关的文档,并将这些文档传递给 LLM,以便为响应提供依据。通常,在调用 LLM 之前和/或之后的步骤控制流被称为“链”。链是使用 LLM 编程的一种流行范例,并提供高度的可靠性;同一组步骤在每次链调用时运行。

但是,我们通常希望 LLM 系统能够选择自己的控制流!这是 agent 的一种定义:agent 是一个使用 LLM 来决定应用程序控制流的系统。与链不同,agent 给定 LLM 对应用程序中步骤序列的一定程度的控制。使用 LLM 来决定应用程序控制的示例

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

有许多不同类型的 agent 架构 需要考虑,这些架构为 LLM 提供了不同程度的控制。一方面,路由器允许 LLM 从一组指定的选项中选择单个步骤;另一方面,完全自主的长期运行 agent 可能具有完全的自由,可以为给定的问题选择它想要的任何步骤序列。

Agent Types

许多 agent 架构中使用了几个概念

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

挑战

在实践中,控制和可靠性之间通常存在权衡。当我们给予 LLM 更多控制权时,应用程序通常会变得不太可靠。这可能是由于诸如 LLM 非确定性和/或 agent 使用(采取)的工具(或步骤)选择错误等因素造成的。

Agent Challenge

核心原则

LangGraph 的动机是帮助弯曲曲线,在我们给予 agent 更多应用程序控制权的同时保持更高的可靠性。我们将概述 LangGraph 的几个特定支柱,这些支柱使其非常适合构建可靠的 agent。

Langgraph

可控性

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

持久化

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

人机环路

持久化层支持与 agent 的几种不同 人机环路 交互模式;例如,可以暂停 agent、查看其状态、编辑其状态并批准后续步骤。

流式传输

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

调试

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

Langgraph Studio

部署

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