From d2005cfa4847f94704c46a090dd55eb3d4223fd1 Mon Sep 17 00:00:00 2001 From: evo <446796145@qq.com> Date: Sun, 5 Apr 2026 21:34:41 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E8=B0=83=E6=95=B4=E5=8F=AF?= =?UTF-8?q?=E8=A7=82=E6=B5=8B=E6=80=A7=E7=9B=91=E5=90=AC=E5=99=A8=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/agent/tool/ExecuteSqlQueryTool.java | 2 +- .../ruoyi/factory/EmbeddingModelFactory.java | 6 +- .../ruoyi/observability/MyAgentListener.java | 2 +- .../service/chat/impl/ChatServiceFacade.java | 69 ++++++------------- .../impl/provider/DeepseekServiceImpl.java | 7 +- .../chat/impl/provider/OllamaServiceImpl.java | 11 +-- .../chat/impl/provider/OpenAIServiceImpl.java | 7 +- .../chat/impl/provider/PPIOServiceImpl.java | 8 +-- .../impl/provider/QianWenChatServiceImpl.java | 5 +- .../impl/provider/ZhiPuChatServiceImpl.java | 8 +-- .../impl/AliBaiLianBaseEmbedProvider.java | 13 +--- .../embed/impl/OllamaEmbeddingProvider.java | 12 ---- .../embed/impl/OpenAiEmbeddingProvider.java | 11 --- 13 files changed, 56 insertions(+), 105 deletions(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/tool/ExecuteSqlQueryTool.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/tool/ExecuteSqlQueryTool.java index 7fb56ad6..1b9079f1 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/tool/ExecuteSqlQueryTool.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/tool/ExecuteSqlQueryTool.java @@ -43,7 +43,7 @@ public class ExecuteSqlQueryTool implements BuiltinToolProvider { @Tool("Execute a SELECT SQL query and return the results. Example: SELECT * FROM sys_user") public String executeSql(String sql) { // 2. 手动推入数据源上下文 - DynamicDataSourceContextHolder.push("agent"); +// DynamicDataSourceContextHolder.push("agent"); if (sql == null || sql.trim().isEmpty()) { return "Error: SQL query cannot be empty"; } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/factory/EmbeddingModelFactory.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/factory/EmbeddingModelFactory.java index a4d93725..b123e6bb 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/factory/EmbeddingModelFactory.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/factory/EmbeddingModelFactory.java @@ -2,8 +2,9 @@ package org.ruoyi.factory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.ruoyi.common.chat.service.chat.IChatModelService; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; +import org.ruoyi.common.chat.service.chat.IChatModelService; +import org.ruoyi.observability.EmbeddingModelListenerProvider; import org.ruoyi.service.embed.BaseEmbedModelService; import org.ruoyi.service.embed.MultiModalEmbedModelService; import org.springframework.beans.factory.NoSuchBeanDefinitionException; @@ -27,6 +28,7 @@ public class EmbeddingModelFactory { private final ApplicationContext applicationContext; private final IChatModelService chatModelService; + private final EmbeddingModelListenerProvider embeddingModelListenerProvider; // 模型缓存,使用ConcurrentHashMap保证线程安全 private final Map modelCache = new ConcurrentHashMap<>(); @@ -109,6 +111,8 @@ public class EmbeddingModelFactory { BaseEmbedModelService model = applicationContext.getBean(factory, BaseEmbedModelService.class); // 配置模型参数 model.configure(config); + // 增加嵌入模型监听器 + model.addListeners(embeddingModelListenerProvider.getEmbeddingModelListeners()); log.info("成功创建嵌入模型: factory={}, modelId={}", config.getProviderCode(), config.getId()); return model; } catch (NoSuchBeanDefinitionException e) { diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/observability/MyAgentListener.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/observability/MyAgentListener.java index 96223687..299ea6e9 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/observability/MyAgentListener.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/observability/MyAgentListener.java @@ -46,7 +46,7 @@ public class MyAgentListener implements dev.langchain4j.agentic.observability.Ag log.info("【Agent调用前】Agent ID: {}", agent.agentId()); log.info("【Agent调用前】Agent类型: {}", agent.type().getName()); log.info("【Agent调用前】Agent描述: {}", agent.description()); - log.info("【Agent调用前】Planner类型: {}", agent.plannerType().getName()); + log.info("【Agent调用前】Planner类型: {}", agent.plannerType()); log.info("【Agent调用前】输出类型: {}", agent.outputType()); log.info("【Agent调用前】输出Key: {}", agent.outputKey()); log.info("【Agent调用前】是否为异步: {}", agent.async()); diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java index 62b90728..ed906b0d 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java @@ -1,11 +1,13 @@ package org.ruoyi.service.chat.impl; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.StrUtil; import dev.langchain4j.agentic.AgenticServices; import dev.langchain4j.agentic.supervisor.SupervisorAgent; import dev.langchain4j.agentic.supervisor.SupervisorResponseStrategy; -import dev.langchain4j.community.model.dashscope.QwenChatModel; -import dev.langchain4j.data.message.*; +import dev.langchain4j.data.message.AiMessage; +import dev.langchain4j.data.message.ChatMessage; +import dev.langchain4j.data.message.UserMessage; import dev.langchain4j.mcp.McpToolProvider; import dev.langchain4j.mcp.client.DefaultMcpClient; import dev.langchain4j.mcp.client.McpClient; @@ -22,8 +24,6 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.ruoyi.agent.ChartGenerationAgent; import org.ruoyi.agent.SqlAgent; -import org.ruoyi.observability.MyAgentListener; -import org.ruoyi.observability.MyMcpClientListener; import org.ruoyi.agent.WebSearchAgent; import org.ruoyi.agent.tool.ExecuteSqlQueryTool; import org.ruoyi.agent.tool.QueryAllTablesTool; @@ -45,6 +45,9 @@ import org.ruoyi.domain.bo.vector.QueryVectorBo; import org.ruoyi.domain.vo.knowledge.KnowledgeInfoVo; import org.ruoyi.factory.ChatServiceFactory; import org.ruoyi.mcp.service.core.ToolProviderFactory; +import org.ruoyi.observability.MyAgentListener; +import org.ruoyi.observability.MyChatModelListener; +import org.ruoyi.observability.MyMcpClientListener; import org.ruoyi.service.chat.AbstractChatService; import org.ruoyi.service.chat.IChatMessageService; import org.ruoyi.service.chat.impl.memory.PersistentChatMemoryStore; @@ -196,16 +199,7 @@ public class ChatServiceFacade implements IChatService { // 处理思考模式 if (chatRequest.getEnableThinking()) { - String thinkingResult = handleThinkingMode(chatRequest, contextMessages, chatModelVo, userId, tokenValue); - // 思考模式产生了有效结果,通过 SSE 发送给前端后结束 - if (thinkingResult != null && !thinkingResult.isBlank()) { - SseMessageUtils.sendDone(userId); - SseMessageUtils.completeConnection(userId, tokenValue); - log.info("思考模式完成,结果已发送: {}", thinkingResult); - return emitter; - } - // 思考结果为空,继续走普通聊天流程 - log.warn("思考模式未产生有效结果,继续普通聊天"); + handleThinkingMode(chatRequest, contextMessages, chatModelVo, userId); } return null; @@ -214,15 +208,13 @@ public class ChatServiceFacade implements IChatService { /** * 处理思考模式 * - * @param chatRequest 聊天请求 - * @param contextMessages 上下文消息列表 - * @param chatModelVo 聊天模型配置 - * @param userId 用户ID - * @param tokenValue 会话令牌 - * @return 思考结果字符串,如果无结果则返回空字符串 + * @param chatRequest 聊天请求 + * @param contextMessages 上下文消息列表 + * @param chatModelVo 聊天模型配置 + * @param userId 用户ID */ - private String handleThinkingMode(ChatRequest chatRequest, List contextMessages, - ChatModelVo chatModelVo, Long userId, String tokenValue) { + private void handleThinkingMode(ChatRequest chatRequest, List contextMessages, + ChatModelVo chatModelVo, Long userId) { // 步骤1: 配置MCP传输层 - 连接到bing-cn-mcp服务器 McpTransport transport = new StdioMcpTransport.Builder() .command(List.of("C:\\Program Files\\nodejs\\npx.cmd", "-y", "bing-cn-mcp")) @@ -257,60 +249,40 @@ public class ChatServiceFacade implements IChatService { OpenAiChatModel plannerModel = OpenAiChatModel.builder() .baseUrl(chatModelVo.getApiHost()) .apiKey(chatModelVo.getApiKey()) + .listeners(List.of(new MyChatModelListener())) .modelName(chatModelVo.getModelName()) .build(); // 构建各Agent SqlAgent sqlAgent = AgenticServices.agentBuilder(SqlAgent.class) .chatModel(plannerModel) + .listener(new MyAgentListener()) .tools(new QueryAllTablesTool(), new QueryTableSchemaTool(), new ExecuteSqlQueryTool()) .build(); WebSearchAgent searchAgent = AgenticServices.agentBuilder(WebSearchAgent.class) .chatModel(plannerModel) + .listener(new MyAgentListener()) .toolProvider(toolProvider) .build(); ChartGenerationAgent chartGenerationAgent = AgenticServices.agentBuilder(ChartGenerationAgent.class) .chatModel(plannerModel) + .listener(new MyAgentListener()) .toolProvider(toolProvider1) .build(); // 构建监督者Agent SupervisorAgent supervisor = AgenticServices.supervisorBuilder() .chatModel(plannerModel) + .listener(new MyAgentListener()) .subAgents(sqlAgent, searchAgent, chartGenerationAgent) .responseStrategy(SupervisorResponseStrategy.LAST) - .listener(new MyAgentListener()) .build(); // 调用 supervisor String invoke = supervisor.invoke(chatRequest.getContent()); - log.info("【思考模式】supervisor.invoke() 返回: {}", invoke); - - // 如果有有效结果,通过 SSE 发送给前端并保存到数据库 - if (invoke != null && !invoke.isBlank()) { - try { - // 通过 SSE 实时发送思考结果 - SseMessageUtils.sendContent(userId, invoke); - log.info("【思考模式】结果已发送至SSE: {}", invoke); - - // 保存用户消息 - chatMessageService.saveChatMessage(userId, chatRequest.getSessionId(), - chatRequest.getContent(), RoleType.USER.getName(), chatRequest.getModel()); - - // 保存助手思考结果消息 - chatMessageService.saveChatMessage(userId, chatRequest.getSessionId(), - invoke, RoleType.ASSISTANT.getName(), chatRequest.getModel()); - - // 将思考结果添加到上下文,供后续流程使用(如果需要) - contextMessages.add(AiMessage.from(invoke)); - } catch (Exception e) { - log.error("【思考模式】发送结果或保存消息失败: {}", e.getMessage(), e); - } - } - - return invoke != null ? invoke : ""; + log.info("supervisor.invoke() 返回: {}", invoke); } /** @@ -348,6 +320,7 @@ public class ChatServiceFacade implements IChatService { // 7. 发起对话 StreamingChatModel streamingChatModel = chatService.buildStreamingChatModel(chatModelVo, chatRequest); + streamingChatModel.listeners().add(new MyChatModelListener()); streamingChatModel.chat(chatRequest.getContent(), combinedHandler); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/DeepseekServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/DeepseekServiceImpl.java index 15bf7556..7ecf4368 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/DeepseekServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/DeepseekServiceImpl.java @@ -9,9 +9,12 @@ import org.ruoyi.common.chat.domain.dto.request.ChatRequest; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; import org.ruoyi.enums.ChatModeType; import org.ruoyi.observability.ChatModelListenerProvider; +import org.ruoyi.observability.MyChatModelListener; import org.ruoyi.service.chat.AbstractChatService; import org.springframework.stereotype.Service; +import java.util.List; + /** * Deepseek服务调用 @@ -24,16 +27,14 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class DeepseekServiceImpl implements AbstractChatService { - private final ChatModelListenerProvider listenerProvider; - @Override public StreamingChatModel buildStreamingChatModel(ChatModelVo chatModelVo, ChatRequest chatRequest) { return OpenAiStreamingChatModel.builder() .baseUrl(chatModelVo.getApiHost()) .apiKey(chatModelVo.getApiKey()) .modelName(chatModelVo.getModelName()) + .listeners(List.of(new MyChatModelListener())) .returnThinking(chatRequest.getEnableThinking()) - .listeners(listenerProvider.getChatModelListeners()) .build(); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OllamaServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OllamaServiceImpl.java index 4da7073e..a9346538 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OllamaServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OllamaServiceImpl.java @@ -5,12 +5,15 @@ import dev.langchain4j.model.chat.StreamingChatModel; import dev.langchain4j.model.ollama.OllamaStreamingChatModel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.ruoyi.enums.ChatModeType; -import org.ruoyi.service.chat.AbstractChatService; -import org.springframework.stereotype.Service; import org.ruoyi.common.chat.domain.dto.request.ChatRequest; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; +import org.ruoyi.enums.ChatModeType; import org.ruoyi.observability.ChatModelListenerProvider; +import org.ruoyi.observability.MyChatModelListener; +import org.ruoyi.service.chat.AbstractChatService; +import org.springframework.stereotype.Service; + +import java.util.List; /** * OllamaAI服务调用 @@ -30,7 +33,7 @@ public class OllamaServiceImpl implements AbstractChatService { return OllamaStreamingChatModel.builder() .baseUrl(chatModelVo.getApiHost()) .modelName(chatModelVo.getModelName()) - .listeners(listenerProvider.getChatModelListeners()) + .listeners(List.of(new MyChatModelListener())) .build(); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OpenAIServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OpenAIServiceImpl.java index 76503b89..eb3ed3ae 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OpenAIServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/OpenAIServiceImpl.java @@ -9,9 +9,12 @@ import org.ruoyi.common.chat.domain.dto.request.ChatRequest; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; import org.ruoyi.enums.ChatModeType; import org.ruoyi.observability.ChatModelListenerProvider; +import org.ruoyi.observability.MyChatModelListener; import org.ruoyi.service.chat.AbstractChatService; import org.springframework.stereotype.Service; +import java.util.List; + /** * OPENAI服务调用 @@ -24,16 +27,14 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class OpenAIServiceImpl implements AbstractChatService { - private final ChatModelListenerProvider listenerProvider; - @Override public StreamingChatModel buildStreamingChatModel(ChatModelVo chatModelVo,ChatRequest chatRequest) { return OpenAiStreamingChatModel.builder() .baseUrl(chatModelVo.getApiHost()) .apiKey(chatModelVo.getApiKey()) .modelName(chatModelVo.getModelName()) + .listeners(List.of(new MyChatModelListener())) .returnThinking(chatRequest.getEnableThinking()) - .listeners(listenerProvider.getChatModelListeners()) .build(); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/PPIOServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/PPIOServiceImpl.java index fd742abb..b07c21d1 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/PPIOServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/PPIOServiceImpl.java @@ -8,10 +8,12 @@ import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.chat.domain.dto.request.ChatRequest; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; import org.ruoyi.enums.ChatModeType; -import org.ruoyi.observability.ChatModelListenerProvider; +import org.ruoyi.observability.MyChatModelListener; import org.ruoyi.service.chat.AbstractChatService; import org.springframework.stereotype.Service; +import java.util.List; + /** * PPIO服务调用 * @@ -23,16 +25,14 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class PPIOServiceImpl implements AbstractChatService { - private final ChatModelListenerProvider listenerProvider; - @Override public StreamingChatModel buildStreamingChatModel(ChatModelVo chatModelVo, ChatRequest chatRequest) { return OpenAiStreamingChatModel.builder() .baseUrl(chatModelVo.getApiHost()) .apiKey(chatModelVo.getApiKey()) .modelName(chatModelVo.getModelName()) + .listeners(List.of(new MyChatModelListener())) .returnThinking(chatRequest.getEnableThinking()) - .listeners(listenerProvider.getChatModelListeners()) .build(); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/QianWenChatServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/QianWenChatServiceImpl.java index 2f34899e..73289939 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/QianWenChatServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/QianWenChatServiceImpl.java @@ -9,9 +9,12 @@ import org.ruoyi.common.chat.domain.dto.request.ChatRequest; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; import org.ruoyi.enums.ChatModeType; import org.ruoyi.observability.ChatModelListenerProvider; +import org.ruoyi.observability.MyChatModelListener; import org.ruoyi.service.chat.AbstractChatService; import org.springframework.stereotype.Service; +import java.util.List; + /** * qianWenAI服务调用 @@ -31,7 +34,7 @@ public class QianWenChatServiceImpl implements AbstractChatService { return QwenStreamingChatModel.builder() .apiKey(chatModelVo.getApiKey()) .modelName(chatModelVo.getModelName()) - .listeners(listenerProvider.getChatModelListeners()) + .listeners(List.of(new MyChatModelListener())) .build(); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/ZhiPuChatServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/ZhiPuChatServiceImpl.java index 0cfebbfd..9e1b504d 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/ZhiPuChatServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/provider/ZhiPuChatServiceImpl.java @@ -8,10 +8,12 @@ import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.chat.domain.dto.request.ChatRequest; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; import org.ruoyi.enums.ChatModeType; -import org.ruoyi.observability.ChatModelListenerProvider; +import org.ruoyi.observability.MyChatModelListener; import org.ruoyi.service.chat.AbstractChatService; import org.springframework.stereotype.Service; +import java.util.List; + /** * 智谱AI服务调用 @@ -24,14 +26,12 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class ZhiPuChatServiceImpl implements AbstractChatService { - private final ChatModelListenerProvider listenerProvider; - @Override public StreamingChatModel buildStreamingChatModel(ChatModelVo chatModelVo, ChatRequest chatRequest) { return ZhipuAiStreamingChatModel.builder() .apiKey(chatModelVo.getApiKey()) .model(chatModelVo.getModelName()) - .listeners(listenerProvider.getChatModelListeners()) + .listeners(List.of(new MyChatModelListener())) .build(); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/AliBaiLianBaseEmbedProvider.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/AliBaiLianBaseEmbedProvider.java index 936e0993..01709e45 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/AliBaiLianBaseEmbedProvider.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/AliBaiLianBaseEmbedProvider.java @@ -5,13 +5,10 @@ import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.EmbeddingModel; -import dev.langchain4j.model.embedding.listener.EmbeddingModelListener; import dev.langchain4j.model.output.Response; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; -import org.ruoyi.observability.EmbeddingModelListenerProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import org.ruoyi.enums.ModalityType; +import org.springframework.stereotype.Component; import java.util.List; import java.util.Set; @@ -26,9 +23,6 @@ public class AliBaiLianBaseEmbedProvider extends OpenAiEmbeddingProvider { private ChatModelVo chatModelVo; - @Autowired - private EmbeddingModelListenerProvider embeddingModelListenerProvider; - @Override public void configure(ChatModelVo config) { this.chatModelVo = config; @@ -41,17 +35,12 @@ public class AliBaiLianBaseEmbedProvider extends OpenAiEmbeddingProvider { @Override public Response> embedAll(List textSegments) { - List listeners = embeddingModelListenerProvider.getEmbeddingModelListeners(); EmbeddingModel model = QwenEmbeddingModel.builder() .apiKey(chatModelVo.getApiKey()) .modelName(chatModelVo.getModelName()) .dimension(chatModelVo.getModelDimension()) .build(); - if (!listeners.isEmpty()) { - model = model.addListeners(listeners); - } - return model.embedAll(textSegments); } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OllamaEmbeddingProvider.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OllamaEmbeddingProvider.java index 79202425..905b9e73 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OllamaEmbeddingProvider.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OllamaEmbeddingProvider.java @@ -3,15 +3,11 @@ package org.ruoyi.service.embed.impl; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.EmbeddingModel; -import dev.langchain4j.model.embedding.listener.EmbeddingModelListener; import dev.langchain4j.model.ollama.OllamaEmbeddingModel; import dev.langchain4j.model.output.Response; -import jakarta.annotation.Resource; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; import org.ruoyi.enums.ModalityType; -import org.ruoyi.observability.EmbeddingModelListenerProvider; import org.ruoyi.service.embed.BaseEmbedModelService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; @@ -26,9 +22,6 @@ import java.util.Set; public class OllamaEmbeddingProvider implements BaseEmbedModelService { private ChatModelVo chatModelVo; - @Resource - private EmbeddingModelListenerProvider embeddingModelListenerProvider; - @Override public void configure(ChatModelVo config) { this.chatModelVo = config; @@ -42,16 +35,11 @@ public class OllamaEmbeddingProvider implements BaseEmbedModelService { // ollama不能设置embedding维度,使用milvus时请注意!!创建向量表时需要先设定维度大小 @Override public Response> embedAll(List textSegments) { - List listeners = embeddingModelListenerProvider.getEmbeddingModelListeners(); EmbeddingModel model = OllamaEmbeddingModel.builder() .baseUrl(chatModelVo.getApiHost()) .modelName(chatModelVo.getModelName()) .build(); - if (!listeners.isEmpty()) { - model = model.addListeners(listeners); - } - return model.embedAll(textSegments); } } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OpenAiEmbeddingProvider.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OpenAiEmbeddingProvider.java index 039342ee..6c583f6f 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OpenAiEmbeddingProvider.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/embed/impl/OpenAiEmbeddingProvider.java @@ -3,14 +3,11 @@ package org.ruoyi.service.embed.impl; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.EmbeddingModel; -import dev.langchain4j.model.embedding.listener.EmbeddingModelListener; import dev.langchain4j.model.openai.OpenAiEmbeddingModel; import dev.langchain4j.model.output.Response; import org.ruoyi.common.chat.domain.vo.chat.ChatModelVo; import org.ruoyi.enums.ModalityType; -import org.ruoyi.observability.EmbeddingModelListenerProvider; import org.ruoyi.service.embed.BaseEmbedModelService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; @@ -25,9 +22,6 @@ import java.util.Set; public class OpenAiEmbeddingProvider implements BaseEmbedModelService { protected ChatModelVo chatModelVo; - @Autowired - private EmbeddingModelListenerProvider embeddingModelListenerProvider; - @Override public void configure(ChatModelVo config) { this.chatModelVo = config; @@ -40,7 +34,6 @@ public class OpenAiEmbeddingProvider implements BaseEmbedModelService { @Override public Response> embedAll(List textSegments) { - List listeners = embeddingModelListenerProvider.getEmbeddingModelListeners(); EmbeddingModel model = OpenAiEmbeddingModel.builder() .baseUrl(chatModelVo.getApiHost()) .apiKey(chatModelVo.getApiKey()) @@ -48,10 +41,6 @@ public class OpenAiEmbeddingProvider implements BaseEmbedModelService { .dimensions(chatModelVo.getModelDimension()) .build(); - if (!listeners.isEmpty()) { - model = model.addListeners(listeners); - } - return model.embedAll(textSegments); } }