【自然语言处理与大模型】LangGraphV1.0入门指南:核心组件Nodes

在构建复杂的 AI Agent 工作流时,如何管理数据流(State 状态)以及如何组织逻辑单元(Node 节点)是核心关键。LangGraph 通过将工作流组织成有向图 的方式,为开发者提供了一个强大且灵活的框架。本文将通过一个基础示例,带你深入理解 LangGraph 的两个核心要素:State(状态)Nodes(节点)

一、什么是 State 和 Nodes?

在 LangGraph 中,一切皆为图:

  • State(状态): 简单来说就是数据。它是图中所有节点共享的"公共账本"。状态通常是一个 Python 数据结构(如TypeDict或 Pydantic 模型)。它被提供给图,由节点进行更新,并最终返回给用户。

  • Nodes(节点): 节点本质上是 Python 函数。每个节点接收当前的 State 作为输入,执行逻辑处理后,输出对 State 的更新。

关键特性:持久化 LangGraph 的状态可以跨时间持久化。如果某个节点在执行过程中崩溃,系统可以恢复状态并重新运行该节点,这大大增强了应用的弹性。

二、如何构建图?

下面来创建一个简单的图,包含一个节点 node_a,它接收一段文字并返回一条新的消息。

1. 定义状态 (State)

首先,我们需要确定图中传递的数据格式。这里我们使用 TypedDict 定义一个包含字符串列表的字典。

python 复制代码
from typing import List, TypedDict

class State(TypedDict):
    nlist: List[str]

2. 编写节点函数 (Nodes)

节点是一个简单的函数,它接收 State 并返回更新后的 State

python 复制代码
def node_a(state: State) -> State:
    print(f"节点 A 接收到的数据: {state['nlist']}")
    note = "来自节点 A 的问候:Hello World"
    # 返回更新后的状态
    return {"nlist": [note]}

3. 构建与编译图

使用 StateGraph 将节点和逻辑流程(边)连接起来。

python 复制代码
from langgraph.graph import END, START, StateGraph

# 1. 初始化图,并指定状态类型
builder = StateGraph(State)

# 2. 添加节点
builder.add_node("a", node_a)

# 3. 设置逻辑流程
builder.add_edge(START, "a")  # 从起点开始进入节点 a
builder.add_edge("a", END)    # 节点 a 执行完后结束

# 4. 编译成可执行对象
graph = builder.compile()

三、怎么使用图?

当你调用 graph.invoke() 时,LangGraph 的运行时(Runtime)会接管一切:

  1. 初始化: 根据输入初始化状态。

  2. 节点调度: 选定节点(如 node_a)执行。

  3. 状态传递: 将当前状态传递给函数。

  4. 状态更新: 接收函数返回的结果并合并到全局状态中。

python 复制代码
initial_state = State(nlist=["你好节点 A,你最近怎么样?"])
result = graph.invoke(initial_state)

# 输出结果:
# 节点 A 接收到的数据: ['你好节点 A,你最近怎么样?']
# {'nlist': ['来自节点 A 的问候:Hello World']}
总结 说明
数据共享 所有节点共享同一个 State,可以使用 TypedDict、dataclass 或 Pydantic 定义。
逻辑单元 节点是纯 Python 函数,职责明确:接收状态 -> 处理 -> 返回更新。
执行流 调用 invoke 后,图按照预定义的边(Edge)自动流转,直至到达 END
灵活性 你可以随时向图中添加新节点,或扩展 State 字段以传递更复杂的数据。
相关推荐
難釋懷19 分钟前
RedisTemplate配置读写分离
前端·bootstrap·html
冰暮流星27 分钟前
javascript如何实现删除数组里面的重复元素
开发语言·前端·javascript
网络点点滴2 小时前
透传属性$attrs
前端·javascript·vue.js
90后的晨仔2 小时前
OpenClaw macOS 完整安装指南
前端
Moment2 小时前
尤雨溪宣布 Vite+ 正式开源,前端工具链要大一统了
前端·javascript·面试
喵叔哟2 小时前
5. 【Blazor全栈开发实战指南】--Blazor组件基础
开发语言·javascript·ecmascript
sunny_3 小时前
📖 2026年 大厂前端面试手写题库已开源(2.3k star)
前端·面试·github
IT_陈寒3 小时前
Vue组件复用率提升300%?这5个高阶技巧让你的代码焕然一新!
前端·人工智能·后端
We་ct3 小时前
LeetCode 79. 单词搜索:DFS回溯解法详解
前端·算法·leetcode·typescript·深度优先·个人开发·回溯
ujainu3 小时前
Electron 实战:将用户输入保存到本地文件 —— 基于 `fs.writeFileSync` 与 IPC 的安全写入方案
javascript·安全·electron