LangGraph批量并行处理解决方案:Send

Langgraph简介与入门 langgraph开发框架的简要介绍和快速入门 阅读详情
AI摘要

本文介绍了LangGraph批量并行处理解决方案Send,以笑话生成器为例,阐述了项目概述、核心依赖、状态结构设计等内容。分析了Send机制原理、批量创建过程和并行执行优势,还提及构建状态图、执行流程、可视化图表生成等。给出高级应用场景和性能优化建议,强调其在AI工作流中的价值。

LangGraph批量并行处理:使用Send实现高效笑话生成器

在构建复杂的AI工作流时,我们经常需要对多个相似的任务进行并行处理。LangGraph框架提供了Send机制,允许我们优雅地实现批量并行执行。本文将通过一个笑话生成器的例子,详细介绍如何使用LangGraph的Send功能实现高效的并行处理。

项目概述

本项目实现了一个批量笑话生成器,具备以下特点:

  • 并行处理:使用Send机制同时为多个主题生成笑话
  • 状态管理:通过TypedDict定义清晰的数据结构
  • 动态分发:根据输入主题数量动态创建并行任务
  • 结果聚合:自动收集并合并所有并行任务的结果

核心依赖与导入

import operator
from typing import Annotated, TypedDict
from langgraph.constants import Send
from langgraph.graph import END, START, StateGraph

关键导入说明:

  • operator.add:用于状态更新时的列表合并操作
  • Annotated:为类型注解添加额外的元数据信息
  • Send:LangGraph的批量执行机制
  • StateGraph:状态图的核心类

状态结构设计

class OverallState(TypedDict):
    sub: list[str]
    jokes: Annotated[list[str], operator.add]

状态结构解析:

sub字段

  • 类型:list[str]
  • 用途:存储需要生成笑话的主题列表
  • 示例:["cats", "dogs", "programming"]

jokes字段

  • 类型:Annotated[list[str], operator.add]
  • 用途:存储生成的笑话结果
  • 关键特性:使用operator.add注解,表示当多个节点返回jokes时,会自动进行列表合并操作

Annotated的作用:

# 当两个节点都返回jokes时:
# 节点1返回:{"jokes": ["Joke about cats"]}
# 节点2返回:{"jokes": ["Joke about dogs"]}
# 最终状态:{"jokes": ["Joke about cats", "Joke about dogs"]}

批量分发逻辑

def continue_to_jokes(state: OverallState):
    # 这个函数将会被调用来生成笑话,会触发生成笑话的节点,使用Send批量执行节点
    return [Send('generate_joke', {"sub": s}) for s in state['sub']]

函数功能分析:

Send机制原理

Send是LangGraph中用于批量并行执行的核心机制:

  • 第一个参数:目标节点名称(‘generate_joke’)
  • 第二个参数:传递给目标节点的状态数据

批量创建过程

# 假设输入状态:{"sub": ["cats", "dogs"]}
# 函数执行过程:
[
    Send('generate_joke', {"sub": "cats"}),    # 为cats主题创建任务
    Send('generate_joke', {"sub": "dogs"})     # 为dogs主题创建任务
]

并行执行优势

  • 性能提升:多个笑话同时生成,而不是串行处理
  • 资源利用:充分利用系统的并行处理能力
  • 扩展性:主题数量增加时,自动创建相应的并行任务

构建状态图

创建图实例

but = StateGraph(OverallState)

添加笑话生成节点

but.add_node("generate_joke", lambda state: {"jokes": [f"Joke about {state['sub']}"]})

节点函数解析:

  • 接收包含单个主题的状态
  • 生成格式化的笑话文本
  • 返回包含jokes的字典,会被自动合并到整体状态中

配置图的连接关系

# 添加条件边:从START到批量分发函数
but.add_conditional_edges(START, continue_to_jokes)

# 添加普通边:从生成笑话节点到END
but.add_edge("generate_joke", END)

边的类型说明:

  • 条件边(conditional_edges):根据函数返回值动态决定下一步执行
  • 普通边(edge):固定的连接关系

执行流程与结果

编译和执行

g = but.compile()
result = g.invoke({"sub": ["cats", "dogs"]})
print(result)

执行流程详解

  1. 初始状态:{"sub": ["cats", "dogs"], "jokes": []}

  2. 分发阶段:continue_to_jokes函数创建两个Send任务

    [
        Send('generate_joke', {"sub": "cats"}),
        Send('generate_joke', {"sub": "dogs"})
    ]
    
  3. 并行执行:两个generate_joke节点同时执行

    • 任务1:生成{"jokes": ["Joke about cats"]}
    • 任务2:生成{"jokes": ["Joke about dogs"]}
  4. 结果合并:由于使用了operator.add注解,结果自动合并

  5. 最终状态:

    {
        "sub": ["cats", "dogs"],
        "jokes": ["Joke about cats", "Joke about dogs"]
    }
    

