diff --git a/pom.xml b/pom.xml
index e1a762f954910ff0b3223cca75d1c6a4af56cf53..bab89f067314550561f499b56558dc50566b911c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,6 +54,8 @@
8
8
UTF-8
+ 1.7.1
+ 2.0.0-beta.1
@@ -61,7 +63,13 @@
com.agentsflex
agents-flex-bom
- 2.0.0-beta.1
+ ${agentsflexbom.version}
+
+
+
+ dev.langchain4j
+ langchain4j
+ ${langchain4j.version}
diff --git a/tinyflow-support-langchain4j/pom.xml b/tinyflow-support-langchain4j/pom.xml
index d86d95a6513650b2def369d3849105111eb0c99c..95d24a09779388fca476c2d1352b8d410fb30b5b 100644
--- a/tinyflow-support-langchain4j/pom.xml
+++ b/tinyflow-support-langchain4j/pom.xml
@@ -18,4 +18,19 @@
UTF-8
+
+
+ dev.tinyflow
+ tinyflow-core
+ 2.0.0-beta.1
+
+
+
+
+ dev.langchain4j
+ langchain4j
+
+
+
+
\ No newline at end of file
diff --git a/tinyflow-support-langchain4j/src/main/java/dev/tinyflow/langchain4j/provider/Langchain4jLLm.java b/tinyflow-support-langchain4j/src/main/java/dev/tinyflow/langchain4j/provider/Langchain4jLLm.java
new file mode 100644
index 0000000000000000000000000000000000000000..4ede042711773c054cdacfd8425fe49627b5aaf3
--- /dev/null
+++ b/tinyflow-support-langchain4j/src/main/java/dev/tinyflow/langchain4j/provider/Langchain4jLLm.java
@@ -0,0 +1,76 @@
+package dev.tinyflow.langchain4j.provider;
+
+import dev.langchain4j.data.message.*;
+import dev.langchain4j.model.chat.ChatModel;
+import dev.langchain4j.model.chat.response.ChatResponse;
+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 java.util.ArrayList;
+import java.util.List;
+
+public class Langchain4jLLm 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 chatMessages = new ArrayList<>();
+ //系统提示词
+ if (StringUtil.hasText(llmNode.getSystemPrompt())) {
+ chatMessages.add(SystemMessage.from(llmNode.getSystemPrompt()));
+ }
+ // 系统消息
+ if (StringUtil.hasText(llmNode.getSystemPrompt())) {
+ chatMessages.add(SystemMessage.from(messageInfo.getSystemMessage()));
+ }
+
+ // 构建用户消息内容(文本+图片)
+ List userContents = new ArrayList<>();
+ // 用户消息
+ if (StringUtil.hasText(messageInfo.getMessage())) {
+ userContents.add(TextContent.from(messageInfo.getMessage()));
+ }
+ // 添加图片内容
+ List images = messageInfo.getImages();
+ if (images != null && !images.isEmpty()) {
+ for (String imageUrl : images) {
+ userContents.add(ImageContent.from(imageUrl));
+ }
+ }
+ // 添加用户消息
+ chatMessages.add(UserMessage.from(userContents));
+
+ // 发送请求并获取响应
+ ChatResponse response;
+
+ if (options != null) {
+ //TODO 如果有配置选项,使用模型特定的配置方式 可进行拦截model
+ response = chatModel.chat(chatMessages);
+ } else {
+ // 无配置选项的直接调用
+ response = chatModel.chat(chatMessages);
+ }
+
+ if (response == null) {
+ throw new RuntimeException("Langchain4jLLm can not get response!");
+ }
+
+ AiMessage aiMessage = response.aiMessage();
+ if (aiMessage != null && aiMessage.text() != null) {
+ return aiMessage.text();
+ } else {
+ throw new RuntimeException("Langchain4jLLm: AiMessage content is null or empty");
+ }
+ }
+}
\ No newline at end of file