本网站可以通过分类标签帮助你快速筛选出你想看的文章,记住地址:www.Facec.cc

Eino案例:Multi Branch

结论: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)
}

# eino  

评论