可视化图表生成

graph_png = g.get_graph().draw_mermaid_png(max_retries=5)
with open("send_case.png", "wb") as f:
    f.write(graph_png)

这段代码生成工作流的可视化图表,帮助理解执行流程:

  • 使用Mermaid格式生成PNG图片
  • 设置最大重试次数为5,提高生成成功率
  • 保存为本地文件便于查看和分享

高级应用场景

1. 数据处理管道

# 批量处理不同数据源
def process_data_sources(state):
    return [Send('process_source', {"source": src}) for src in state['sources']]

2. 多模型推理

# 使用不同模型并行推理
def multi_model_inference(state):
    models = ["gpt", "claude", "gemini"]
    return [Send('inference', {"model": m, "query": state['query']}) for m in models]

3. A/B测试执行

# 并行执行多个测试变体
def run_ab_tests(state):
    variants = state['test_variants']
    return [Send('execute_variant', {"variant": v}) for v in variants]

性能优化建议

1. 合理控制并发数量

# 对大量任务进行分批处理
def batch_process(state, batch_size=10):
    items = state['items']
    batches = [items[i:i+batch_size] for i in range(0, len(items), batch_size)]
    return [Send('process_batch', {"batch": batch}) for batch in batches]

2. 错误处理机制

def robust_generate_joke(state):
    try:
        return {"jokes": [f"Joke about {state['sub']}"]}
    except Exception as e:
        return {"jokes": [f"Failed to generate joke for {state['sub']}: {str(e)}"]}

3. 资源管理

  • 监控内存使用情况
  • 设置合理的超时时间
  • 实现优雅的降级策略

总结

LangGraph的Send机制为并行处理提供了强大而灵活的解决方案。通过本文的示例,我们学习了:

核心概念

  • Send机制:实现批量并行任务分发
  • Annotated类型:定义状态合并策略
  • 条件边:根据状态动态创建执行路径

设计模式

  • 分离关注点:分发逻辑与执行逻辑独立
  • 状态驱动:通过状态变化控制工作流
  • 结果聚合:自动收集并合并并行结果

实际价值

  • 提升性能:并行处理显著减少总执行时间
  • 增强扩展性:轻松处理动态数量的任务
  • 简化代码:框架自动处理复杂的并行协调逻辑

这种设计模式在处理批量数据、多模型推理、分布式计算等场景中具有广泛的应用价值,为构建高效的AI工作流提供了坚实的基础。

如何通过并行化实现高效文本总结:使用LangChain与LangGraph的高级方法 Map-Reduce是一种常用于处理大规模数据的并行计算框架,其思想来源于函数式编程。Map(映射):将大文本拆分为多个子文档,然后并行对每个子文档执行相同的处理步骤,比如生成局部总结。Reduce(归并):将Map阶段生成的多个局部总结汇总,最终得到一个全局的总结。这种方法尤其适用于文本内容较长,超过模型上下文窗口大小的情况。在这种场景下,单次模型调用无法处理全部内容,因此需要将其拆分并逐步总结。当需要处理的文本量非常庞大时,单纯依靠一次LLM调用的方式往往无法满足需求。上下文窗口的限制。 阅读详情

相关推荐

OPTISYSTEM实战指南:线性调频连续波激光雷达系统仿真设计

本文提供了一份基于OPTISYSTEM软件的线性调频连续波激光雷达系统仿真实战指南。文章详细阐述了从软件界面熟悉、核心参数设置,到发射端、信道模型、相干接收端完整系统搭建的全过程,并介绍了性能优化与高级仿真技巧,旨在帮助读者快速掌握利用OPTISYSTEM进行低成本、高效率激光雷达系统设计与验证的方法。

weixin_29288313的博客 296

LangGraph——Send

sender

qq_50863584的博客 565

从SAS接口到InfiniBand:一张图看懂数据中心硬件‘黑话’(SFF-8643/8644、QSFP112、NDR/HDR/EDR)

本文深入解析数据中心硬件术语,从SAS接口标准(SFF-8643/8644)到速率标识(NDR/HDR/EDR),帮助工程师快速理解关键性能指标。特别对比了PCIe卡规格(HHHL/FHHL)和光模块选择(QSFP112/OSFP),并探讨InfiniBand在高性能网络中的优势,为硬件选型提供实用指南。

weixin_32103009的博客 427

