当前位置: 首页 > news >正文

LangGraph 源码拆解,Graph 基类与 StateGraph

一、读源码的重要性

很多人觉得 “用框架不用看源码”,但 LangGraph 的核心逻辑都藏在两个类里:Graph(图的基础)和StateGraph(带状态的图)。看懂它们,你不仅能解决 90% 的 “调试难题”,还能自定义扩展功能(比如加个新的边类型)。

二、Graph 基类:所有图的祖先

Graph类是 LangGraph 的 “基础骨架”,负责管理节点、边和分支逻辑。我们先看它的核心属性和方法(源码简化版):

1. 核心属性:图的 “基础配置”

from collections import defaultdict
from typing import Any, Callable, Dict, Set, Tupleclass Graph:def __init__(self):self.nodes: Dict[str, Any] = {}  # 存所有节点:key是节点名,value是节点逻辑self.edges: Set[Tuple[str, str]] = set()  # 存普通边:(起始节点名, 目标节点名)self.branches: defaultdict = defaultdict(dict)  # 存条件边:按条件映射节点self.compiled = False  # 标记图是否已编译(编译后才能执行)

这些属性的作用很直白:nodes管 “有哪些节点”,edges管 “节点怎么连”,branches管 “条件分支”,compiled确保图结构不被随意修改。

2. 核心方法:图的 “操作工具”

你日常开发会用到的方法,都在这里:

  • add_node(node_name, action):添加节点,比如把一个 Python 函数封装成 “工具调用节点”;
  • add_edge(start_node, end_node):加普通边,比如add_edge("llm_node", "action_node")
  • add_conditional_edges(source, path, path_map):加条件边,path是判断函数,path_map是 “条件→节点” 的映射;
  • set_entry_point(node_name):设入口点(图从哪个节点开始);
  • compile():编译图,会检查 “有没有孤立节点”“入口点是否存在”,通过后才能执行。

三、StateGraph:给图加 “记忆” 的关键

Graph类只管 “结构”,不管 “数据”;StateGraph继承自Graph,核心是加了 “状态管理”,让节点间能传递数据。

1. 什么是 “状态(State)”?

状态就是一个 “全局字典”,但不是随便写的 —— 需要用TypedDict定义结构(确保数据类型安全)。比如你要做一个 “问答系统”,状态可以这样定义:

from typing import TypedDict# 输入状态:用户的问题
class InputState(TypedDict):question: str# 输出状态:AI的回答
class OutputState(TypedDict):answer: str# 整体状态:合并输入和输出,节点间共享
class OverallState(InputState, OutputState):pass

这样定义后,每个节点的输入 / 输出都必须符合OverallState的结构,不会出现 “节点 A 输出result,节点 B 要读answer” 的报错。

2. StateGraph 的核心用法

创建StateGraph时,必须指定状态结构,示例代码:

from langgraph.graph import StateGraph# 1. 初始化:指定整体状态、输入和输出模式
builder = StateGraph(state_schema=OverallState,  # 整体状态结构input_schema=InputState,    # 输入数据结构output_schema=OutputState   # 输出数据结构
)# 2. 加节点、加边(后续博客会详细讲)
builder.add_node("llm_node", llm_process_function)  # 加LLM处理节点
builder.add_edge("llm_node", "output_node")         # 加普通边# 3. 编译图
graph = builder.compile()

四、小结:从源码看 LangGraph 的设计思路

LangGraph 的源码逻辑很清晰:

  • Graph类打 “结构框架”,负责节点和边的管理;
  • StateGraph加 “数据层”,通过TypedDict确保状态安全;
  • 所有操作都围绕 “可复用、可扩展”,比如子图节点支持模块化,条件边支持动态决策。

下一篇博客,我们会动手写代码 —— 从节点和边的实现,到第一个完整的 LangGraph 应用。

http://www.dtcms.com/a/511824.html

相关文章:

  • php可以做视频网站长沙网页设计公司哪家好
  • 天津建筑网站建设新闻头条
  • 批量获取pdf中姓名电话 自动获取pdf中指定的文字
  • 基于rapidocr 的文档解析(pdf转md)工具(已部署)
  • Python中 async/await 和传统多线程的区别?
  • 手机网站建设信息wordpress addaction
  • 网站建设接单渠道上海定制建设网站
  • 亮相IROS 2025:傅利叶以开源协同推动具身智能技术迭代
  • Linux中的`fork`函数详解:深入解析
  • 嘉兴建设企业网站wordpress破解key
  • 自然语言处理实战——基于感知机模型的中文文本情感分类
  • 接到一个需求,怎么做性能分析,以及性能优化过程
  • 网站横幅背景图片企业网站不备案会怎么样
  • 网站建设用户需求调查物流公司
  • Leetcode+Java+图论II
  • git空目录处理
  • 自动化办公:用Python操作Excel、Word和PDF
  • 前端V0介绍(Vercel推出的AI前端生成工具)
  • 从 “对话” 到 “证书”:零知识证明的魔法工具箱 —— 让隐私验证走进普通人的数字生活
  • 培训类网站开发做网站需要买服务器
  • 对称树结构:原理、应用与Python实现
  • 4.4数组的基本操作
  • 湘潭网站建设优等磐石网络遨游建站
  • [go 面试] 前端请求到后端API的中间件流程解析
  • Ethernaut Level 13: Gatekeeper One - Gas计算与类型转换
  • 飞凌嵌入式ElfBoard-常用的网络服务的搭建之TFTP服务搭建
  • mybatis-plus的insertBatchSomeColumn方法实现批量插入
  • 上海传媒公司艺人seo项目优化案例分析文档
  • 【论文阅读】DiffusionDrive:截断扩散模型用于端到端自动驾驶
  • 解读Time Model Statistics中的PL/SQL 和 SQL执行时间