From 85f8401c1e74cddd14f9ed0d72ebefe236864a42 Mon Sep 17 00:00:00 2001 From: LuanY77 <2307984361@qq.com> Date: Mon, 8 Sep 2025 14:15:19 +0800 Subject: [PATCH] test: coze workflow test --- .../protocol/AbstractProtocolTransformer.java | 1 + .../CozeWorkflowRunComponentHandler.java | 3 +- .../CozeWorkflowChatInvocationHandler.java | 2 +- .../CozeWorkflowRunInvocationHandler.java | 7 ++++- ...itional-spring-configuration-metadata.json | 2 +- .../liteflow-testcase-el-ai/pom.xml | 5 +++ .../ai/workflow/coze/CozeWorkflowTest.java | 31 +++++++++++++++++++ .../test/ai/workflow/coze/cmp/ACmp.java | 15 +++++++++ .../test/ai/workflow/coze/cmp/BCmp.java | 14 +++++++++ .../ai/workflow/coze/cmp/WorkFlowContext.java | 10 ++++++ .../ai/workflow/coze/cmp/WorkflowCmp.java | 23 ++++++++++++++ ...owTest.java => DashScopeWorkflowTest.java} | 4 +-- .../resources/workflow/coze/application.yaml | 9 ++++++ .../test/resources/workflow/coze/flow.el.xml | 8 +++++ 14 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/CozeWorkflowTest.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/ACmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/BCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkFlowContext.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkflowCmp.java rename liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/dashscope/{WorkflowTest.java => DashScopeWorkflowTest.java} (91%) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/application.yaml create mode 100644 liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/flow.el.xml diff --git a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/interact/protocol/AbstractProtocolTransformer.java b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/interact/protocol/AbstractProtocolTransformer.java index 2bcc56771..ca6e63b2e 100644 --- a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/interact/protocol/AbstractProtocolTransformer.java +++ b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/interact/protocol/AbstractProtocolTransformer.java @@ -23,6 +23,7 @@ import java.util.Optional; * @since TODO */ +@Deprecated public abstract class AbstractProtocolTransformer implements ProtocolTransformer { private static final String FINISHED_DATA = "finished"; diff --git a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/handler/CozeWorkflowRunComponentHandler.java b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/handler/CozeWorkflowRunComponentHandler.java index 1d46ff46e..d98aa55e4 100644 --- a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/handler/CozeWorkflowRunComponentHandler.java +++ b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/handler/CozeWorkflowRunComponentHandler.java @@ -4,6 +4,7 @@ import com.yomahub.liteflow.ai.annotation.AIComponent; import com.yomahub.liteflow.ai.proxy.handler.WorkflowComponentHandler; import com.yomahub.liteflow.ai.proxy.wrap.AIProxyWrapBean; import com.yomahub.liteflow.ai.workflow.coze.annotation.CozeWorkflowRun; +import com.yomahub.liteflow.ai.workflow.coze.invocation.CozeWorkflowRunInvocationHandler; import com.yomahub.liteflow.ai.workflow.coze.wrap.CozeWorkflowRunProxyWrapBean; import java.lang.reflect.InvocationHandler; @@ -29,6 +30,6 @@ public class CozeWorkflowRunComponentHandler extends WorkflowComponentHandler wrapBean) { - return null; + return new CozeWorkflowRunInvocationHandler((CozeWorkflowRunProxyWrapBean) wrapBean); } } diff --git a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowChatInvocationHandler.java b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowChatInvocationHandler.java index d0cc04c65..6d5ed62f4 100644 --- a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowChatInvocationHandler.java +++ b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowChatInvocationHandler.java @@ -44,7 +44,7 @@ public class CozeWorkflowChatInvocationHandler extends AbstractAIInvocationHandl .auth(new TokenAuth(property.getApiKey())) .baseURL( StrUtil.isBlank(property.getBaseUrl()) ? - Consts.COZE_COM_BASE_URL : + Consts.COZE_CN_BASE_URL : property.getBaseUrl() ) .build(); diff --git a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowRunInvocationHandler.java b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowRunInvocationHandler.java index 5843b4956..bea3e270f 100644 --- a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowRunInvocationHandler.java +++ b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/java/com/yomahub/liteflow/ai/workflow/coze/invocation/CozeWorkflowRunInvocationHandler.java @@ -45,7 +45,7 @@ public class CozeWorkflowRunInvocationHandler extends AbstractAIInvocationHandle .auth(new TokenAuth(property.getApiKey())) .baseURL( StrUtil.isBlank(property.getBaseUrl()) ? - Consts.COZE_COM_BASE_URL : + Consts.COZE_CN_BASE_URL : property.getBaseUrl() ) .build(); @@ -94,4 +94,9 @@ public class CozeWorkflowRunInvocationHandler extends AbstractAIInvocationHandle return runs.create(builder.build()); } } + + @Override + protected void checkValidation(ProcessorContext processorContext) { + // 空实现 + } } diff --git a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/resources/META-INF/additional-spring-configuration-metadata.json index f980efd62..d6b48c310 100644 --- a/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/liteflow-ai/liteflow-ai-workflow/liteflow-ai-workflow-coze/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -11,7 +11,7 @@ "type": "java.lang.String", "description": "apiUrl for coze service.", "sourceType": "com.yomahub.liteflow.ai.workflow.coze.config.CozeWorkflowProperty", - "defaultValue": "https://api.coze.com" + "defaultValue": "https://api.coze.cn" } ] } \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/pom.xml b/liteflow-testcase-el/liteflow-testcase-el-ai/pom.xml index adfcd8caa..d9b90ad54 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-ai/pom.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/pom.xml @@ -45,6 +45,11 @@ liteflow-ai-workflow-dashscope ${revision} + + com.yomahub + liteflow-ai-workflow-coze + ${revision} + diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/CozeWorkflowTest.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/CozeWorkflowTest.java new file mode 100644 index 000000000..d6ad03b61 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/CozeWorkflowTest.java @@ -0,0 +1,31 @@ +package com.yomahub.liteflow.test.ai.workflow.coze; + +import com.yomahub.liteflow.ai.context.ChatContext; +import com.yomahub.liteflow.ai.util.SpringUtil; +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.ai.workflow.coze.cmp.WorkFlowContext; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; + +import javax.annotation.Resource; + +@TestPropertySource(properties = {"spring.config.location=classpath:workflow/coze/application.yaml"}) +@SpringBootTest(classes = {CozeWorkflowTest.class, SpringUtil.class}) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.ai.workflow.coze.cmp"}) +public class CozeWorkflowTest { + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testCozeWorkflow() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", null, ChatContext.class, WorkFlowContext.class); + Assertions.assertTrue(response.isSuccess()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/ACmp.java new file mode 100644 index 000000000..64ebe043d --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/ACmp.java @@ -0,0 +1,15 @@ +package com.yomahub.liteflow.test.ai.workflow.coze.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("a") +public class ACmp extends NodeComponent { + + @Override + public void process() throws Exception { + WorkFlowContext context = this.getContextBean(WorkFlowContext.class); + context.setInput("What is the capital of France?"); + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/BCmp.java new file mode 100644 index 000000000..ff7247315 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/BCmp.java @@ -0,0 +1,14 @@ +package com.yomahub.liteflow.test.ai.workflow.coze.cmp; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("b") +public class BCmp extends NodeComponent { + + @Override + public void process() throws Exception { + WorkFlowContext context = this.getContextBean(WorkFlowContext.class); + System.out.println("BCmp executed! The result is: " + context.getResult().getData()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkFlowContext.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkFlowContext.java new file mode 100644 index 000000000..3f0594555 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkFlowContext.java @@ -0,0 +1,10 @@ +package com.yomahub.liteflow.test.ai.workflow.coze.cmp; + +import com.coze.openapi.client.workflows.run.RunWorkflowResp; +import lombok.Data; + +@Data +public class WorkFlowContext { + private String input; + private RunWorkflowResp result; +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkflowCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkflowCmp.java new file mode 100644 index 000000000..aa12ed337 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/coze/cmp/WorkflowCmp.java @@ -0,0 +1,23 @@ +package com.yomahub.liteflow.test.ai.workflow.coze.cmp; + +import com.yomahub.liteflow.ai.annotation.AIComponent; +import com.yomahub.liteflow.ai.annotation.model.io.AIOutput; +import com.yomahub.liteflow.ai.util.KeyValue; +import com.yomahub.liteflow.ai.workflow.coze.annotation.CozeWorkflowRun; + +@AIComponent( + nodeId = "cozeWorkflowNode", + nodeName = "Coze-Workflow" +) +@CozeWorkflowRun( + workflowId = "7547589243724939314", + parameters = { + @KeyValue(key = "input", value = "{{input}}") + }, + appId = "7547538064139485230" +) +@AIOutput( + methodExpress = "setResult" +) +public interface WorkflowCmp { +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/dashscope/WorkflowTest.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/dashscope/DashScopeWorkflowTest.java similarity index 91% rename from liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/dashscope/WorkflowTest.java rename to liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/dashscope/DashScopeWorkflowTest.java index 60fa337a3..a8f543c02 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/dashscope/WorkflowTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/workflow/dashscope/DashScopeWorkflowTest.java @@ -15,10 +15,10 @@ import org.springframework.test.context.TestPropertySource; import javax.annotation.Resource; @TestPropertySource(properties = {"spring.config.location=classpath:workflow/dashscope/application.yaml"}) -@SpringBootTest(classes = {WorkflowTest.class, SpringUtil.class}) +@SpringBootTest(classes = {DashScopeWorkflowTest.class, SpringUtil.class}) @EnableAutoConfiguration @ComponentScan({"com.yomahub.liteflow.test.ai.workflow.dashscope.cmp"}) -public class WorkflowTest { +public class DashScopeWorkflowTest { @Resource private FlowExecutor flowExecutor; diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/application.yaml b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/application.yaml new file mode 100644 index 000000000..5a96585e0 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/application.yaml @@ -0,0 +1,9 @@ +liteflow: + rule-source: workflow/coze/flow.el.xml + ai: + base-packages: + - com.yomahub.liteflow.test.ai.workflow.coze.cmp + enable: true + workflow: + coze: + apiKey: diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/flow.el.xml new file mode 100644 index 000000000..f317e9f91 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/workflow/coze/flow.el.xml @@ -0,0 +1,8 @@ + + + + + THEN(a, cozeWorkflowNode, b); + + +