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

[LangGraph] 超步

并发

并发

英语为 Concurrency

指的是在同一时间段内,多个任务交替进行。这些任务没有真正同时运行,而是通过任务切换来营造“同时进行”的效果。

类比:一个服务员同时负责 3 桌客人,他会先给 A 桌上菜,再去 B 桌点单,然后回到 C 桌加水……看起来好像在同时照顾三桌,其实是快速切换任务。

并发的特点:一个执行单元(单线程)通过任务调度来处理多个任务。

并行

英语为 Parallelism

指的是在同一时刻多个任务真正同时运行。这通常依赖于多核 CPU 或多台机器的同时执行。

类比:3 个服务员分别负责 3 桌客人,大家同时干活,互不干扰,这就是真正的同时进行。

并行的特点:需要多个执行单元(多线程、多进程、多核硬件)共同工作。

[!tip]

在 LangGraph 中,采用的是并发的方式执行多个任务。

扇出和扇入

扇出

英语为 Fan-out

指的是一个节点添加多个出边,将其同时连接到下游节点。当 LangGraph 执行到该节点时,会并发的触发所有出边。

image-20251110114622692

总结起来,就是一个节点连接多个下游节点。

扇入

英语为 Fan-in

指多个分支汇聚到同一个下游节点的操作。实现扇入时,需要为目标节点添加多条入边,使其能够接收多个上游节点的输入。

image-20251110114752333

总结起来,就是一个节点连接多个上游节点。

超步

英语为 super-step

中文:超级步骤、超步

图执行过程中的一个“批次轮次”,也就是一轮统一调度的执行阶段。

在 LangGraph 中,超步的设计思想借鉴自 Google 的分布式计算框架 Pregel,以及其他分布式图计算模型。它的核心目的,是让多个节点能够在同一轮中并发执行,并在每一轮结束时进行全局同步。

LangGraph 中超步特点:

  1. 并发性:同一个超步内,多个节点可以并发执行,从而提升一个执行效率。
  2. 同步性:每个超步结束后,会有一个全局的同步点,同步全局状态,同步完成之后,才进入下一个超步。
  3. 迭代性:图执行的过程其实就是超步的迭代过程。每一个超步都是在前一个超步的状态基础上进行计算和更新的。
image-20251110114127836

每个超步的执行流程,大致分为三步:

  1. 就绪节点并发执行
  2. 统一同步结果
  3. 解锁下一轮节点

import { END, START, StateGraph } from "@langchain/langgraph";
import { registry } from "@langchain/langgraph/zod";
import z from "zod";const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));const fmt = (t0?: number) => `${t0 !== undefined ? Date.now() - t0 : 0}ms`;const Schema = z.object({a: z.string().optional(),b: z.string().optional(),c: z.string().optional(),t0: z.number().optional(),logs: z.array(z.string()).register(registry, {reducer: {fn: (oldVal, newVal) => [...oldVal, ...newVal],},default: () => [],}),
});type TState = z.infer<typeof Schema>;const graph = new StateGraph(Schema).addNode("A", () => {console.log("运行A节点");return {a: "A节点执行后的结果",t0: Date.now(),logs: ["【A节点】开始(+0ms)", "【A节点】结束(+0ms)"],};}).addNode("B", async (state) => {console.log("运行B节点");const start = fmt(state.t0); // 得到一个相对于A节点的时间await sleep(2500);return {b: "b节点执行后的结果",logs: [`【B节点】开始(+${start})`, `【B节点】结束(+${fmt(state.t0)})`],};}).addNode("C", async (state) => {console.log("运行C节点");const start = fmt(state.t0); // 得到一个相对于A节点的时间await sleep(1000);return {c: "c节点执行后的结果",logs: [`【C节点】开始(+${start})`, `【C节点】结束(+${fmt(state.t0)})`],};}).addNode("D", async (state) => {console.log("运行D节点");const summary = `D节点已运行,b=${state.b ?? "none"},c=${state.c ?? "none"}`;return {logs: [`${summary}`, `【D节点】结束(+${fmt(state.t0)})`, `整个流程结束`],};}).addEdge(START, "A").addEdge("A", "B").addEdge("A", "C").addEdge("B", "D").addEdge("C", "D").addEdge("D", END).compile();const result = await graph.invoke({});
console.log(result);
http://www.jsqmd.com/news/366033/

相关文章:

  • 买米克朗机床去哪个网站?2026最新采购路径解析 - 品牌推荐大师1
  • 动物实验机构选择指南:五家资质齐全的权威服务商推荐 - 速递信息
  • 2026年新一代AI语音客服机器人厂商推荐及解决方案解析 - 品牌2025
  • 基于Spring Boot的少儿编程管理系统设计与实现(毕业论文)
  • 2026全国有机肥哪家强?从技术到服务的全方位对比 适配多场景种植需求与差异化选型参考 - 深度智识库
  • 2026年靠谱的纳米砂磨机,卧式砂磨机厂家实力优选榜 - 品牌鉴赏师
  • 动画衔接 动画拼接
  • 【IEEE出版 | EI检索】第八届 IEEE 通信、信息系统和计算机工程国际会议(IEEE - CISCE 2026)
  • 2026年工单系统品牌优选指南,工单系统优质厂商盘点 - 品牌2025
  • 编写考级助手APP,根据考级类型,(英语四六级/计算机考级/教师资格证),考级时间,推荐合适的考级资料,课程,生成考级复习计划,记录复习进度,提升考级通过率。
  • 什么是tini
  • 2026年深圳迪奥手表维修非官方网点推荐评测:甄选可靠售后服务中心榜单 - 十大品牌推荐
  • PHP 关于用判断is_resource函数判断 CURL 句柄,在 PHP 7.2+ 版本有一个重要变化!
  • 第 3 篇|调度是如何“跑起来”的?
  • 2026年智能语音机器人厂商推荐(覆盖客服、教育及中小企业) - 品牌2025
  • 【2026年最新】AI大模型应用开发完整学习路线:后端开发者转型必看,非常详细收藏我这一篇就够了
  • 寻找靠谱的动物实验服务机构?这五家值得重点关注 - 速递信息
  • 分析西安欧米奇西点培训,官网地址和招生时间怎么查 - myqiye
  • 2026年呼叫中心厂商推荐:聚焦售后、实施与培训,筑牢服务根基 - 品牌2025
  • 聊聊2026年重庆靠谱的GEO品牌企业,哪家性价比高 - 工业品牌热点
  • 打标白度提升+成本降25%!镭雕粉厂家的尼龙案例解析 - 速递信息
  • Vue 3 列表渲染:概念与用法详解
  • 2026年会计培训老牌机构怎么选,全国靠谱的品牌在这里 - 工业品网
  • 2026年深圳宝格丽手表维修服务评测与排名:非官方维修网点选择指南与避坑要点 - 十大品牌推荐
  • 2026年深圳帝舵手表维修推荐榜单:非官方维修网点服务评测与选择指南 - 十大品牌推荐
  • 2026年靠谱工单系统哪家好?优质工单软件选型指南 - 品牌2025
  • 分析江苏诚信的玻璃钢编绕拉挤管道服务商,费用情况大揭秘 - mypinpai
  • 2026年深圳宝玑手表维修推荐评测:非官方维修网点服务与售后选择指南 - 十大品牌推荐
  • 笔记本结构
  • 2026年深圳宝珀手表维修非官方网点推荐评测:售后网点服务排行榜单解析 - 十大品牌推荐