【自然语言处理与大模型】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 字段以传递更复杂的数据。
相关推荐
东方小月9 分钟前
从零开发一个 Coding Agent(八):如何使用 Agent 类管理对话状态
前端·人工智能
张元清30 分钟前
React useEventSource Hook:自带断线重连的 Server-Sent Events (2026)
javascript·react.js
光影少年31 分钟前
RN 网络请求:Fetch / Axios 封装、超时、拦截器
前端·react native·react.js
学习星球44 分钟前
Vue 3 实战:拆解 RealWorld 项目
前端·vue.js
铁皮饭盒1 小时前
网页端, 6.5MB人脸识别模型, 谷歌框架, 又快又准
前端·javascript·后端
xiaohaiAIgeo1 小时前
【2026年】ASHRAE 110与EN 14175通风柜测试标准对比:进口与国产品牌性能差距
java·前端·数据库·科普知识
自进化Agent智能体1 小时前
Hermes 工具与工具集——Hermes 的内置能力
javascript
用户2930750976691 小时前
TypeScript 必考题:Type 与 Interface 全面对比
前端
hunterandroid2 小时前
[鸿蒙从零到一] HarmonyOS 媒体能力实战:图片、音频与视频处理
前端
打呵欠的猫2 小时前
我让 AI 封装了一个 ImageUpload 组件,它设计的 5 层校验链路比我想的周全
前端·ai编程