尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
[拆解LangChain执行引擎-03]__pregel_tasks通道:成就“PUSH任务”的功臣
除了我们显式声明的用于存储业务数据或驱动信号的通道之外Pregel自身也会维护一些系统通道其中最重要的莫过于一个名为__pregel_tasks的通道。通过前面针对BSP的介绍我们知道当Superstep进入同步屏障并应用所有更新后引擎会根据节点针对通道的订阅和通道自身的是否发生改变生成下一步待执行的任务其实待执行的任务的生成方式不限于此。1. 两种任务创建方式我们将根据节点针对通道的订阅来驱动任务执行的模式称为Pull模式与之相对的则是借助于__pregel_tasks这个通道实现的Push模式。这是一个关闭累积模式的Topic类型的通道它存储的Topic体现为具有如下定义的Send对象。当某个节点执行之后可以像这个通道中写入一个Send来驱动某个节点在下一Superstep中执行。除了利用Send对象的node字段指定待执行的节点名称外还可以利用arg字段提供输入参数。classSend:node:strarg:Anydef__init__(self,/,node:str,arg:Any)-None由于关闭了累积模式在Topic类型通道中写入的内容只会在下一个Superstep中生效并且具有阅后即焚的特性。对于执行引擎来说这个名为__pregel_tasks的通道存储的就是下一Superstep以Push模式驱动执行的任务列表两者完美契合。2. 确认__pregel_tasks通道的存在__pregel_tasks通道的存在可以通过如下的演示实例来验证。如代码片段所示在采用常规方式将Pregel对象创建出来后我们根据通道名称从它的channels字段中将此通道提取出来。断言揭示了该通道自身的类型、存储的数据类型和累积模式开关。fromlanggraph.channelsimportLastValue,Topicfromlanggraph.pregelimportPregel,NodeBuilderfromlanggraph.typesimportSend,Sequence node(NodeBuilder().subscribe_only(input_channel).do(lambdaargs:args).write_to(output_channel))appPregel(nodes{node:node},channels{input_channel:LastValue(str),output_channel:LastValue(str)},input_channels[input_channel],output_channels[output_channel],)tasks:Topic[Send]app.channels[__pregel_tasks]assertisinstance(tasks,Topic)asserttasks.ValueTypeSequence[Send]asserttasks.accumulateFalse3. 被保护起来的通道虽然__pregel_tasks就是一个普通的Topic类型的通道但是它并未开发对外部使用Pregel把它保护得非常好。我们不能声明一个与之同名的通道否则就会像如下的方式一样抛出一个ValueError并提示Channel __pregel_tasks is reserved and cannot be used in the graph.。fromlanggraph.channelsimportTopicfromlanggraph.pregelimportPregel,NodeBuilderfromlanggraph.typesimportSend,Sequencetry:appPregel(nodes{node:NodeBuilder().subscribe_only(__pregel_tasks)},channels{__pregel_tasks:Topic[Sequence[Send]]},input_channels[input_channel],output_channels[output_channel],)assertFalse,Expected an error due to reserved channel nameexceptExceptionase:assertisinstance(e,ValueError)assertstr(e)Channel __pregel_tasks is reserved and cannot be used in the graph.我们也不能采用常规的方式将向其发送Send对象。比如在如下的演示程序中节点foo试图向此通道发送一个驱动节点bar执行的Send对象最终抛出了一个InvalidUpdateError异常并提示Cannot write to the reserved channel TASKS。除此之外由于Pregel在利用它将基于Push模式的任务创建出来后就会将其清空所以我们也无法读取其中的任务。fromlanggraph.channelsimportLastValuefromlanggraph.pregelimportPregel,NodeBuilderfromlanggraph.typesimportSendfromlanggraph.errorsimportInvalidUpdateError foo(NodeBuilder().subscribe_to(start,readFalse).do(lambda_:Send(nodebar,argfoobar)).write_to(__pregel_tasks))bar(NodeBuilder().do(lambdaargs:args).write_to(output))appPregel(nodes{foo:foo,bar:bar},channels{start:LastValue(str),output:LastValue(str),},input_channels[start],output_channels[output])try:app.invoke({start:None})assertFalse,Should have raised InvalidUpdateErrorexceptExceptionase:assertisinstance(e,InvalidUpdateError)assertstr(e)Cannot write to the reserved channel TASKS4. 唯一的解决方案我们能够想到的常规方法针对此通道的写入基本都绕不开引擎针对它的保护机制。我们在以Actor模型的角度来看Pregel中提到过节点利用ChannelWriter对象实现针对通道的写入。我们可以将针对通道的写入意图封装成ChannelWriteTupleEntry并以此来创建ChannelWriter这应该是唯一能够欺骗引擎验证的手段。如代码片段所示我们率先执行的节点foo会返回一个驱动节点bar指定的Send对象为了将它写入__pregel_tasks我们创建了一个ChannelWriter针对该通道的写入定义在ChannelWriteTupleEntry对象中具体体现在调用构造函数指定的mapper参数上它提供一个映射将节点的执行结果转成通道名称和值的映射关系。fromlanggraph.pregelimportPregel,NodeBuilderfromlanggraph.channelsimportLastValuefromlanggraph.pregel._readimportPregelNodefromlanggraph.pregel._writeimportChannelWrite,ChannelWriteTupleEntryfromlanggraph.typesimportSend foo:PregelNode(NodeBuilder().subscribe_to(foo).do(lambda_:Send(nodebar,argfoo))).build()entryChannelWriteTupleEntry(mapperlambdaargs:[(__pregel_tasks,args)])foo.writers.append(ChannelWrite(writes[entry]))bar(NodeBuilder().do(lambdaargs:fbar is triggered by{args}.).write_to(output))appPregel(nodes{foo:foo,bar:bar},channels{foo:LastValue(None),output:LastValue(str),},input_channels[foo],output_channels[output],)resultapp.invoke(input{foo:None})assertresult{output:bar is triggered by foo.}
RELATED

