结论:Multi Branch 指定的节点会两个node节点 并行执行
如果结果可以聚合,则组装结果输出
package main
import (
"context"
"fmt"
"time"
"github.com/cloudwego/eino/compose"
)
func main() {
ctx := context.Background()
g := compose.NewGraph[string, any]()
lambda0 := compose.InvokableLambda(func(ctx context.Context, input string) (output string, err error) {
fmt.Println("lambda0", input)
return "device", nil
})
lambda1 := compose.InvokableLambda(func(ctx context.Context, input string) (out map[string]any, err error) {
time.Sleep(1 * time.Second)
fmt.Println("lambda1", input)
return map[string]any{"key1": "汪"}, nil
})
lambda2 := compose.InvokableLambda(func(ctx context.Context, input string) (out map[string]any, err error) {
time.Sleep(5 * time.Second)
fmt.Println("lambda2", input)
return map[string]any{"key2": "喵"}, nil
})
lambda3 := compose.InvokableLambda(func(ctx context.Context, input map[string]any) (output string, err error) {
fmt.Println("lambda3", input)
return "lambda3", nil
})
// 创建node
_ = g.AddLambdaNode("lambda0", lambda0)
_ = g.AddLambdaNode("lambda1", lambda1)
_ = g.AddLambdaNode("lambda2", lambda2)
_ = g.AddLambdaNode("lambda3", lambda3)
// 多分支
multiBranch1 := func(ctx context.Context, in string) (endNode map[string]bool, err error) {
return map[string]bool{"lambda1": true, "lambda2": true}, nil
}
_ = g.AddBranch("lambda0", compose.NewGraphMultiBranch(multiBranch1, map[string]bool{"lambda1": true, "lambda2": true, compose.END: false}))
// 添加边
g.AddEdge(compose.START, "lambda0")
g.AddEdge("lambda1", "lambda3")
g.AddEdge("lambda2", "lambda3")
g.AddEdge("lambda3", compose.END)
runner, err := g.Compile(ctx)
if err != nil {
panic(err)
}
res, _ := runner.Invoke(ctx, "dog")
fmt.Println("result", res)
}