1.5.2后端

完善AI部分
master
xs 4 months ago
parent 6e269354ac
commit 8f04077a44

@ -39,7 +39,7 @@ public class AiBaseModel {
/**
* ai_model_type
*/
private Long modelTypeCode;
private String modelTypeCode;
/**
* : DeepSeek-V3, Qwen1.5-72B, ChatGLM3

@ -42,7 +42,7 @@ public class AiBaseModelBo {
* ai_model_type
*/
@NotNull(message = "模型类型编码不能为空", groups = { AddGroup.class, EditGroup.class })
private Long modelTypeCode;
private String modelTypeCode;
/**
* : DeepSeek-V3, Qwen1.5-72B, ChatGLM3

@ -53,7 +53,7 @@ public class AiBaseModelVo implements Serializable {
* ai_model_type
*/
@ExcelProperty(value = "模型类型编码")
private Long modelTypeCode;
private String modelTypeCode;
/**
* : DeepSeek-V3, Qwen1.5-72B, ChatGLM3

@ -1,21 +1,27 @@
package org.dromara.ai.process.enums;
public enum AIProviderEnum {
DEEPSEEK("DeepSeek"),
TONGYI_QIANWEN("TongYi-QianWen"),//阿里通义千问
TENCENT_LKE("Tencent-LKE"),//腾讯云智能体开发平台
WENXIN_YIYAN("WenXin-YiYan");//百度文心一言
DEEPSEEK("DeepSeek", 1L),
TENCENT_LKE("Tencent-LKE", 2L),//腾讯云智能体开发平台
TONGYI_QIANWEN("TongYi-QianWen", 3L);//阿里通义千问
private final String name;
AIProviderEnum(String name) {
private final Long code;//等于ai_base_model表的base_model_id
AIProviderEnum(String name, Long code) {
this.name = name;
this.code = code;
}
public String getName() {
return name;
}
public Long getCode() {
return code;
}
/**
*
*/
@ -28,4 +34,16 @@ public enum AIProviderEnum {
}
throw new IllegalArgumentException("未知的大模型提供商: " + text);
}
/**
* code(baseModeId)
*/
public static AIProviderEnum fromCode(Long code) {
for (AIProviderEnum provider : AIProviderEnum.values()) {
if (provider.getCode().equals(code)) {
return provider;
}
}
throw new IllegalArgumentException("未知的大模型提供商: " + code);
}
}

@ -38,4 +38,12 @@ public class AIProviderProcessorFactory {
AIProviderEnum provider = AIProviderEnum.fromString(providerName);
return getProcessor(provider);
}
/**
* base_model_idAPI
*/
public IUnifiedAIProviderProcessor getProcessor(Long baseModelId) {
AIProviderEnum provider = AIProviderEnum.fromCode(baseModelId);
return getProcessor(provider);
}
}

