mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-13 11:53:48 +00:00
Merge pull request #247 from MuSan-Li/feature_20251207_add_ali_emb
feat: 添加阿里向量模型
This commit is contained in:
@@ -84,7 +84,7 @@ public class ChatModel extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 模型供应商
|
* 模型供应商
|
||||||
*/
|
*/
|
||||||
private String ProviderName;
|
private String providerName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class ChatModelBo extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 模型供应商
|
* 模型供应商
|
||||||
*/
|
*/
|
||||||
private String ProviderName;
|
private String providerName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public class ChatModelVo implements Serializable {
|
|||||||
* 模型供应商
|
* 模型供应商
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "模型供应商")
|
@ExcelProperty(value = "模型供应商")
|
||||||
private String ProviderName;
|
private String providerName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ import java.io.BufferedReader;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@@ -19,17 +21,14 @@ public class TextFileLoader implements ResourceLoader {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getContent(InputStream inputStream) {
|
public String getContent(InputStream inputStream) {
|
||||||
StringBuffer stringBuffer = new StringBuffer();
|
String stringBuffer = "";
|
||||||
try (InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
|
try (InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
|
||||||
BufferedReader bufferedReader = new BufferedReader(reader)) {
|
BufferedReader bufferedReader = new BufferedReader(reader)) {
|
||||||
String line;
|
stringBuffer = bufferedReader.lines().collect(Collectors.joining());
|
||||||
while ((line = bufferedReader.readLine()) != null) {
|
|
||||||
stringBuffer.append(line).append("\n");
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return stringBuffer.toString();
|
return stringBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,8 +1,17 @@
|
|||||||
package org.ruoyi.embedding.impl;
|
package org.ruoyi.embedding.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel;
|
||||||
|
import dev.langchain4j.data.embedding.Embedding;
|
||||||
|
import dev.langchain4j.data.segment.TextSegment;
|
||||||
|
import dev.langchain4j.model.output.Response;
|
||||||
|
import org.ruoyi.domain.vo.ChatModelVo;
|
||||||
|
import org.ruoyi.embedding.model.ModalityType;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: Robust_H
|
* @Author: Robust_H
|
||||||
* @Date: 2025-09-30-下午3:00
|
* @Date: 2025-09-30-下午3:00
|
||||||
@@ -11,4 +20,31 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component("alibailian")
|
@Component("alibailian")
|
||||||
public class AliBaiLianBaseEmbedProvider extends OpenAiEmbeddingProvider {
|
public class AliBaiLianBaseEmbedProvider extends OpenAiEmbeddingProvider {
|
||||||
|
|
||||||
|
|
||||||
|
private ChatModelVo chatModelVo;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void configure(ChatModelVo config) {
|
||||||
|
this.chatModelVo = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<ModalityType> getSupportedModalities() {
|
||||||
|
return Set.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Response<List<Embedding>> embedAll(List<TextSegment> textSegments) {
|
||||||
|
return QwenEmbeddingModel.builder()
|
||||||
|
// todo 测试 后面要改
|
||||||
|
// .baseUrl(chatModelVo.getApiHost())
|
||||||
|
.apiKey(chatModelVo.getApiKey())
|
||||||
|
.modelName(chatModelVo.getModelName())
|
||||||
|
|
||||||
|
.dimension(1024)
|
||||||
|
// .dimension(chatModelVo.getDimension())
|
||||||
|
.build()
|
||||||
|
.embedAll(textSegments);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService {
|
|||||||
check(knowledgeInfo);
|
check(knowledgeInfo);
|
||||||
map.put("kid", knowledgeInfo.getKid());
|
map.put("kid", knowledgeInfo.getKid());
|
||||||
// 删除向量数据
|
// 删除向量数据
|
||||||
vectorStoreService.removeById(String.valueOf(knowledgeInfo.getId()), knowledgeInfo.getVectorModelName());
|
vectorStoreService.removeById(knowledgeInfo.getKid(), knowledgeInfo.getVectorModelName());
|
||||||
// 删除附件和知识片段
|
// 删除附件和知识片段
|
||||||
fragmentMapper.deleteByMap(map);
|
fragmentMapper.deleteByMap(map);
|
||||||
attachMapper.deleteByMap(map);
|
attachMapper.deleteByMap(map);
|
||||||
@@ -337,6 +337,10 @@ public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService {
|
|||||||
*/
|
*/
|
||||||
public void check(KnowledgeInfo knowledgeInfo) {
|
public void check(KnowledgeInfo knowledgeInfo) {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
// 超级管理员可以删除所有知识库
|
||||||
|
if (Long.valueOf(1).equals(loginUser.getUserId())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!knowledgeInfo.getUid().equals(loginUser.getUserId())) {
|
if (!knowledgeInfo.getUid().equals(loginUser.getUserId())) {
|
||||||
throw new SecurityException("权限不足");
|
throw new SecurityException("权限不足");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user