为什么选择 LangGraph?¶
大型语言模型(LLMs)非常强大,特别是当它们与其他系统(如检索器或 API)连接时。这就是为什么许多 LLM 应用在 LLM 调用之前和/或之后使用控制流程步骤的原因。例如,RAG 执行与问题相关的文档检索,并将这些文档传递给 LLM 以对响应进行基础支撑。通常,LLM 调用之前和/或之后的控制流程被称为“链”。链是一种流行的 LLM 编程范式,提供了很高的可靠性;每次链调用时,都会执行相同的一组步骤。
然而,我们通常希望 LLM 系统能够自行选择控制流程!这就是代理的一种定义:代理是一个使用 LLM 决定应用控制流程的系统。与链不同,代理赋予了 LLM 一定程度的控制权,可以决定应用中的步骤顺序。使用 LLM 决定应用控制的例子包括:
- 使用 LLM 在两个潜在路径之间进行路由
- 使用 LLM 决定调用多个工具中的哪一个
- 使用 LLM 决定生成的答案是否足够,或是否需要更多工作
有许多不同类型的代理架构可以考虑,这些架构赋予 LLM 不同级别的控制权。在一端,路由器允许 LLM 从指定选项集中选择单个步骤;而在另一端,完全自主的长期代理可能完全自由地选择其想要的任何步骤序列来解决特定问题。

许多代理架构中使用了几个概念:
- 工具调用:这通常是 LLM 做出决策的方式
- 行动执行:通常情况下,LLM 的输出被用作行动的输入
- 记忆:可靠的系统需要了解发生过的事情
- 计划:计划步骤(无论是显式还是隐式)对于确保 LLM 在做出决策时以最高保真度进行非常有用。
挑战¶
实际上,控制与可靠性之间通常存在权衡。当我们给予 LLM 更多控制时,应用程序往往变得不那么可靠。这可能由于 LLM 的非确定性和/或代理使用(采取)工具(或步骤)时出现错误等因素导致。

核心原则¶
LangGraph 的动机是帮助弯曲曲线,在我们赋予代理更多控制权时保持更高的可靠性。我们将概述 LangGraph 的几个具体支柱,使其非常适合构建可靠的代理。

可控性
LangGraph 通过将应用流程表达为一组节点和边,给予开发者很高的控制权。所有节点可以访问并修改一个公共状态(记忆)。应用的控制流程可以通过连接节点的边设置,可以是确定性的或通过条件逻辑。
持久性
LangGraph 为开发者提供了许多持久化图状态的选项,使用短期或长期(例如,通过数据库)记忆。
人类参与
持久层使得与代理进行多种不同的人类参与交互模式成为可能;例如,可以暂停代理,检查其状态,编辑其状态,并批准后续步骤。
流式传输
LangGraph 自带对流式传输的第一类支持,能够在代理执行过程中向用户(或开发者)暴露状态。LangGraph 支持事件的流式传输(如工具调用被执行)以及LLM 可能发出的标记的流式传输。
调试¶
构建图形后,您往往希望对其进行测试和调试。LangGraph Studio 是一个专门用于可视化和调试 LangGraph 应用的 IDE。

部署¶
一旦您对您的 LangGraph 应用有了信心,许多开发者希望有一个简单的部署路径。LangGraph 平台提供了一系列部署 LangGraph 图的选项。