【自然语言处理与大模型】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 字段以传递更复杂的数据。
相关推荐
吃糖的小孩1 小时前
从只读页面到可控真实探针:我如何给 Owner Console 加手动诊断
前端
谷无姜1 小时前
为什么你的性能优化无效?可能是"木桶效应"在作祟
前端·性能优化
雾非雾1 小时前
《基于具身交互智能数字人技术:如何打造AI数字人宣讲平台"红厅智播”》
前端
Revolution611 小时前
一段 JavaScript 代码执行时,到底发生了什么
前端·javascript
智能起源1 小时前
关于元素层级过多,导致压祯的问题(使用winform或者WPF应用的webview组件嵌套网页时,动效卡顿问题)
前端
Old Uncle Tom2 小时前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融
IT_陈寒2 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
东方小月2 小时前
从0开发一个 Coding Agent(一):前言
前端·人工智能·typescript
恋猫de小郭2 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter