From 974aaaf632c0bd42d4521114278653f128ba972a Mon Sep 17 00:00:00 2001 From: ire <931903008@qq.com> Date: Tue, 11 Feb 2025 10:53:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/conversation/vo/ChatReqVO.java | 2 + .../backend/config/LLMBackendProperties.java | 2 + .../conversation/ConversationServiceImpl.java | 51 ++++++++++++------- .../http/vo/KnowledgeRagEmbedQueryVO.java | 30 +++++++++++ .../modelservice/ModelServiceServiceImpl.java | 4 +- .../src/main/resources/application-dev.yaml | 4 +- .../src/main/resources/application-local.yaml | 2 + .../src/main/resources/application-prod.yaml | 2 + 8 files changed, 76 insertions(+), 21 deletions(-) create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/KnowledgeRagEmbedQueryVO.java diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/conversation/vo/ChatReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/conversation/vo/ChatReqVO.java index e8e439274..7818fdbf7 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/conversation/vo/ChatReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/conversation/vo/ChatReqVO.java @@ -25,4 +25,6 @@ public class ChatReqVO { private String uuid; @Schema(description = "系统提示语") private String systemPrompt; + @Schema(description = "知识库id") + private Long knowledgeId; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java index ea1129783..34ea69565 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java @@ -108,5 +108,7 @@ public class LLMBackendProperties { */ private String embed; + private String embedQuery; + private String checkFileList; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java index a8a35e153..e7b3a9925 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/conversation/ConversationServiceImpl.java @@ -1,47 +1,44 @@ package cn.iocoder.yudao.module.llm.service.conversation; import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONObject; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationRespVO; import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationSaveReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.ChatReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.ChatRespVO; +import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.ConversationPageReqVO; +import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.ConversationSaveReqVO; import cn.iocoder.yudao.module.llm.controller.admin.datarefluxdata.vo.DataRefluxDataSaveReqVO; -import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.PromptTemplatesRespVO; import cn.iocoder.yudao.module.llm.dal.dataobject.basemodel.BaseModelDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.conversation.ConversationDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.knowledgedocuments.KnowledgeDocumentsDO; import cn.iocoder.yudao.module.llm.dal.dataobject.modelservice.ModelServiceDO; +import cn.iocoder.yudao.module.llm.dal.mysql.conversation.ConversationMapper; +import cn.iocoder.yudao.module.llm.dal.mysql.knowledgedocuments.KnowledgeDocumentsMapper; import cn.iocoder.yudao.module.llm.dal.mysql.modelservice.ModelServiceMapper; +import cn.iocoder.yudao.module.llm.framework.backend.config.LLMBackendProperties; import cn.iocoder.yudao.module.llm.service.application.ApplicationService; import cn.iocoder.yudao.module.llm.service.basemodel.BaseModelService; import cn.iocoder.yudao.module.llm.service.datarefluxdata.DataRefluxDataService; import cn.iocoder.yudao.module.llm.service.http.ModelService; -import cn.iocoder.yudao.module.llm.service.http.vo.ModelCompletionsReqVO; -import cn.iocoder.yudao.module.llm.service.http.vo.ModelCompletionsRespVO; -import cn.iocoder.yudao.module.llm.service.http.vo.TextToImageReqVo; -import cn.iocoder.yudao.module.llm.service.http.vo.TextToImageRespVo; +import cn.iocoder.yudao.module.llm.service.http.vo.*; import cn.iocoder.yudao.module.llm.service.prompttemplates.PromptTemplatesService; import com.alibaba.excel.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; -import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.*; -import java.util.concurrent.TimeUnit; - -import cn.iocoder.yudao.module.llm.controller.admin.conversation.vo.*; -import cn.iocoder.yudao.module.llm.dal.dataobject.conversation.ConversationDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.llm.dal.mysql.conversation.ConversationMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.llm.service.http.ModelService.DEFAULT_MODEL_ID; -import static cn.iocoder.yudao.module.llm.service.http.ModelService.PRIVATE_MODEL_ID; /** * 大模型对话记录 Service 实现类 @@ -68,6 +65,10 @@ public class ConversationServiceImpl implements ConversationService { private ApplicationService applicationService; @Resource private PromptTemplatesService promptTemplatesService; + @Resource + private KnowledgeDocumentsMapper knowledgeDocumentsMapper; + @Resource + private LLMBackendProperties llmBackendProperties; // 聊天会话历史记录缓存Key private final static String CHAT_HIStORY_REDIS_KEY = "llm:chat:history"; @@ -203,6 +204,18 @@ public class ConversationServiceImpl implements ConversationService { messages.add(message); //如果知识库id不为null,先去调用知识库 + if(chatReqVO.getKnowledgeId() != null && chatReqVO.getKnowledgeId() != 0){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(KnowledgeDocumentsDO::getKnowledgeBaseId,chatReqVO.getKnowledgeId()); + List fileList = knowledgeDocumentsMapper.selectList(queryWrapper); + for (KnowledgeDocumentsDO knowledgeDocumentsDO : fileList) { + Long id = knowledgeDocumentsDO.getId(); + KnowledgeRagEmbedQueryVO knowledgeRagEmbedQueryVO = new KnowledgeRagEmbedQueryVO(); + knowledgeRagEmbedQueryVO.setFile_id(id.toString()); + knowledgeRagEmbedQueryVO.setQuery(chatReqVO.getPrompt()); + String result = HttpUtils.post(llmBackendProperties.getEmbedQuery(), null, JSON.toJSONString(knowledgeRagEmbedQueryVO)); + } + } ModelCompletionsReqVO modelCompletionsReqVO = new ModelCompletionsReqVO(); modelCompletionsReqVO.setMessages(messages); diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/KnowledgeRagEmbedQueryVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/KnowledgeRagEmbedQueryVO.java new file mode 100644 index 000000000..cef4aa625 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/KnowledgeRagEmbedQueryVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +/** + * @Description 知识库向量查询 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ToString(callSuper = true) +public class KnowledgeRagEmbedQueryVO { + /** + * 文件id + */ + private String file_id; + + /** + * 文件名 + */ + private String query; + + /** + * 文件流 + */ + private Integer k = 1; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java index 632e0f6af..ad146c9b4 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/modelservice/ModelServiceServiceImpl.java @@ -250,7 +250,9 @@ public class ModelServiceServiceImpl implements ModelServiceService { @Override public List getModelServiceList() { - return modelServiceMapper.selectList(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ModelServiceDO::getStatus,1); + return modelServiceMapper.selectList(queryWrapper); } @Override diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index e117b7ae2..545bdb4e8 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -283,9 +283,11 @@ llm: text_to_image: http://36.103.199.104:5123/generate-image check_file_list: http://36.103.199.104:5123/llm/finetuning/checkpoints?model_name= - # 知识库向量嵌入 embed: http://36.103.199.104:8123/embed + # 知识库查询 + embed_query: http://36.103.199.104:8123/query + --- #################### iot相关配置 TODO 芋艿:再瞅瞅 #################### iot: emq: diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 1d335df66..97e93708f 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -325,6 +325,8 @@ llm: text_to_image: http://36.103.199.104:5123/generate-image # 知识库向量嵌入 embed: http://36.103.199.104:8123/embed + # 知识库查询 + embed_query: http://36.103.199.104:8123/query check_file_list: http://36.103.199.104:5123/llm/finetuning/checkpoints?model_name= diff --git a/yudao-server/src/main/resources/application-prod.yaml b/yudao-server/src/main/resources/application-prod.yaml index 250b88e8e..bb2f1ce8d 100644 --- a/yudao-server/src/main/resources/application-prod.yaml +++ b/yudao-server/src/main/resources/application-prod.yaml @@ -325,6 +325,8 @@ llm: text_to_image: http://36.133.1.230:5123/generate-image # 知识库向量嵌入 embed: http://36.103.199.104:8123/embed + # 知识库查询 + embed_query: http://36.103.199.104:8123/query check_file_list: http://36.103.199.104:5123/llm/finetuning/checkpoints?model_name=