diff --git a/service-ai/pom.xml b/service-ai/pom.xml index 472629d..2b1f205 100644 --- a/service-ai/pom.xml +++ b/service-ai/pom.xml @@ -155,6 +155,11 @@ liteflow-spring-boot-starter 2.13.2 + + com.yomahub + liteflow-el-builder + 2.13.2 + org.noear solon-ai diff --git a/service-ai/service-ai-web/pom.xml b/service-ai/service-ai-web/pom.xml index fa93ea7..a1b67ce 100644 --- a/service-ai/service-ai-web/pom.xml +++ b/service-ai/service-ai-web/pom.xml @@ -62,6 +62,10 @@ com.yomahub liteflow-spring-boot-starter + + com.yomahub + liteflow-el-builder + org.springframework.ai spring-ai-tika-document-reader diff --git a/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/BaseNode.java b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/BaseNode.java new file mode 100644 index 0000000..576a06c --- /dev/null +++ b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/BaseNode.java @@ -0,0 +1,10 @@ +package com.lanyuanxiaoyao.service.ai.web.flow; + +import com.yomahub.liteflow.core.NodeComponent; + +/** + * @author lanyuanxiaoyao + * @version 20250625 + */ +public abstract class BaseNode extends NodeComponent { +} diff --git a/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/EndNode.java b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/EndNode.java new file mode 100644 index 0000000..ef9cffa --- /dev/null +++ b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/EndNode.java @@ -0,0 +1,12 @@ +package com.lanyuanxiaoyao.service.ai.web.flow; + +/** + * @author lanyuanxiaoyao + * @version 20250625 + */ +public class EndNode extends BaseNode { + @Override + public void process() throws Exception { + + } +} diff --git a/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/LiteFlowService.java b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/LiteFlowService.java new file mode 100644 index 0000000..8307e55 --- /dev/null +++ b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/LiteFlowService.java @@ -0,0 +1,157 @@ +package com.lanyuanxiaoyao.service.ai.web.flow; + +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.yomahub.liteflow.builder.LiteFlowNodeBuilder; +import com.yomahub.liteflow.builder.el.ELBus; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.NodeTypeEnum; +import java.util.List; +import java.util.Map; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +/** + * @author lanyuanxiaoyao + * @version 20250625 + */ +@Slf4j +public class LiteFlowService { + public LiteFlowService() { + createNode("start-amis-node", NodeTypeEnum.COMMON, StartNode.class); + createNode("end-amis-node", NodeTypeEnum.COMMON, EndNode.class); + createNode("llm-amis-node", NodeTypeEnum.COMMON, LlmNode.class); + } + + private static void createNode(String name, NodeTypeEnum type, Class clazz) { + LiteFlowNodeBuilder.createNode() + .setId(name) + .setName(name) + .setType(type) + .setClazz(clazz) + .build(); + } + + @Data + public static class FlowData { + private List nodes; + private List edges; + private Map data; + + @Data + public static class Node { + private String id; + private String type; + } + + @Data + public static class Edge { + private String id; + private String source; + private String target; + } + } + + public static void main(String[] args) throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // language=JSON + String source = """ + { + "nodes": [ + { + "id": "BMFP3Eov94", + "type": "start-amis-node", + "position": { + "x": 10, + "y": 100 + }, + "data": {}, + "measured": { + "width": 256, + "height": 83 + }, + "selected": false + }, + { + "id": "PYK8LjduQ1", + "type": "end-amis-node", + "position": { + "x": 654, + "y": 332 + }, + "data": {}, + "measured": { + "width": 256, + "height": 83 + }, + "selected": false, + "dragging": false + }, + { + "id": "nCm-ij5I6o", + "type": "llm-amis-node", + "position": { + "x": 318, + "y": 208 + }, + "data": {}, + "measured": { + "width": 256, + "height": 83 + }, + "selected": true, + "dragging": false + } + ], + "edges": [ + { + "source": "BMFP3Eov94", + "target": "nCm-ij5I6o", + "id": "xy-edge__BMFP3Eov94-nCm-ij5I6o" + }, + { + "source": "nCm-ij5I6o", + "target": "PYK8LjduQ1", + "id": "xy-edge__nCm-ij5I6o-PYK8LjduQ1" + } + ], + "data": { + "BMFP3Eov94": { + "inputs": { + "name": { + "type": "text" + }, + "description": { + "type": "text", + "description": "文件描述" + } + } + }, + "nCm-ij5I6o": { + "model": "qwen3", + "outputs": { + "text": { + "type": "string" + } + }, + "systemPrompt": "你是个沙雕" + } + } + } + """; + FlowData root = mapper.readValue(StrUtil.trim(source), FlowData.class); + log.info("{}", root); + log.info( + "\n{}", + ELBus.ser( + "start-amis-node", + ELBus.ser("start-amis-node", "end-amis-node"), + "end-amis-node" + ).toEL(true) + ); + } +} diff --git a/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/LlmNode.java b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/LlmNode.java new file mode 100644 index 0000000..4dc9d70 --- /dev/null +++ b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/LlmNode.java @@ -0,0 +1,12 @@ +package com.lanyuanxiaoyao.service.ai.web.flow; + +/** + * @author lanyuanxiaoyao + * @version 20250625 + */ +public class LlmNode extends BaseNode { + @Override + public void process() throws Exception { + + } +} diff --git a/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/StartNode.java b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/StartNode.java new file mode 100644 index 0000000..4d1a34f --- /dev/null +++ b/service-ai/service-ai-web/src/test/java/com/lanyuanxiaoyao/service/ai/web/flow/StartNode.java @@ -0,0 +1,12 @@ +package com.lanyuanxiaoyao.service.ai.web.flow; + +/** + * @author lanyuanxiaoyao + * @version 20250625 + */ +public class StartNode extends BaseNode { + @Override + public void process() throws Exception { + + } +}