Skip to content
目录

Pregel 执行引擎详解

Pregel 类实现 BSP:准备任务 → 并行执行节点 → 应用 channel 更新 → 写 checkpoint → 下一超步,直到无任务或达到 recursion_limit


1. 执行循环(概念)

mermaid
flowchart LR
  A[取待执行节点集] --> B[并行 runNode]
  B --> C[收集 writes]
  C --> D[apply 到 Channels]
  D --> E[checkpoint?]
  E --> F{还有任务?}
  F -->|| A
  F -->|| 结束

2. 核心组件

组件职责
Pregel编译后可执行图对象
PregelLoop超步主循环、调度
PregelRunner并发跑节点任务
ChannelWrite把节点输出转为 channel 更新

3. 任务从哪来

  • 入口START 或显式 input 写入 channel。
  • 后续:上一超步写 channel 后,根据 边 + 订阅 计算 PULL 到的节点。
  • Send / Command:动态派生子任务(map-reduce 式扇出)。
  • 条件边:读 state 决定下一节点集合。

4. 节点执行

节点函数签名(概念):接收 state 快照config(含 thread、run_id),返回 partial stateCommand(goto、resume、update)。
异常:可配置中断图或按策略重试(见版本文档)。


5. 并发与确定性

同超步内多节点可 并行;步末合并保证确定性取决于 reducer 是否可交换。
需要严格顺序时用单节点或 chain 边,勿同超步写冲突字段。


6. 缓存与 interrupt

  • 部分版本支持 cache policy 跳过重复 LLM 调用(依配置)。
  • interrupt() 在节点内抛出特殊控制流 → 保存 checkpoint → 暂停;resume 带用户输入继续(见 07)。

7. recursion_limit

防止环图死循环;超步计数超限抛错。设计图时保证有条件出口。


8. 总结

Pregel = LangGraph 的心脏;Graph 层只是生成配置好的 Pregel 实例。调试「为何没跑到某节点」:查本超步 channel 更新与边条件。

MIT License.