|
|
|
|
@ -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 "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|