ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java
@@ -17,10 +17,7 @@ void createSchema(String kid,String modelName); void removeByKid(String kid,String modelName); void removeById(String id,String modelName); void removeByDocId(String kid,String docId,String modelName); void removeByKidAndFid(String kid, String fid,String modelName); } ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java
@@ -9,8 +9,6 @@ import dev.langchain4j.store.embedding.EmbeddingMatch; import dev.langchain4j.store.embedding.EmbeddingSearchRequest; import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.filter.Filter; import dev.langchain4j.store.embedding.filter.comparison.IsEqualTo; import dev.langchain4j.store.embedding.weaviate.WeaviateEmbeddingStore; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -22,9 +20,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 向量库管理 @@ -40,6 +36,7 @@ private EmbeddingStore<TextSegment> embeddingStore; @Override public void createSchema(String kid, String modelName) { String protocol = configService.getConfigValue("weaviate", "protocol"); @@ -48,7 +45,7 @@ embeddingStore = WeaviateEmbeddingStore.builder() .scheme(protocol) .host(host) .objectClass(className + kid) .objectClass(className+kid) .scheme(protocol) .avoidDups(true) .consistencyLevel("ALL") @@ -61,14 +58,9 @@ EmbeddingModel embeddingModel = getEmbeddingModel(storeEmbeddingBo.getEmbeddingModelName(), storeEmbeddingBo.getApiKey(), storeEmbeddingBo.getBaseUrl()); List<String> chunkList = storeEmbeddingBo.getChunkList(); for (int i = 0; i < chunkList.size(); i++) { Map<String, Object> dataSchema = new HashMap<>(); dataSchema.put("kid", storeEmbeddingBo.getKid()); dataSchema.put("docId", storeEmbeddingBo.getDocId()); dataSchema.put("fid", storeEmbeddingBo.getFids().get(i)); Embedding embedding = embeddingModel.embed(chunkList.get(i)).content(); TextSegment segment = TextSegment.from(chunkList.get(i)); segment.metadata().putAll(dataSchema); for (String s : chunkList) { Embedding embedding = embeddingModel.embed(s).content(); TextSegment segment = TextSegment.from(s); embeddingStore.add(embedding, segment); } } @@ -78,13 +70,10 @@ createSchema(queryVectorBo.getKid(), queryVectorBo.getVectorModelName()); EmbeddingModel embeddingModel = getEmbeddingModel(queryVectorBo.getEmbeddingModelName(), queryVectorBo.getApiKey(), queryVectorBo.getBaseUrl()); // Filter simpleFilter = new IsEqualTo("kid", queryVectorBo.getKid()); Embedding queryEmbedding = embeddingModel.embed(queryVectorBo.getQuery()).content(); EmbeddingSearchRequest embeddingSearchRequest = EmbeddingSearchRequest.builder() .queryEmbedding(queryEmbedding) .maxResults(queryVectorBo.getMaxResults()) // 添加过滤条件 // .filter(simpleFilter) .build(); List<EmbeddingMatch<TextSegment>> matches = embeddingStore.search(embeddingSearchRequest).matches(); List<String> results = new ArrayList<>(); @@ -94,29 +83,10 @@ @Override public void removeByKid(String kid, String modelName) { createSchema(kid, modelName); public void removeById(String id, String modelName) { createSchema(id, modelName); // 根据条件删除向量数据 Filter simpleFilter = new IsEqualTo("kid", kid); embeddingStore.removeAll(simpleFilter); } @Override public void removeByDocId(String kid, String docId, String modelName) { createSchema(kid, modelName); // 根据条件删除向量数据 Filter simpleFilterByDocId = new IsEqualTo("docId", docId); embeddingStore.removeAll(simpleFilterByDocId); } @Override public void removeByKidAndFid(String kid, String fid, String modelName) { createSchema(kid, modelName); // 根据条件删除向量数据 Filter simpleFilterByKid = new IsEqualTo("kid", kid); Filter simpleFilterFid = new IsEqualTo("fid", fid); Filter simpleFilterByAnd = Filter.and(simpleFilterFid, simpleFilterByKid); embeddingStore.removeAll(simpleFilterByAnd); embeddingStore.remove(id); } /** ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/ChatMessageController.java
@@ -40,7 +40,6 @@ /** * 查询聊天消息列表 */ @SaCheckPermission("system:message:list") @GetMapping("/list") public TableDataInfo<ChatMessageVo> list(ChatMessageBo bo, PageQuery pageQuery) { return chatMessageService.queryPageList(bo, pageQuery); @@ -49,7 +48,6 @@ /** * 导出聊天消息列表 */ @SaCheckPermission("system:message:export") @Log(title = "聊天消息", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(ChatMessageBo bo, HttpServletResponse response) { @@ -62,7 +60,6 @@ * * @param id 主键 */ @SaCheckPermission("system:message:query") @GetMapping("/{id}") public R<ChatMessageVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { @@ -72,7 +69,6 @@ /** * 新增聊天消息 */ @SaCheckPermission("system:message:add") @Log(title = "聊天消息", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() @@ -84,7 +80,6 @@ /** * 修改聊天消息 */ @SaCheckPermission("system:message:edit") @Log(title = "聊天消息", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() @@ -97,7 +92,6 @@ * * @param ids 主键串 */ @SaCheckPermission("system:message:remove") @Log(title = "聊天消息", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R<Void> remove(@NotEmpty(message = "主键不能为空") ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/ChatSessionController.java
@@ -41,7 +41,6 @@ /** * 查询会话管理列表 */ @SaCheckPermission("system:session:list") @GetMapping("/list") public TableDataInfo<ChatSessionVo> list(ChatSessionBo bo, PageQuery pageQuery) { if(!LoginHelper.isLogin()){ @@ -56,7 +55,6 @@ /** * 导出会话管理列表 */ @SaCheckPermission("system:session:export") @Log(title = "会话管理", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(ChatSessionBo bo, HttpServletResponse response) { @@ -69,7 +67,6 @@ * * @param id 主键 */ @SaCheckPermission("system:session:query") @GetMapping("/{id}") public R<ChatSessionVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { @@ -79,7 +76,6 @@ /** * 新增会话管理 */ @SaCheckPermission("system:session:add") @Log(title = "会话管理", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() @@ -92,7 +88,6 @@ /** * 修改会话管理 */ @SaCheckPermission("system:session:edit") @Log(title = "会话管理", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() @@ -105,7 +100,6 @@ * * @param ids 主键串 */ @SaCheckPermission("system:session:remove") @Log(title = "会话管理", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R<Void> remove(@NotEmpty(message = "主键不能为空") ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java
@@ -177,13 +177,11 @@ @Transactional(rollbackFor = Exception.class) public void removeKnowledge(String id) { Map<String,Object> map = new HashMap<>(); map.put("kid",id); List<KnowledgeInfoVo> knowledgeInfoList = baseMapper.selectVoByMap(map); check(knowledgeInfoList); // 删除向量库信息 // knowledgeInfoList.forEach(knowledgeInfoVo -> { // vectorStoreService.removeByKid(String.valueOf(knowledgeInfoVo.getId()),knowledgeInfoVo.getVectorModelName()); // }); KnowledgeInfo knowledgeInfo = baseMapper.selectById(id); check(knowledgeInfo); map.put("kid",knowledgeInfo.getKid()); // 删除向量数据 vectorStoreService.removeById(String.valueOf(knowledgeInfo.getId()),knowledgeInfo.getVectorModelName()); // 删除附件和知识片段 fragmentMapper.deleteByMap(map); attachMapper.deleteByMap(map); @@ -256,14 +254,12 @@ /** * 检查用户是否有删除知识库权限 * * @param knowledgeInfoList 知识库列表 * @param knowledgeInfo 知识库 */ public void check(List<KnowledgeInfoVo> knowledgeInfoList) { public void check( KnowledgeInfo knowledgeInfo) { LoginUser loginUser = LoginHelper.getLoginUser(); for (KnowledgeInfoVo knowledgeInfoVo : knowledgeInfoList) { if (!knowledgeInfoVo.getUid().equals(loginUser.getUserId())) { throw new SecurityException("权限不足"); } if (!knowledgeInfo.getUid().equals(loginUser.getUserId())) { throw new SecurityException("权限不足"); } }