基于大模型智能体Agent的LangGraph入门与实战

基于大模型智能体Agent的LangGraph入门与实战课程目标:本课程旨在为LangGraph的初学者提供深入的理论知识和实践技能,使其能够独立构建和部署基于LangGraph的应用程序。课程形式:理论讲解 + 实战演练第1课 LangGraph基础架构与环境配置-LangGraph的概念解析第2课 LangGraph基础架构与环境配置-LangGraph的环境搭建与依赖管理第3课 LangGraph的基础原理与应用入门-构建基本聊天机器人及使用工具增强第4课 LangGraph的基础原理与应用入门-内存管理、人在回路、状态更新第5课 LangGraph高级图控制技术-并行节点扇出和扇入、增加额外步骤、条件分支第6课 LangGraph高级图控制技术-稳定排序、Map-Reduce并行执行、图递归控制第7课 LangGraph持久化机制与状态管理-线程级持久化、子图持久化、跨线程持久化第8课 LangGraph Human-in-the-loop-断点设置、动态设置断点、编辑更新状态第9课 LangGraph Human-in-the-loop-等待用户输入、时间旅行、工具评审第10课 LangGraph在具有长期记忆的有状态Agent中的应用-长期记忆及短期记忆、过滤信息、删掉信息第11课 LangGraph在具有长期记忆的有状态Agent中的应用-摘要总结、跨线程持久化、代理语义搜索第12课 LangGraph工具集成与调用-直接调用ToolNode、大模型使用工具第13课 LangGraph工具集成与调用-工具调用报错处理、运行时值传递给工具、注入参数第14课 LangGraph工具集成与调用-配置传入工具、从工具更新图状态、管理大量工具第15课 LangGraph子图设计与实现-添加及使用子图、父图及子图状态管理第16课 LangGraph子图设计与实现-子图状态的查看与更新、子图输入输出的转换与处理第17课 LangGraph项目实战演练-多智能体系统主管委托各个代理第18课 LangGraph课程复习与答疑 自我反思案例及论文案例讲解

HBuilderx连接微信开发者工具

系列文章目录 文章目录系列文章目录前言一、环境1.HBuilerx 工具2.微信开发者工具二、关联微信开发者工具1.HBuilderx新建项目2.关联微信开发者工具3.运行微信小程序出现异常解决方法3.最终效果总结 前言 使用HBuilderx工具关联微信开发者工具,进行小程序开发 提示:以下是本篇文章正文内容,下面案例可供参考 一、环境 1.HBuilerx 工具 HBuilderx 2.微信开发者工具 微信开发者工具 二、关联微信开发者工具 1.HBuilderx新建项目 2.关联微信开发者工具

拥有必珍惜 3075

【Python】多分类算法—Random Forest

【Python】多分类算法—Random Forest 本文将主要就Random Forest(随机森林)的多分类应用进行描述,当然也可运用于二分类中 文章目录【Python】多分类算法—Random Forest前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 本文主要引用的是sklearn 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import nump

weixin_43166884的博客 1万+

LangGraph认知篇-Send机制

LangGraph 提供了 Send 机制,其核心功能是:通过条件边(conditional edges)动态生成下游节点的调用指令,实现状态的按需分发和节点的动态触发。

wend的博客 1893

强化学习(Reinforcement Learning)与动态系统控制方法

一个具体的 RBC 的例子是自动驾驶汽车中的交通规则。在训练过程中,代理通过与环境交互获取奖励信号,并学习如何在某个状态下采取最佳的行动,以最大化长期的累积奖励。在化工过程中,通过对生产过程中的温度、压力、流量等参数的控制来实现产品的质量和产量的提高。需要注意的是,以上代码只是一个简单的示例,实际的 MPC 系统可能会更加复杂,并包含更多的模型预测和控制算法来实现更复杂的控制任务。需要注意的是,以上代码只是一个简单的示例,实际的自动驾驶汽车系统可能会更加复杂,并包含更多的规则和条件来确保安全行驶。

AI天才研究院 4062

LangGraph Send 机制:动态任务分发与并行处理实战

dispatch:创建多个 Send↓worker:分别处理每个任务↓summarize:读取 reducer 合并后的结果虽然worker会执行多次,但当前案例中的每个分支都只有一个 worker 节点。该 superstep 的所有 worker 完成后,LangGraph 才会进入summarize,因此汇总节点可以读取合并后的全部结果。

qq_56068429的博客 211

Python实战日志_P4_图书馆Web API服务

目标:使用Flask将图书馆系统升级为RESTful API服务,掌握Web开发基础难度:⭐⭐⭐⭐☆预计学习时间:75分钟前置要求:已完成第3篇《个人图书馆管理系统》

