跳到内容

为什么选择 LangGraph?

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

然而,我们常常希望 LLM 系统能够选择自己的控制流!这就是智能体的一个定义:智能体是一个使用 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 可能发出的 token 流

调试

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

Langgraph Studio

部署

当您对 LangGraph 应用程序有信心后,许多开发者希望有一个简单的部署路径。LangGraph Cloud 是 LangChain 团队提供的一种有特定倾向性且简单的部署 LangGraph 对象的方式。当然,您也可以使用诸如 Express.js 之类的服务,并根据需要从 Express.js 服务器内部调用您的图。