相关推荐

工业日志结构化与PDF表格提取:Profinet/Modbus数据解析实战

工业日志结构化与PDF表格提取:Profinet/Modbus数据解析实战

从抓包到表格:工业日志结构化与PDF提取的完整实操记录搞工业数据处理的人,大概都经历过那种“数据在眼前,就是拿不到”的崩溃感。明明PLC就在机房里闪着灯,传感器数据一条条往上传,但当你打开抓包文件或者翻看设备导出…

📅 2026/10/3 2:06:33
[拆解LangChain执行引擎-08]基于Checkpoint的持久化

[拆解LangChain执行引擎-08]基于Checkpoint的持久化

LangGraph基于Checkpoint的持久化,核心是在每个Superstep后保存Pregel的状态,并以thread_id组织为可恢复轨迹。其作用包括支持容错与断点续跑,崩溃或中断后从最近检查点恢复;支撑人机交互,暂停等待审批后继续&#xff…

📅 2026/10/3 2:06:33
fantastic-admin 标签栏(Tabbar)配置详解:icon 与 hotkeys 实战指南

fantastic-admin 标签栏(Tabbar)配置详解:icon 与 hotkeys 实战指南

前端AI 技能 【免费下载链接】basic ⭐⭐⭐⭐⭐ 面向 AI 编程的管理系统框架,兼容PC、移动端。AI-oriented management system framework, compatible with PC and mobile device. 项目地址: https://gitcode.com/GitHub_Trending/ba/basic 点击查看 免费…

📅 2026/10/3 2:06:33
MORE NEWS

更多资讯

📰

用 thiserror 派生宏消除自定义错误样板代码:100-exercises-to-learn-rust 的 TicketNewError 实战

示例工程教程 【免费下载链接】100-exercises-to-learn-rust A self-paced course to learn Rust, one exercise at a time. 项目地址: https://gitcode.com/GitHub_Trending/10/100-exercises-to-learn-rust 点击查看 免费下载 本篇指南聚焦 Rust 生态中最常用的错…

📰

IDM-VTON 人体解析工具链:Detectron2 tools 目录训练、评测与可视化脚本全解析

计算机视觉深度学习媒体生成 【免费下载链接】IDM-VTON [ECCV2024] IDM-VTON : Improving Diffusion Models for Authentic Virtual Try-on in the Wild 项目地址: https://gitcode.com/GitHub_Trending/id/IDM-VTON 点击查看 免费下载 导读:本文围绕 I…

📰

基于多视觉语言模型交叉描述的智能眼镜图像理解与质量评估实战指南(OpenGlass 项目)

人工智能AI 应用智能硬件本地部署可穿戴AI Agent 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 点击查看 免费下载 OpenGlass 是一个让任何普通眼镜变身 AI 智能眼镜的…

📰

Toonflow 更新说明全解读:从 21 种语言界面到画布复制、FFmpeg 工具与桌面更新机制

人工智能AI 应用AI AgentRAGAI 写作后端桌面应用 【免费下载链接】Toonflow-app Toonflow 是一款 AI 短剧漫剧工具,能够利用 AI 技术将小说自动转化为剧本,并结合 AI 生成的图片和视频,实现高效的短剧创作。借助 Toonflow,可以轻松…

📰

AI-For-Beginners Game Jam 作业实战指南:以「过去—现在—未来」框架剖析游戏中的 AI 进化

教程人工智能机器学习深度学习 【免费下载链接】AI-For-Beginners 12 Weeks, 24 Lessons, AI for All! 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners 点击查看 免费下载 本指南基于 AI-For-Beginners 第 1 课(Introduction to A…

📰

telegram - api-reference

Telegram Bot API - 完整参考 目录 认证发送方法编辑方法聊天方法成员方法更新与 Webhook机器人配置主要类型解析模式错误代码 认证 基础 URL&#xff1a; https://api.telegram.org/bot<TOKEN>/<METHOD> 文件 URL&#xff1a; https://api.telegram.org/file/b…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