qq_39436086的博客 83

基于matlab的CNN物体识别物体分类系统

主要对物体进行识别,搭建一个物体分类系统本次实验选择规模稍大的 CIFAR-10 数据集进行分类识别,对应图像的大小设计 VggNet、ResNet 进行网络训练。在实际操作过程中,受限于数据规模和硬件配置,对于大小放缩、批次参数、训练步数等进行了多次调试,这也对以后的图像分类任务具有较高的参考意义,并通过对 CIFAR-10 数据集进行训练和评测,采用网络修改的方式来得到新的 CNN 结构,适用于对网络进行配置、融合等相关研究。读者可以通过自行设计或选择其他网络、加载其他数据等方式进行实验的延伸。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2005

LangGraph实战:Command与Send在智能体协作中的动态流程控制艺术

本文深入探讨了LangGraph中Command与Send在智能体协作中的动态流程控制艺术。通过电商订单审核、客服系统转接等实战案例,展示了如何利用Command实现状态更新与流程控制的一体化,以及Send的并行处理能力。文章还提供了调试技巧和性能优化建议,帮助开发者高效构建智能工作流系统。

threejs5artist的博客 634

Python自动化脚本:模拟鼠标键盘保持电脑在线状态

在计算机自动化领域,模拟用户输入是一项基础且实用的技术,其核心原理是通过程序生成鼠标或键盘事件来与操作系统交互。这项技术的价值在于能够自动化重复性操作,提升工作效率,并解决特定场景下的系统交互问题。PyAutoGUI作为Python生态中广泛使用的自动化库,封装了跨平台的底层API调用,为开发者提供了简洁统一的接口来实现输入模拟。在实际工程实践中,这类技术常应用于自动化测试、远程办公辅助、数据抓取等场景,帮助用户保持系统活跃状态,防止因无操作导致的锁屏或休眠中断任务。通过合理配置移动间隔和随机化模式,可以更

weixin_28713299的博客 578

LangGraph 控制流原语实战:用 Branch、Send、Interrupt 打造动态决策的 Agent 工作流

本文是 LangGraph 系列教程的第 4 篇,聚焦图执行中最核心的一环——**控制流原语(Control Flow Primitives)**。此前我们已掌握图的蓝图 `StateGraph`、执行单元 `Node` 与共享状态的通信机制 `Channels`,但一个真实世界的 Agent(例如"该查天气还是直接回答"的聊天机器人)绝不会只沿着单一固定路径前进。通过阅读本文,你将完整掌握 La

gitblog_00794的博客 257

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LangGraph 踩坑:别再混淆 Send 和 Command

多任务、要并行、做分发 → 用 Send判分支、跳节点、改状态、续中断 → 用 CommandSend 负责「干活的多线程」Command 负责「流程的指挥棒」搞懂这两个核心原语,你才算真正掌握 LangGraph 的动态编排能力,不再只会写死流程!

m0_64581050的博客 456

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LangGraph Send 深度解析:动态并行实现 Map‑Reduce,批量文档摘要实战

场景:多篇文档,每篇独立调用LLM生成简短摘要,全部处理完成之后拼接成最终报告。Map阶段:Send分发,每篇文档单独worker调用LLM;Reduce阶段汇总拼接全部摘要。# 全局状态# worker局部状态,单篇文档# 分发路由return [prompt = f"""请提炼文档核心观点,不超过30个汉字,只输出摘要。"""return {}]output_lines.append(f"文档{s['doc_id']}:{s['text']}")

2301_80775213的博客 460

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LangGraph 实战:深入理解 MapReduce 模式与 Send 机制

需要一次性处理100 篇文档,每篇都要做摘要要对多个数据源并行调用 API,然后汇总结果批量生成内容,再统一整合成最终报告如果串行处理,耗时将是单次处理的 N 倍。这时候就需要MapReduce(映射-归约)模式。本文将基于LangGraph框架,深入讲解如何利用Send机制实现 MapReduce,并给出可直接运行的完整代码。阶段作用类比Map把大任务拆成小任务,分发给多个 Worker 并行处理项目经理把任务分给多个组员Reduce收集所有 Worker 的结果,合并成最终输出。

2301_81666833的博客 330

LangGraph 实战指南:节点、边、状态与 Send 并行扇出

