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 extends NodeComponent> 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 {
+
+ }
+}