LangGraph 源码学习总结 2-图计算模型

从 BSP 到 LangGraph:图计算模型

本文梳理 BSP(整体同步并行)模型、Google Pregel 与 LangGraph 三者之间的思想传承与实现差异,揭示“超步”(Superstep)这一核心概念如何从大规模图计算走向智能体(Agent)工作流编排。


一、源头:BSP 模型与“超步”的诞生

BSP(Bulk Synchronous Parallel,整体同步并行) 由 Leslie Valiant 于 1989 年提出,是一种为并行算法提供简洁、可预测执行框架的计算模型。其核心由三部分构成:一组处理器-内存对、全局同步屏障和通信网络。

BSP 的执行以 “超步”(Superstep) 为单位,每个超步包含三个阶段:

  1. 本地计算:各处理器独立运算;
  2. 通信:发送消息(接收延迟到下一超步);
  3. 全局同步:所有处理器等待彼此完成,再进入下一轮。

这种“计算 → 通信 → 同步”的循环,使得算法行为可分析、可容错,成为大规模并行系统的重要理论基础 。


二、Pregel:BSP 在图计算中的成功实践

2010 年,Google 发布 Pregel,将 BSP 模型应用于大规模图处理。Pregel 以顶点为中心,每个顶点拥有状态,并在每轮超步中并行执行 compute() 函数,通过消息传递与邻居通信。

“在 BSP 中,计算是一系列超步的序列。在每个超步中,每个进程读取消息、独立执行代码并发送新消息” 。

Pregel 的典型应用包括 PageRank、最短路径、连通分量等迭代式、整体推进的图算法:

  • 迭代式:需多轮计算才能收敛;
  • 整体推进:每轮所有活跃顶点必须同步完成,确保状态一致性。

这种设计极大简化了分布式图算法的开发,并支持通过超步边界进行 checkpoint 实现容错 。


三、LangGraph:Pregel 思想在 AI 工作流中的泛化

随着大语言模型(LLM)和智能体系统的兴起,开发者需要一种能表达状态化、循环、条件分支的执行模型。LangGraph 应运而生,并明确借鉴 Pregel 的设计哲学。

“LangGraph 将经过验证的 BSP/Pregel 模式应用于 AI 智能体协调。两者的相似之处令人瞩目” 。

1. 核心抽象的转变

维度PregelLangGraph
图的含义数据图(顶点=实体)控制流图(节点=计算步骤)
计算单元图顶点(并行)工作流节点(默认串行)
通信机制消息传递共享全局状态
目标场景大规模图算法LLM Agent、工具调用链

LangGraph 的“节点”不是图数据中的顶点,而是如 call_llmrun_toolsummarize 等函数,它们读写一个共享的状态对象,驱动工作流前进 。

2. “超步”在 LangGraph 中的新含义

尽管 LangGraph 的运行时名为 Pregel,且文档中提及“每个超步执行一组节点,更新状态,并通过边传递控制流” ,但其“超步”并非 Pregel 式的全局同步轮次。

在 LangGraph 中:

  • 一个 “superstep” ≈ 一次状态更新周期
  • 默认情况下,每次只执行一个节点(串行);
  • 即使存在并行分支(如同时调用多个工具),也仅在局部同步,无全局屏障

“Pregel 依据 BSP 模式将应用程序的执行划分为多个步骤” ,但 LangGraph 的“步骤”是逻辑推理步,而非数据并行轮次。

3. 迭代与递进的体现

LangGraph 通过循环边实现迭代,例如经典的 ReAct Agent 流程:

Agent → 决策是否需工具 → 是 → 调用工具 → 回到 Agent → … → 终止

状态在每一步递进演化,直到满足结束条件。这种“状态驱动的循环”继承了 Pregel “状态迭代”的精神,但放弃了其并行与同步机制,以适应 LLM 应用的顺序决策本质


四、为何借用“超步”?——概念映射与工程启示

LangGraph 使用“superstep”一词,主要出于三重目的:

  1. 传达计算范式:强调“离散、迭代、状态驱动”的执行模型;
  2. 致敬设计源头:明确其受 Pregel/BSP 启发 ;
  3. 保留扩展可能:为未来支持分布式执行或更强一致性模型预留概念接口。

然而,必须清醒认识到:LangGraph 的“超步”是抽象类比,而非技术复刻。它解决了 AI 工作流的可组合性与可调试性问题,而非图计算的高性能并行问题 。


五、总结:思想的迁移,而非代码的复制

从 BSP 到 Pregel,再到 LangGraph,我们看到一个经典计算模型如何在不同领域被重新诠释:

  • BSP 提供了“超步 + 同步 + 消息”的并行计算骨架;
  • Pregel 将其用于图数据顶点的并行迭代;
  • LangGraph 则将其转化为控制流节点的状态机循环。

“LangGraph 基于 Pregel 模型运行图工作流,每个超步执行一组节点,更新状态” ,但这里的“超步”已是面向 AI 应用的语义升级。


基于模拟退火的计算器 在线运行 访问run.bcjh.xyz。 先展示下效果 https://pan.quark.cn/s/cc95c98c3760 参见此仓库。 使用方法(本地安装包) 前往Releases · hjenryin/BCJH-Metropolis下载最新 ,解压后输入游戏内校验码即可使用。 配置厨具 已在2.0.0弃用。 直接使用白菜菊花代码,保留高级厨具,新手池厨具可变。 更改迭代次数 如有需要,可以更改 中39行的数字来设置迭代次数。 本地编译 如果在windows平台,需要使用MSBuild编译,并将 改为ANSI编码。 如有条件,强烈建议这种本地运行(运行可加速、可多次重复)。 在 下运行 ,是游戏中的白菜菊花校验码。 编译、运行: - 在根目录新建 文件夹并 至build - - 使用 (linux) 或 (windows) 运行。 最后在命令行就可以得到输出结果了! (注意顺序)(得到厨师-技法,表示对应新手池厨具) 注:linux下不支持多任务选择 云端编译已在2.0.0弃用。 局限性 已知的问题: - 无法得到最优解! 只能得到一个比较好的解,有助于开阔思路。 - 无法选择菜品数量(默认拉满)。 可能有一定门槛。 (这可能有助于防止这类辅助工具的滥用导致分数膨胀? )(你问我为什么不用其他语言写? python一个晚上就写好了,结果因为有涉及json读写很多类型没法推断,jit用不了,算这个太慢了,所以就用c++写了) 工作原理 采用两层模拟退火来最大化总能量。 第一层为三个厨师,其能量用第二层模拟退火来估计。 也就是说,这套方法理论上也能算厨神(只要能够在非常快的时间内,算出一个厨神面板的得分),但是加上厨神的食材限制工作量有点大……以后再说吧。 (...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值