LangGraph 用三块积木构建 Agent:节点干活、边指路、状态贯穿全局。本文基于 1.2.11 实测,覆盖五个实战:Send 并行扇出、Map-Reduce 计算、Send 加 LLM 批量文档摘要、子图不同 Schema 隔离、子图共享字段自动传递。每段代码可直接运行并附结果。文末归纳七条避坑(Send 须由条件边返回、并行结果须声明 reducer、调 LLM 需设 PYTHONPATH 等)和选型表,帮你判断串行用边、并行用 Send、子图隔离用不同 Schema、共享数据用同名字段。

FQBQG的博客 506

LangGraph爆了!MapReduce模式轻松实现任务分解与并行处理,收藏这篇超详细教程!

本文介绍了LangGraph中的MapReduce模式,通过"分而治之"思想实现高效的大规模数据处理。Map阶段将输入数据分割为子数据集并行处理,Reduce阶段聚合中间结果生成最终输出。示例代码展示了如何利用Send对象和条件边实现动态任务分解:首先分割大规模文档数据,然后路由到多个Map节点并行处理,最后汇总词频统计等中间结果。该模式显著提升了处理效率,适用于文档分析、创意生成等计算密集型任务,具有并行处理、高扩展性和简化编程模型等优势。

优快云_430422的博客 1098

LangGraph 控制流原语解析:Edge、Command、Send、Interrupt

EdgeCommandSendInterrupt复杂推理 Agent多 Agent 协作系统大规模并行任务 Agent人机协作流程这也是 LangGraph 相比传统 LLM pipeline 的最大突破。

无风听海 772

LangGraph 5大API实战拆解:Send/Command/Interrupt/Subgraph/Streaming,每个踩了1个坑才知道它不是你以为的那样

1. LangGraph 的核心是“状态+图形”,状态管理数据,图形组织流程,节点执行逻辑,边控制走向;2. 图形API围绕“构建-执行-控制”展开,Send 触发执行,Command 控制逻辑,Interrupt 暂停流程,Subgraphs 简化结构,Streaming 实现实时反馈;3. 适用场景:复杂智能体、多步骤工作流、需要状态管理和灵活跳转的任务,是 LangChain 生态中构建高级智能体的核心工具。

专注 Java / Python 开发,AI 大模型应用学习,持续输出源码教程,实战项目案例,学习笔记,拒绝空话,只写能直接跑的代码与可落地方案,关注我,一起少走弯路。 623

LangGraph项目教程:深入理解控制流原语(Branch、Send、Interrupt)

LangGraph项目教程:深入理解控制流原语(Branch、Send、Interrupt) 【免费下载链接】Tutorial-Codebase-Knowledge Turns Codebase into Easy Tutorial with AI ...

gitblog_00001的博客 606

深入解析 LangGraph 的动态控制流与状态管理:从 Send 到 Command 的全场景实践

通过今天的分享,我们深入了解了 LangGraph 中Send和Command这两个核心组件,以及它们在动态控制流和状态管理中的强大能力。从 map-reduce 模式的动态边生成,到多智能体交接中的状态更新与流程控制,再到子图导航、图迁移等高级特性,LangGraph 为我们提供了一套完整的解决方案。

佑瞻的博客 1651

LangGraph-Send API 动态创建工作者节点

执行器(如 AsyncGraphExecutor, ThreadPoolExecutor, ProcessPoolExecutor)用 Send 一次派发多个子任务到同一个或不同的 worker 节点,并用异步 worker 并行处理;你通过 Send("worker", {...}) 创建的是一个「发送给节点 worker 的执行事件」;返回一个“命令”,告诉 LangGraph 引擎下一步去哪里(如跳转节点、更新状态)- 普通节点之间的控制流(如:goto="analyze")

czhcc的专栏 903

LangGraph的Send机制

LangGraph 的是一种“运行时动态分叉”能力:在「条件边」函数里返回一个列表,LangGraph 会为列表里的每个对象,并把私有状态作为该实例的输入,从而实现的 Map-Reduce 风格流程。

墨鱼第二大脑 261

06.LangGraph检查点和Send机制

摘要: LangGraph通过检查点(Checkpoints)实现状态持久化,支持人机交互和跨会话记忆功能。检查点保存每个超级步骤的图状态快照,包括配置、元数据、状态值等信息,通过StateSnapshot对象管理。开发者在编译图时需指定检查点保存器(如AsyncSqliteSaver),并调用compile(checkpointer=my_checkpointer)启用持久化。示例代码演示了如何构建带检查点的状态图,实现简单的“加1”操作并保存到SQLite数据库。 关键词: LangGraph、检查点、

青鸟飞鱼 255
上一篇: 使用LangGraph构建具备记忆功能的智能对话Agent
下一篇: Ollama常用命令详解:本地大语言模型管理指南
AI航海家(Ethan)
博客等级 码龄7年 477粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值