背景

      前篇《langgraph4j原理源码分析 agent框架II 子agent/子图消息过滤》介绍了子agent过滤消息,只返回最后一条消息,减少调用链无用消息流转。

        今天测试并行agent发现失效,返回的消息没有过滤

分析

上图 展示ParallelNode的由来,编译图的编译代码,这些action是编译子图action,没有被编译“摆平”,并行节点包装多个并行的action,执行器只需当单个节点执行,并行action执行交给ParallelNode

!图编译的原理分析参看,langgraph4j原理源码分析图 II图编译-CSDN博客

上图 ParallelNode用reduce方法处理action返回的genrator

上图 reduce的逻辑,next.isDone=true,next是Data类型,此时,action最后一个返回,next.resultValue被丢弃

相比较,单个节点处理,WithEmbed的next方法

上图 isDone=true,返回最后的result,带resultValue的Data类型,后面处理转为NodeOutput输出

综述,ParallelNode丢弃了action最后一个返回

解决

修改AsyncParallelNodeAction的evalGenerator方法

上图 使用next方法手动遍历,获取最后一个返回

后记:官方已经修复了,时隔一天,要点个赞

Logo

更多推荐