From b04c440ad6c9ae318f87b34dbcac5d56e8ee9eed Mon Sep 17 00:00:00 2001 From: shadow Date: Fri, 5 Dec 2025 14:42:07 +0800 Subject: [PATCH 1/3] =?UTF-8?q?perf=20=E4=BE=9D=E8=B5=96=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E7=AE=A1=E7=90=86=20feat=20=E5=A2=9E=E5=8A=A0springAiLLm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 ++- tinyflow-support-agentsflex/pom.xml | 1 - tinyflow-support-langchain4j/pom.xml | 1 - tinyflow-support-springai/pom.xml | 13 ++- .../tinyflow/springai/provider/SpringAiLLm | 91 +++++++++++++++++++ 5 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm diff --git a/pom.xml b/pom.xml index bab89f0..c111cba 100644 --- a/pom.xml +++ b/pom.xml @@ -55,22 +55,35 @@ 8 UTF-8 1.7.1 + 1.0.0-M6 2.0.0-beta.1 + + + dev.tinyflow + tinyflow-core + ${agentsflexbom.version} + com.agentsflex agents-flex-bom ${agentsflexbom.version} - + dev.langchain4j langchain4j ${langchain4j.version} + + + org.springframework.ai + spring-ai-core + ${springai.version} + diff --git a/tinyflow-support-agentsflex/pom.xml b/tinyflow-support-agentsflex/pom.xml index 88d8852..9d5f90c 100644 --- a/tinyflow-support-agentsflex/pom.xml +++ b/tinyflow-support-agentsflex/pom.xml @@ -22,7 +22,6 @@ dev.tinyflow tinyflow-core - 2.0.0-beta.1 diff --git a/tinyflow-support-langchain4j/pom.xml b/tinyflow-support-langchain4j/pom.xml index 95d24a0..7b46762 100644 --- a/tinyflow-support-langchain4j/pom.xml +++ b/tinyflow-support-langchain4j/pom.xml @@ -22,7 +22,6 @@ dev.tinyflow tinyflow-core - 2.0.0-beta.1 diff --git a/tinyflow-support-springai/pom.xml b/tinyflow-support-springai/pom.xml index bc0fe05..9704da8 100644 --- a/tinyflow-support-springai/pom.xml +++ b/tinyflow-support-springai/pom.xml @@ -8,9 +8,18 @@ tinyflow-java 2.0.0-beta.1 - - tinyflow-support-springai tinyflow-support-springai + tinyflow-support-springai + + + dev.tinyflow + tinyflow-core + + + org.springframework.ai + spring-ai-core + + 8 diff --git a/tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm b/tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm new file mode 100644 index 0000000..72a4ca7 --- /dev/null +++ b/tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm @@ -0,0 +1,91 @@ +package dev.tinyflow.springai.provider; + +import dev.tinyflow.core.chain.Chain; +import dev.tinyflow.core.llm.Llm; +import dev.tinyflow.core.node.LlmNode; +import dev.tinyflow.core.util.StringUtil; +import org.springframework.ai.chat.messages.Message; +import org.springframework.ai.chat.messages.SystemMessage; +import org.springframework.ai.chat.messages.UserMessage; +import org.springframework.ai.chat.model.ChatModel; +import org.springframework.ai.chat.model.ChatResponse; +import org.springframework.ai.chat.prompt.ChatOptions; +import org.springframework.ai.chat.prompt.Prompt; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class SpringAiLLm implements Llm { + + private ChatModel chatModel; + + public ChatModel getChatModel() { + return chatModel; + } + + public void setChatModel(ChatModel chatModel) { + this.chatModel = chatModel; + } + + @Override + public String chat(MessageInfo messageInfo, ChatOptions options, LlmNode llmNode, Chain chain) { + + List messages = new ArrayList<>(); + + if (StringUtil.hasText(llmNode.getSystemPrompt())) { + messages.add(new SystemMessage(llmNode.getSystemPrompt())); + } + + if (StringUtil.hasText(messageInfo.getSystemMessage())) { + messages.add(new SystemMessage(messageInfo.getSystemMessage())); + } + + List images = messageInfo.getImages(); + if (images != null && !images.isEmpty()) { + + StringBuilder contentBuilder = new StringBuilder(); + if (StringUtils.hasText(messageInfo.getMessage())) { + contentBuilder.append(messageInfo.getMessage()).append("\n"); + } + contentBuilder.append("包含以下图片:"); + for (String imageUrl : images) { + contentBuilder.append("\n").append(imageUrl); + } + messages.add(new UserMessage(contentBuilder.toString())); + } else { + + if (StringUtils.hasText(messageInfo.getMessage())) { + messages.add(new UserMessage(messageInfo.getMessage())); + } + } + // TODO 目前不支持随机种子 + org.springframework.ai.chat.prompt.ChatOptions chatOptions = org.springframework.ai.chat.prompt.ChatOptions.builder() + .temperature(Optional.ofNullable(options.getTemperature()) + .map(Float::doubleValue) + .orElse(null)) + .topP(Optional.ofNullable(options.getTopP()) + .map(Float::doubleValue) + .orElse(null)) + .topK(options.getTopK()) + .maxTokens(options.getMaxTokens()) + .stopSequences(options.getStop()) + .build(); + + Prompt prompt = new Prompt(messages, chatOptions); + + ChatResponse response = chatModel.call(prompt); + + if (response == null) { + throw new RuntimeException("SpringAiLLm cannot get response!"); + } + + org.springframework.ai.chat.messages.AssistantMessage assistantMessage = response.getResult().getOutput(); + if (assistantMessage != null && assistantMessage.getText() != null) { + return assistantMessage.getText(); + } else { + throw new RuntimeException("SpringAiLLm: AssistantMessage content is null or empty"); + } + } +} \ No newline at end of file -- Gitee From 9a710401b45ee980e4c2edba13f66397ab1fb216 Mon Sep 17 00:00:00 2001 From: shadow Date: Fri, 5 Dec 2025 14:44:04 +0800 Subject: [PATCH 2/3] =?UTF-8?q?perf=20=E5=8E=BB=E9=99=A4=E6=9C=AA=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/dev/tinyflow/springai/provider/SpringAiLLm | 1 - 1 file changed, 1 deletion(-) diff --git a/tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm b/tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm index 72a4ca7..36c9a90 100644 --- a/tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm +++ b/tinyflow-support-springai/src/main/java/dev/tinyflow/springai/provider/SpringAiLLm @@ -9,7 +9,6 @@ import org.springframework.ai.chat.messages.SystemMessage; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatResponse; -import org.springframework.ai.chat.prompt.ChatOptions; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.util.StringUtils; -- Gitee From b3018130b6c17ba80f91284698742aaaf55be83f Mon Sep 17 00:00:00 2001 From: shadow Date: Fri, 5 Dec 2025 14:54:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix=20=E4=BF=9D=E7=95=99=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=9A=84=E7=89=88=E6=9C=ACagentsflexbom.vers?= =?UTF-8?q?ion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 74b6f09..25444c6 100644 --- a/pom.xml +++ b/pom.xml @@ -57,8 +57,8 @@ UTF-8 1.7.1 2.0.0-beta.2 + 2.0.0-beta.1 1.0.0-M6 - 2.0.0-beta.1 @@ -67,7 +67,7 @@ dev.tinyflow tinyflow-core - ${agentsflexbom.version} + ${agentsflexcore.version} com.agentsflex -- Gitee