diff --git a/liteflow-ai/liteflow-ai-core/src/main/java/com/yomahub/liteflow/ai/proxy/invocation/ClassifyAIInvocationHandler.java b/liteflow-ai/liteflow-ai-core/src/main/java/com/yomahub/liteflow/ai/proxy/invocation/ClassifyAIInvocationHandler.java index abb519620..88f92b836 100644 --- a/liteflow-ai/liteflow-ai-core/src/main/java/com/yomahub/liteflow/ai/proxy/invocation/ClassifyAIInvocationHandler.java +++ b/liteflow-ai/liteflow-ai-core/src/main/java/com/yomahub/liteflow/ai/proxy/invocation/ClassifyAIInvocationHandler.java @@ -46,7 +46,7 @@ public class ClassifyAIInvocationHandler extends AbstractAIInvocationHandler resList = (List) response.as(processorContext.getModelRequest().toChatRequest().getOutputParser()); return String.join(",", resList); } else { - return response.getOutput().getContent(); + return response.getOutput().getContentWithoutThink(); } } } diff --git a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatOptions.java b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatOptions.java index 23e2ce8a2..391c220a3 100644 --- a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatOptions.java +++ b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatOptions.java @@ -34,7 +34,6 @@ public class ChatOptions implements ModelOptions { protected Boolean enableThinking; // ==== RequestBody 相关参数 ===== - // TODO options 重构 protected static final String TEMPERATURE_KEY = "temperature"; protected static final String TOP_P_KEY = "top_p"; protected static final String TOP_K_KEY = "top_k"; diff --git a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatResponse.java b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatResponse.java index 5274af545..f5dfcdc56 100644 --- a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatResponse.java +++ b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/entity/ChatResponse.java @@ -45,7 +45,7 @@ public class ChatResponse extends Response { * @return 转换后的对象 */ public T as(JsonSchemaParser parser) { - String rawTextContent = this.getOutput().getContent(); + String rawTextContent = this.getOutput().getContentWithoutThink(); if (StrUtil.isBlank(rawTextContent)) { throw new IllegalStateException("Cannot convert empty content to target type: " + parser.getTargetType()); } diff --git a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/message/AssistantMessage.java b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/message/AssistantMessage.java index c108c242e..861568e3f 100644 --- a/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/message/AssistantMessage.java +++ b/liteflow-ai/liteflow-ai-engine/src/main/java/com/yomahub/liteflow/ai/engine/model/chat/message/AssistantMessage.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.ai.engine.model.chat.message; +import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.yomahub.liteflow.ai.engine.tool.ToolCall; @@ -38,4 +39,17 @@ public class AssistantMessage extends AbstractMessage { public void setToolCalls(List toolCalls) { this.toolCalls = toolCalls; } + + /** + * 获取不包含 标签内容的消息内容 + * + * @return 清理后的消息内容 + */ + public String getContentWithoutThink() { + String content = this.getContent(); + if (StrUtil.isBlank(content)) { + return ""; + } + return content.replaceAll("(?s).*?", "").trim(); + } } diff --git a/liteflow-ai/liteflow-ai-model/liteflow-ai-dashscope/src/main/java/com/yomahub/liteflow/ai/model/dashscope/interact/DashScopeProtocolTransformer.java b/liteflow-ai/liteflow-ai-model/liteflow-ai-dashscope/src/main/java/com/yomahub/liteflow/ai/model/dashscope/interact/DashScopeProtocolTransformer.java index 47954bd1a..b5a32a605 100644 --- a/liteflow-ai/liteflow-ai-model/liteflow-ai-dashscope/src/main/java/com/yomahub/liteflow/ai/model/dashscope/interact/DashScopeProtocolTransformer.java +++ b/liteflow-ai/liteflow-ai-model/liteflow-ai-dashscope/src/main/java/com/yomahub/liteflow/ai/model/dashscope/interact/DashScopeProtocolTransformer.java @@ -138,6 +138,10 @@ public class DashScopeProtocolTransformer implements ProtocolTransformer { // 解析 AI 消息内容 String content = extractContentFromMessage(message); + String thinking = extractThinkingFromMessage(message); + if (StrUtil.isNotBlank(thinking)) { + content = "\n" + thinking + "\n\n" + (StrUtil.isNotBlank(content) ? content : ""); + } AssistantMessage assistantMessage = new AssistantMessage(content, toolCalls); // 解析 Token 使用情况 @@ -208,6 +212,11 @@ public class DashScopeProtocolTransformer implements ProtocolTransformer { return messageJson.path("content").asText(null); } + private String extractThinkingFromMessage(JsonNode messageJson) { + if (Objects.isNull(messageJson) || !messageJson.has("reasoning_content")) return null; + return messageJson.path("reasoning_content").asText(null); + } + private String extractContentFromDelta(JsonNode deltaJson) { if (Objects.isNull(deltaJson) || !deltaJson.has("content")) return null; return deltaJson.path("content").asText(null); diff --git a/liteflow-ai/liteflow-ai-model/liteflow-ai-ollama/src/main/java/com/yomahub/liteflow/ai/model/ollama/model/chat/OllamaChatRequest.java b/liteflow-ai/liteflow-ai-model/liteflow-ai-ollama/src/main/java/com/yomahub/liteflow/ai/model/ollama/model/chat/OllamaChatRequest.java index 8c3280d2c..529ecd07f 100644 --- a/liteflow-ai/liteflow-ai-model/liteflow-ai-ollama/src/main/java/com/yomahub/liteflow/ai/model/ollama/model/chat/OllamaChatRequest.java +++ b/liteflow-ai/liteflow-ai-model/liteflow-ai-ollama/src/main/java/com/yomahub/liteflow/ai/model/ollama/model/chat/OllamaChatRequest.java @@ -27,7 +27,7 @@ import java.util.List; public class OllamaChatRequest extends ChatRequest { // ==== RequestBody 相关参数 ===== - private static final String THINKING_KEY = "thinking"; + private static final String THINKING_KEY = "think"; private static final String FORMAT_KEY = "format"; // ==== RequestBody 相关参数 ===== @@ -59,7 +59,7 @@ public class OllamaChatRequest extends ChatRequest { @Override public RequestBody toRequestBody() { return super.toRequestBody() - .remove("enableThinking") + .remove("enable_thinking") .put(THINKING_KEY, this.options.getEnableThinking()) .putIf(ResponseType.JSON.equals(this.responseType), FORMAT_KEY, outputParser.getJsonSchema()); } diff --git a/liteflow-ai/liteflow-ai-model/liteflow-ai-openai/src/main/java/com/yomahub/liteflow/ai/model/openai/interact/OpenAIProtocolTransformer.java b/liteflow-ai/liteflow-ai-model/liteflow-ai-openai/src/main/java/com/yomahub/liteflow/ai/model/openai/interact/OpenAIProtocolTransformer.java index 59b524f10..ebe76b45d 100644 --- a/liteflow-ai/liteflow-ai-model/liteflow-ai-openai/src/main/java/com/yomahub/liteflow/ai/model/openai/interact/OpenAIProtocolTransformer.java +++ b/liteflow-ai/liteflow-ai-model/liteflow-ai-openai/src/main/java/com/yomahub/liteflow/ai/model/openai/interact/OpenAIProtocolTransformer.java @@ -138,6 +138,10 @@ public class OpenAIProtocolTransformer implements ProtocolTransformer { // 解析 AI 消息内容 String content = extractContentFromMessage(message); + String thinking = extractThinkingFromMessage(message); + if (StrUtil.isNotBlank(thinking)) { + content = "\n" + thinking + "\n\n" + (StrUtil.isNotBlank(content) ? content : ""); + } AssistantMessage assistantMessage = new AssistantMessage(content, toolCalls); // 解析 Token 使用情况 @@ -208,6 +212,11 @@ public class OpenAIProtocolTransformer implements ProtocolTransformer { return messageJson.path("content").asText(null); } + private String extractThinkingFromMessage(JsonNode messageJson) { + if (Objects.isNull(messageJson) || !messageJson.has("reasoning_content")) return null; + return messageJson.path("reasoning_content").asText(null); + } + private String extractContentFromDelta(JsonNode deltaJson) { if (Objects.isNull(deltaJson) || !deltaJson.has("content")) return null; return deltaJson.path("content").asText(null); diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/ClassifyTest.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/ClassifyTest.java index fc02f1e27..850174bf9 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/ClassifyTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/ClassifyTest.java @@ -14,33 +14,63 @@ import org.springframework.test.context.TestPropertySource; import javax.annotation.Resource; /** - * TODO + * 分类节点测试类 * * @author 苍镜月 * @since TODO */ -@TestPropertySource(properties = {"spring.config.location=classpath:core/classify/application.yaml"}) -@SpringBootTest(classes = {ClassifyTest.class, SpringUtil.class}) +@TestPropertySource(properties = { "spring.config.location=classpath:core/classify/application.yaml" }) +@SpringBootTest(classes = { ClassifyTest.class, SpringUtil.class }) @EnableAutoConfiguration -@ComponentScan({"com.yomahub.liteflow.test.ai.core.classify.cmp"}) +@ComponentScan({ "com.yomahub.liteflow.test.ai.core.classify.cmp" }) public class ClassifyTest { @Resource private FlowExecutor flowExecutor; @Test - public void testClassify() { + public void testOpenAIClassify() { LiteflowResponse response = flowExecutor.execute2Resp("chain1", null, ChatContext.class); Assertions.assertTrue(response.isSuccess()); - Assertions.assertEquals("a==>aiSwitch[aiSwitch]==>java", response.getExecuteStepStr()); + Assertions.assertEquals("a==>openaiSwitch[openaiSwitch]==>java", response.getExecuteStepStr()); } @Test - public void testMultiClassify() { + public void testOpenAIMultiClassify() { LiteflowResponse response = flowExecutor.execute2Resp("chain2", null, ChatContext.class); Assertions.assertTrue(response.isSuccess()); - Assertions.assertEquals("a==>aiMultiSwitch[aiMultiSwitch]==>java==>python", response.getExecuteStepStr()); + Assertions.assertEquals("a==>openaiMultiSwitch[openaiMultiSwitch]==>java==>python", + response.getExecuteStepStr()); } + @Test + public void testDashScopeClassify() { + LiteflowResponse response = flowExecutor.execute2Resp("chain3", null, ChatContext.class); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertEquals("a==>dashscopeSwitch[dashscopeSwitch]==>java", response.getExecuteStepStr()); + } + + @Test + public void testDashScopeMultiClassify() { + LiteflowResponse response = flowExecutor.execute2Resp("chain4", null, ChatContext.class); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertEquals("a==>dashscopeMultiSwitch[dashscopeMultiSwitch]==>java==>python", + response.getExecuteStepStr()); + } + + @Test + public void testOllamaClassify() { + LiteflowResponse response = flowExecutor.execute2Resp("chain5", null, ChatContext.class); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertEquals("a==>ollamaSwitch[ollamaSwitch]==>java", response.getExecuteStepStr()); + } + + @Test + public void testOllamaMultiClassify() { + LiteflowResponse response = flowExecutor.execute2Resp("chain6", null, ChatContext.class); + Assertions.assertTrue(response.isSuccess()); + Assertions.assertEquals("a==>ollamaMultiSwitch[ollamaMultiSwitch]==>java==>python", + response.getExecuteStepStr()); + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/dashscope/DashScopeClassifyCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/dashscope/DashScopeClassifyCmp.java new file mode 100644 index 000000000..bb757e896 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/dashscope/DashScopeClassifyCmp.java @@ -0,0 +1,35 @@ +package com.yomahub.liteflow.test.ai.core.classify.cmp.dashscope; + +import com.yomahub.liteflow.ai.annotation.AIComponent; +import com.yomahub.liteflow.ai.annotation.model.io.AIInput; +import com.yomahub.liteflow.ai.annotation.model.io.AIOutput; +import com.yomahub.liteflow.ai.annotation.model.io.InputField; +import com.yomahub.liteflow.ai.annotation.model.node.AIClassify; +import com.yomahub.liteflow.ai.util.TriState; + +@AIComponent( + nodeId = "dashscopeSwitch", + nodeName = "dashscopeSwitch", + provider = "dashscope", + apiUrl = "https://dashscope.aliyuncs.com/compatible-mode/v1", + model = "qwen-flash", + enableThinking = TriState.TRUE, + readTimeout = "10m", + connectTimeout = "10m" +) +@AIClassify( + userPrompt = "{{question}}", + categories = {"java", "python"} +) +@AIInput( + mapping = { + @InputField(name = "question", expression = "test", defaultValue = "请帮我写一段Java代码"), + } +) +@AIOutput( + methodExpress = "setData", + useKeyIndex = true, + key = "result" +) +public interface DashScopeClassifyCmp { +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/dashscope/DashScopeMultiClassifyCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/dashscope/DashScopeMultiClassifyCmp.java new file mode 100644 index 000000000..c383c8593 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/dashscope/DashScopeMultiClassifyCmp.java @@ -0,0 +1,36 @@ +package com.yomahub.liteflow.test.ai.core.classify.cmp.dashscope; + +import com.yomahub.liteflow.ai.annotation.AIComponent; +import com.yomahub.liteflow.ai.annotation.model.io.AIInput; +import com.yomahub.liteflow.ai.annotation.model.io.AIOutput; +import com.yomahub.liteflow.ai.annotation.model.io.InputField; +import com.yomahub.liteflow.ai.annotation.model.node.AIClassify; +import com.yomahub.liteflow.ai.util.TriState; + +@AIComponent( + nodeId = "dashscopeMultiSwitch", + nodeName = "dashscopeMultiSwitch", + provider = "dashscope", + apiUrl = "https://dashscope.aliyuncs.com/compatible-mode/v1", + model = "qwen-flash", + enableThinking = TriState.FALSE, + readTimeout = "10m", + connectTimeout = "10m" +) +@AIClassify( + userPrompt = "{{question}}", + categories = {"java", "python"}, + multiLabel = true +) +@AIInput( + mapping = { + @InputField(name = "question", expression = "test", defaultValue = "请帮我写一段Java代码, 同时给出 Python 代码"), + } +) +@AIOutput( + methodExpress = "setData", + useKeyIndex = true, + key = "result" +) +public interface DashScopeMultiClassifyCmp { +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/ollama/OllamaClassifyCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/ollama/OllamaClassifyCmp.java new file mode 100644 index 000000000..6eadf47d9 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/ollama/OllamaClassifyCmp.java @@ -0,0 +1,35 @@ +package com.yomahub.liteflow.test.ai.core.classify.cmp.ollama; + +import com.yomahub.liteflow.ai.annotation.AIComponent; +import com.yomahub.liteflow.ai.annotation.model.io.AIInput; +import com.yomahub.liteflow.ai.annotation.model.io.AIOutput; +import com.yomahub.liteflow.ai.annotation.model.io.InputField; +import com.yomahub.liteflow.ai.annotation.model.node.AIClassify; +import com.yomahub.liteflow.ai.util.TriState; + +@AIComponent( + nodeId = "ollamaSwitch", + nodeName = "ollamaSwitch", + provider = "ollama", + apiUrl = "http://localhost:11434", + model = "qwen3:32b", + enableThinking = TriState.FALSE, + readTimeout = "10m", + connectTimeout = "10m" +) +@AIClassify( + userPrompt = "{{question}}", + categories = {"java", "python"} +) +@AIInput( + mapping = { + @InputField(name = "question", expression = "test", defaultValue = "请帮我写一段Java代码"), + } +) +@AIOutput( + methodExpress = "setData", + useKeyIndex = true, + key = "result" +) +public interface OllamaClassifyCmp { +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/ollama/OllamaMultiClassifyCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/ollama/OllamaMultiClassifyCmp.java new file mode 100644 index 000000000..804ba73ae --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/ollama/OllamaMultiClassifyCmp.java @@ -0,0 +1,36 @@ +package com.yomahub.liteflow.test.ai.core.classify.cmp.ollama; + +import com.yomahub.liteflow.ai.annotation.AIComponent; +import com.yomahub.liteflow.ai.annotation.model.io.AIInput; +import com.yomahub.liteflow.ai.annotation.model.io.AIOutput; +import com.yomahub.liteflow.ai.annotation.model.io.InputField; +import com.yomahub.liteflow.ai.annotation.model.node.AIClassify; +import com.yomahub.liteflow.ai.util.TriState; + +@AIComponent( + nodeId = "ollamaMultiSwitch", + nodeName = "ollamaMultiSwitch", + provider = "ollama", + apiUrl = "http://localhost:11434", + model = "qwen3:32b", + enableThinking = TriState.FALSE, + readTimeout = "10m", + connectTimeout = "10m" +) +@AIClassify( + userPrompt = "{{question}}", + categories = {"java", "python"}, + multiLabel = true +) +@AIInput( + mapping = { + @InputField(name = "question", expression = "test", defaultValue = "请帮我写一段Java代码, 同时给出 Python 代码"), + } +) +@AIOutput( + methodExpress = "setData", + useKeyIndex = true, + key = "result" +) +public interface OllamaMultiClassifyCmp { +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/AIClassifyCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/openai/OpenAIClassifyCmp.java similarity index 72% rename from liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/AIClassifyCmp.java rename to liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/openai/OpenAIClassifyCmp.java index 1d45fbffd..954b4594a 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/AIClassifyCmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/openai/OpenAIClassifyCmp.java @@ -1,4 +1,4 @@ -package com.yomahub.liteflow.test.ai.core.classify.cmp; +package com.yomahub.liteflow.test.ai.core.classify.cmp.openai; import com.yomahub.liteflow.ai.annotation.AIComponent; import com.yomahub.liteflow.ai.annotation.model.io.AIInput; @@ -7,23 +7,13 @@ import com.yomahub.liteflow.ai.annotation.model.io.InputField; import com.yomahub.liteflow.ai.annotation.model.node.AIClassify; import com.yomahub.liteflow.ai.util.TriState; -/** - * TODO - * - * @author 苍镜月 - * @since TODO - */ - @AIComponent( - nodeId = "aiSwitch", - nodeName = "aiSwitch", -// provider = "ollama", -// apiUrl = "http://localhost:11434", -// model = "qwen3:32b", + nodeId = "openaiSwitch", + nodeName = "openaiSwitch", provider = "openai", apiUrl = "https://ark.cn-beijing.volces.com/api/v3", model = "doubao-seed-1-6-250615", - enableThinking = TriState.FALSE, + enableThinking = TriState.TRUE, readTimeout = "10m", connectTimeout = "10m" ) @@ -41,5 +31,5 @@ import com.yomahub.liteflow.ai.util.TriState; useKeyIndex = true, key = "result" ) -public interface AIClassifyCmp { +public interface OpenAIClassifyCmp { } diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/AIMultiClassifyCmp.java b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/openai/OpenAIMultiClassifyCmp.java similarity index 72% rename from liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/AIMultiClassifyCmp.java rename to liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/openai/OpenAIMultiClassifyCmp.java index d99431ad8..51d5a3af4 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/AIMultiClassifyCmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/java/com/yomahub/liteflow/test/ai/core/classify/cmp/openai/OpenAIMultiClassifyCmp.java @@ -1,4 +1,4 @@ -package com.yomahub.liteflow.test.ai.core.classify.cmp; +package com.yomahub.liteflow.test.ai.core.classify.cmp.openai; import com.yomahub.liteflow.ai.annotation.AIComponent; import com.yomahub.liteflow.ai.annotation.model.io.AIInput; @@ -7,23 +7,13 @@ import com.yomahub.liteflow.ai.annotation.model.io.InputField; import com.yomahub.liteflow.ai.annotation.model.node.AIClassify; import com.yomahub.liteflow.ai.util.TriState; -/** - * TODO - * - * @author 苍镜月 - * @since TODO - */ - @AIComponent( - nodeId = "aiMultiSwitch", - nodeName = "aiMultiSwitch", -// provider = "ollama", -// apiUrl = "http://localhost:11434", -// model = "qwen3:32b", + nodeId = "openaiMultiSwitch", + nodeName = "openaiMultiSwitch", provider = "openai", apiUrl = "https://ark.cn-beijing.volces.com/api/v3", model = "doubao-seed-1-6-250615", - enableThinking = TriState.FALSE, + enableThinking = TriState.TRUE, readTimeout = "10m", connectTimeout = "10m" ) @@ -42,5 +32,5 @@ import com.yomahub.liteflow.ai.util.TriState; useKeyIndex = true, key = "result" ) -public interface AIMultiClassifyCmp { +public interface OpenAIMultiClassifyCmp { } diff --git a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/core/classify/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/core/classify/flow.el.xml index 7e544d586..050ef6870 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/core/classify/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-ai/src/test/resources/core/classify/flow.el.xml @@ -2,10 +2,26 @@ - THEN(a, SWITCH(aiSwitch).TO(java, python)); + THEN(a, SWITCH(openaiSwitch).TO(java, python)); - THEN(a, SWITCH(aiMultiSwitch).TO(java, python)); + THEN(a, SWITCH(openaiMultiSwitch).TO(java, python)); + + + + THEN(a, SWITCH(dashscopeSwitch).TO(java, python)); + + + + THEN(a, SWITCH(dashscopeMultiSwitch).TO(java, python)); + + + + THEN(a, SWITCH(ollamaSwitch).TO(java, python)); + + + + THEN(a, SWITCH(ollamaMultiSwitch).TO(java, python));