LangGraph 提供了两种不同的 API 来构建智能体工作流:图 API 和函数式 API。两种 API 共享相同的底层运行时,并且可以在同一个应用里一起使用,但它们分别适用于不同的使用场景和开发偏好。 本指南将帮助你根据自己的具体需求,决定何时使用哪种 API。

快速决策指南

在以下情况下使用图 API:
  • 需要复杂的工作流可视化以进行调试和文档编写
  • 需要显式的状态管理,在多个节点间共享数据
  • 包含多个决策点的条件分支
  • 存在稍后需要合并的并行执行路径
  • 团队协作场景,可视化表示有助于理解
在以下情况下使用函数式 API:
  • 希望对现有过程式代码进行最小的代码改动
  • 采用标准控制流(if/else、循环、函数调用)
  • 需要函数作用域的状态,无需显式的状态管理
  • 快速原型开发,减少样板代码
  • 具有简单分支逻辑的线性工作流

详细对比

何时使用图 API

图 API 采用声明式方法,你需要定义节点、边和共享状态来创建可视化的图结构。 1. 复杂的决策树和分支逻辑 当你的工作流有多个依赖于不同条件的决策点时,图 API 能让这些分支变得明确且易于可视化。
2. 跨多个组件的状态管理 当你需要在工作流的不同部分之间共享和协调状态时,图 API 显式的状态管理会很有帮助。
3. 带同步的并行处理 当你需要并行运行多个操作然后合并它们的结果时,图 API 可以自然地处理这种情况。
4. 团队开发与文档 图 API 的可视化特性使团队更容易理解、记录和维护复杂的工作流。

何时使用函数式 API

函数式 API 采用命令式方法,将 LangGraph 的功能集成到标准的过程式代码中。 1. 现有的过程式代码 当你已有使用标准控制流的代码,并希望以最小的重构代价添加 LangGraph 功能时。
2. 逻辑简单的线性工作流 当你的工作流主要是顺序执行且只包含简单的条件逻辑时。
3. 快速原型开发 当你希望快速测试想法,而不需要定义状态模式和图形结构等额外开销时。
4. 函数作用域的状态管理 当你的状态自然地局限在各个函数内,不需要广泛共享时。

结合使用两种 API

你可以在同一个应用中同时使用这两种 API。当系统的不同部分有不同的需求时,这会非常有用。

API 之间的迁移

从函数式 API 迁移到图 API

当你的函数式工作流变得复杂时,可以迁移到图 API:

从图 API 迁移到函数式 API

当你的图对于简单的线性流程来说过于复杂时:

总结

当你需要对工作流结构进行显式控制、需要复杂的分支、并行处理或团队协作时,请选择图 API。 当你希望以最小的改动为现有代码添加 LangGraph 功能、工作流较为简单线性或需要快速原型开发时,请选择函数式 API。 这两种 API 都提供了相同的 LangGraph 核心功能(持久化、流式传输、人在回路、记忆),只是将它们封装在不同的编程范式中,以适应不同的开发风格和使用场景。