@ -259,8 +259,8 @@ public class DeepSeekProcessor extends BaseAIProviderProcessor {
AiChatMessageDetail aiChatMessageDetail = new AiChatMessageDetail();
aiChatMessageDetail.setChatMessageId(aiChatMessage.getChatMessageId());
aiChatMessageDetail.setSessionId(request.getSessionId());
aiChatMessageDetail.setQuestionContent(objectMapper.writeValueAsString(messages.get(messages.size() - 1).getContent()));
aiChatMessageDetail.setAnswerContent(fullResponse);
aiChatMessageDetail.setQuestionContent(objectMapper.writeValueAsString(request.getQuestionContent()));
aiChatMessageDetail.setAnswerContent(objectMapper.writeValueAsString(fullResponse));
// aiChatMessageDetail.setPromptToken(1L);
// aiChatMessageDetail.setCompletionToken(1L);
// aiChatMessageDetail.setTotalToken(1L);

@ -1,11 +1,10 @@
package org.dromara.ai.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.dromara.ai.service.IAiChatMessageDetailService;
import org.dromara.ai.service.IAiChatMessageService;
import org.dromara.ai.service.IAiModelService;
import org.dromara.ai.domain.AiModel;
import org.dromara.ai.mapper.AiModelMapper;
import org.dromara.ai.test.vectorization.process.IEmbeddingProcessor;
import org.dromara.ai.mapper.DatabaseMetaMapper;
import org.dromara.ai.mapper.SQLServerDatabaseMetaMapper;
import org.dromara.ai.process.dto.AIMessage;
import org.dromara.ai.process.dto.AIRequest;
import org.dromara.ai.process.dto.AIResponse;
@ -33,7 +32,10 @@ import java.util.*;
public class AIAssistantServiceImpl implements IAIAssistantService {
@Autowired
private DatabaseMetaMapper databaseMetaMapper;
private SQLServerDatabaseMetaMapper databaseMetaMapper;
@Autowired
private AiModelMapper aiModelMapper;
@Autowired
private Map<String, IUnifiedAIProviderProcessor> aiProviderProcessorMap;
@ -70,7 +72,8 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
}
final String messageTopic = messages.get(messages.size() - 1).getContent();
finalAiRequest.setMessageTopic(messageTopic);
finalAiRequest.setMessageTopic(messageTopic);//暂时跟提问的内容相同,后续可以总结
finalAiRequest.setQuestionContent(messageTopic);
// 尝试获取处理器,如果找不到则抛出异常
return Flux.defer(() -> {
@ -96,6 +99,12 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
}
/**
*
*
* @param aiRequest
* @return
*/
private AIRequest knowledgeChatInfo(AIRequest aiRequest) {
try {
List<AIMessage> messages = aiRequest.getMessages();
@ -110,13 +119,22 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
aiRequest.setText(messageContent);
StringBuilder sb = new StringBuilder(messageContent);
String embeddingProcessor = "Tencent-LKE";
aiRequest.setApiKey("AKIDyvlTyJTRDmCTXs56uUvDJNK6h9SZVDlB");
aiRequest.setApiSecret("IOXloeHrCLH4iw30lKjxynPq7rPlwugF");
IUnifiedAIProviderProcessor tencentLkeProcessor = aiProviderProcessorFactory.getProcessor(embeddingProcessor);
Long embeddingModelId = aiRequest.getEmbeddingModelId();
AiModel aiModel = aiModelMapper.selectById(embeddingModelId);
if (aiModel == null) {
throw new RuntimeException("未找到对应的模型信息");
}
// String embeddingProcessor = "Tencent-LKE";
//todo:后续从redis中获取
aiRequest.setApiKey(EncryptUtils.decryptByBase64(aiModel.getApiKey()));
aiRequest.setApiSecret(EncryptUtils.decryptByBase64(aiModel.getApiSecret()));
IUnifiedAIProviderProcessor tencentLkeProcessor = aiProviderProcessorFactory.getProcessor(aiModel.getBaseModelId());
List<Double> queryEmbedding = tencentLkeProcessor.getEmbedding(aiRequest);
int topK = 5;
int topK = aiRequest.getRetrieveLimit() == null || aiRequest.getRetrieveLimit() <= 0 ?
5 : aiRequest.getRetrieveLimit();//retrieveLimit检索限制
List<String> searchResultList = vectorDBService.
search(queryEmbedding, aiRequest.getKnowledgeBaseId(), topK);
@ -170,26 +188,6 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
}
}
public String aiFillForm() {
String aiClient = "deepSeek";
IUnifiedAIProviderProcessor service = aiProviderProcessorMap.get(aiClient);
if (service == null) {
throw new IllegalArgumentException("Unsupported payment type");
}
return "";
}
public String uploadContent() {
String embeddingProcessor = "tencentlke";
IEmbeddingProcessor service = embeddingProcessorMap.get(embeddingProcessor);
return "";
}
@Override
public boolean testAIModel(String provider, AIRequest aiRequest) {
IUnifiedAIProviderProcessor processor = aiProviderProcessorMap.get(provider);
@ -215,4 +213,17 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
}
public String aiFillForm() {
String aiClient = "deepSeek";
IUnifiedAIProviderProcessor service = aiProviderProcessorMap.get(aiClient);
if (service == null) {
throw new IllegalArgumentException("Unsupported payment type");
}
return "";
}
}

@ -86,7 +86,8 @@ public class AiChatMessageServiceImpl implements IAiChatMessageService {
.eq(bo.getDeductCost() != null, AiChatMessage::getDeductCost, bo.getDeductCost())
.eq(bo.getTotalToken() != null, AiChatMessage::getTotalToken, bo.getTotalToken())
.eq(bo.getModelId() != null, AiChatMessage::getModelId, bo.getModelId())
.eq(bo.getKnowledgeBaseId() != null, AiChatMessage::getKnowledgeBaseId, bo.getKnowledgeBaseId())
.eq(bo.getKnowledgeBaseId() != null && !bo.getKnowledgeBaseId().equals(-1L), AiChatMessage::getKnowledgeBaseId, bo.getKnowledgeBaseId())
.isNull(bo.getKnowledgeBaseId() != null && bo.getKnowledgeBaseId().equals(-1L), AiChatMessage::getKnowledgeBaseId)
.eq(StringUtils.isNotBlank(bo.getMessageType()), AiChatMessage::getMessageType, bo.getMessageType())
.orderByDesc(AiChatMessage::getCreateTime);
return lqw;

Loading…
Cancel
Save