【自然语言处理与大模型】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 字段以传递更复杂的数据。
相关推荐
Irene199117 小时前
CSS新属性分类总结(2020年后引入)
前端·css
LongtengGensSupreme17 小时前
后端设置了跨域但是还是提示跨域问题,原因是这里有两个独立的安全策略在起作用:Chrome和Edge浏览器安全策略强制修改方案
前端·chrome·edge·浏览器·跨域
程序员小李白17 小时前
弹性盒子详细解析
前端·css·css3
行走的陀螺仪17 小时前
在UniApp H5中,实现路由栈的持久化
前端·javascript·uni-app·路由持久化·路由缓存策略
米柆17 小时前
CSS:clip-path 详解
前端·css
ProgramHan17 小时前
React 19 新特性深度解析:告别 useEffect 的时代
前端·react.js·前端框架
次元工程师!17 小时前
Sa-Token完成路由鉴权
java·服务器·前端
IT_陈寒17 小时前
Redis 7.0 实战:5个被低估但超实用的新特性,让你的QPS提升40%
前端·人工智能·后端
南玖i17 小时前
SuperMap iServer + vue3 实现点聚合 超简单!
javascript·vue.js·elementui