【自然语言处理与大模型】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 字段以传递更复杂的数据。
相关推荐
半个落月3 小时前
LangSmith 全链路观测(下):用 Dataset 与 LLM Judge 量化评估 RA
javascript·langchain
半个落月4 小时前
LangSmith 全链路观测(上):用 LangGraph 与 Milvus 构建可追踪的 RAG 客服
javascript·langchain
Java后端的Ai之路4 小时前
06-React-Props
前端·react.js·前端框架
半个落月4 小时前
LangChain.js Agent 中间件实战:生命周期、动态工具与文件权限
javascript·langchain
Flynt5 小时前
开源"间谍卫星"说数据全是真的,我把它的免key数据源挨个试了一遍
前端·开源·数据可视化
Csvn5 小时前
渲染管线
前端
程序员大阳5 小时前
副队长CSS教程(33)–圆角与透明
前端·css·透明·圆角
志尊宝6 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
鬼手点金6 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
柳杉6 小时前
借助 Codex 和可视化工作流,从调研到完整实现,3D 大屏竟然可以这么简单
前端·ai编程·数据可视化