From a50d298e582299bdb21555034cb2df4b340be35b Mon Sep 17 00:00:00 2001 From: "shentong.martin" Date: Mon, 10 Mar 2025 18:36:41 +0800 Subject: [PATCH] feat: react example change to ark model, set StreamToolCallChecker Change-Id: I9959d201ca18a14ac7789b1b4edae2798a792590 --- flow/agent/react/react.go | 42 +++++++++++++++++++++++++++++---------- go.mod | 4 ++-- go.sum | 8 ++++---- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/flow/agent/react/react.go b/flow/agent/react/react.go index b73b5fc..5bbf855 100644 --- a/flow/agent/react/react.go +++ b/flow/agent/react/react.go @@ -24,7 +24,7 @@ import ( "io" "os" - "github.com/cloudwego/eino-ext/components/model/openai" + "github.com/cloudwego/eino-ext/components/model/ark" "github.com/cloudwego/eino/callbacks" "github.com/cloudwego/eino/components/tool" "github.com/cloudwego/eino/compose" @@ -37,17 +37,13 @@ import ( ) func main() { - openAIAPIKey := os.Getenv("OPENAI_API_KEY") - openAIBaseURL := os.Getenv("OPENAI_BASE_URL") - openAIModelName := os.Getenv("OPENAI_MODEL_NAME") + arkAPIKey := os.Getenv("ARK_API_KEY") + arkModelName := os.Getenv("ARK_MODEL_NAME") ctx := context.Background() - - // prepare ChatModel - chatModel, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{ - BaseURL: openAIBaseURL, - APIKey: openAIAPIKey, - Model: openAIModelName, + arkModel, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{ + APIKey: arkAPIKey, + Model: arkModelName, }) if err != nil { logs.Errorf("failed to create chat model: %v", err) @@ -63,13 +59,37 @@ func main() { 你是一个帮助用户推荐餐厅和菜品的助手,根据用户的需要,查询餐厅信息并推荐,查询餐厅的菜品并推荐。 ` + // replace tool call checker with a custom one: check all trunks until you get a tool call + // because some models(claude or doubao 1.5-pro 32k) do not return tool call in the first response + // uncomment the following code to enable it + /*toolCallChecker := func(ctx context.Context, sr *schema.StreamReader[*schema.Message]) (bool, error) { + defer sr.Close() + for { + msg, err := sr.Recv() + if err != nil { + if errors.Is(err, io.EOF) { + // finish + break + } + + return false, err + } + + if len(msg.ToolCalls) > 0 { + return true, nil + } + } + return false, nil + }*/ + ragent, err := react.NewAgent(ctx, &react.AgentConfig{ - Model: chatModel, + Model: arkModel, ToolsConfig: compose.ToolsNodeConfig{ Tools: []tool.BaseTool{restaurantTool, dishTool}, }, MessageModifier: react.NewPersonaModifier(persona), + // StreamToolCallChecker: toolCallChecker, // uncomment it to replace the default tool call checker with custom one }) if err != nil { logs.Errorf("failed to create agent: %v", err) diff --git a/go.mod b/go.mod index 12171cd..a3584d5 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/cloudwego/eino v0.3.14 github.com/cloudwego/eino-ext/components/document/parser/html v0.0.0-20250117061805-cd80d1780d76 github.com/cloudwego/eino-ext/components/document/parser/pdf v0.0.0-20250117061805-cd80d1780d76 - github.com/cloudwego/eino-ext/components/model/ark v0.0.0-20250224084944-a4e81e88cf1b + github.com/cloudwego/eino-ext/components/model/ark v0.1.0 github.com/cloudwego/eino-ext/components/model/deepseek v0.0.0-20250221090944-e8ef7aabbe10 github.com/cloudwego/eino-ext/components/model/ollama v0.0.0-20250221090944-e8ef7aabbe10 github.com/cloudwego/eino-ext/components/model/openai v0.0.0-20250221090944-e8ef7aabbe10 @@ -62,7 +62,7 @@ require ( github.com/slongfield/pyfmt v0.0.0-20220222012616-ea85ff4c361f // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/volcengine/volc-sdk-golang v1.0.196 // indirect - github.com/volcengine/volcengine-go-sdk v1.0.181 // indirect + github.com/volcengine/volcengine-go-sdk v1.0.185 // indirect github.com/yargevad/filepathx v1.0.0 // indirect golang.org/x/arch v0.14.0 // indirect golang.org/x/crypto v0.34.0 // indirect diff --git a/go.sum b/go.sum index 7653974..99bf9ac 100644 --- a/go.sum +++ b/go.sum @@ -110,8 +110,8 @@ github.com/cloudwego/eino-ext/components/document/parser/html v0.0.0-20250117061 github.com/cloudwego/eino-ext/components/document/parser/html v0.0.0-20250117061805-cd80d1780d76/go.mod h1:LWR+h0EfIELl/I1tDSVH0Tgx8j2gymxa174U1C8BNps= github.com/cloudwego/eino-ext/components/document/parser/pdf v0.0.0-20250117061805-cd80d1780d76 h1:GJ4OqxyBH8la8Gu4PhTHXZNZFmrtEIrrymkCEpJ7XZU= github.com/cloudwego/eino-ext/components/document/parser/pdf v0.0.0-20250117061805-cd80d1780d76/go.mod h1:swAgO0nNekTSKGgFqiy4zShKaCDhiIZoKEFwpi7NBFE= -github.com/cloudwego/eino-ext/components/model/ark v0.0.0-20250224084944-a4e81e88cf1b h1:qibP2iDbklyMMcuOhxee7/gkAWu7chB1vmRzDEyIQ2E= -github.com/cloudwego/eino-ext/components/model/ark v0.0.0-20250224084944-a4e81e88cf1b/go.mod h1:E+vZK+7zt8ntzEB1wIMlfBQq8dNyZASryzLtQX9q7bM= +github.com/cloudwego/eino-ext/components/model/ark v0.1.0 h1:WjOxzaFqVObKBnboNBNFmrRw1f6eldbGn5gsYR9bEUQ= +github.com/cloudwego/eino-ext/components/model/ark v0.1.0/go.mod h1:ZQndPvPwpgSWx/yDFcajBhAVQC6wgRCJwYZBcIHjaaw= github.com/cloudwego/eino-ext/components/model/deepseek v0.0.0-20250221090944-e8ef7aabbe10 h1:9iORkTzR5fFrChi+KZyjHb1V4giJjXwBKqdvA4Q/7AM= github.com/cloudwego/eino-ext/components/model/deepseek v0.0.0-20250221090944-e8ef7aabbe10/go.mod h1:7q+/XE3qUbziFpBtszj90yfn+J0bUHCED5ImvaLFRR0= github.com/cloudwego/eino-ext/components/model/ollama v0.0.0-20250221090944-e8ef7aabbe10 h1:szRTjISOn310TwL4yJqqkvKVv9N/31g3zuhOhR9X1WI= @@ -537,8 +537,8 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X github.com/volcengine/volc-sdk-golang v1.0.23/go.mod h1:AfG/PZRUkHJ9inETvbjNifTDgut25Wbkm2QoYBTbvyU= github.com/volcengine/volc-sdk-golang v1.0.196 h1:KYbX76ibTlNhgm6Kq3sDTjrujDBd0za8ULg0v7+sCag= github.com/volcengine/volc-sdk-golang v1.0.196/go.mod h1:stZX+EPgv1vF4nZwOlEe8iGcriUPRBKX8zA19gXycOQ= -github.com/volcengine/volcengine-go-sdk v1.0.181 h1:/3PB4M1N4fjMqiSKTJwX43EZ5Nn1HUOtQrSCk+22+wI= -github.com/volcengine/volcengine-go-sdk v1.0.181/go.mod h1:gfEDc1s7SYaGoY+WH2dRrS3qiuDJMkwqyfXWCa7+7oA= +github.com/volcengine/volcengine-go-sdk v1.0.185 h1:MIH+YgdWZhO1fNg/vxLohl8ad7hlklaf46wpaTS1TN0= +github.com/volcengine/volcengine-go-sdk v1.0.185/go.mod h1:gfEDc1s7SYaGoY+WH2dRrS3qiuDJMkwqyfXWCa7+7oA= github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=