mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-03 15:03:42 +08:00
feat: 本地知识库功能优化
This commit is contained in:
@@ -33,6 +33,7 @@ import org.ruoyi.knowledge.service.IKnowledgeAttachService;
|
||||
import org.ruoyi.knowledge.service.IKnowledgeFragmentService;
|
||||
import org.ruoyi.knowledge.service.IKnowledgeInfoService;
|
||||
import org.ruoyi.system.listener.SSEEventSourceListener;
|
||||
import org.ruoyi.system.service.ISseService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.ruoyi.knowledge.chain.vectorstore.VectorStore;
|
||||
@@ -68,11 +69,14 @@ public class KnowledgeController extends BaseController {
|
||||
|
||||
private final ChatConfig chatConfig;
|
||||
|
||||
private final ISseService sseService;
|
||||
|
||||
/**
|
||||
* 知识库对话
|
||||
*/
|
||||
@PostMapping("/send")
|
||||
public SseEmitter send(@RequestBody @Valid ChatRequest chatRequest) {
|
||||
|
||||
openAiStreamClient = chatConfig.getOpenAiStreamClient();
|
||||
SseEmitter sseEmitter = new SseEmitter(0L);
|
||||
SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(sseEmitter);
|
||||
@@ -87,6 +91,10 @@ public class KnowledgeController extends BaseController {
|
||||
}
|
||||
Message userMessage = Message.builder().content(content + (nearestList.size() > 0 ? "\n\n注意:回答问题时,须严格根据我给你的系统上下文内容原文进行回答,请不要自己发挥,回答时保持原来文本的段落层级" : "") ).role(Message.Role.USER).build();
|
||||
messages.add(userMessage);
|
||||
if (chatRequest.getModel().startsWith("ollama")) {
|
||||
return sseService.ollamaChat(chatRequest);
|
||||
}
|
||||
|
||||
ChatCompletion completion = ChatCompletion
|
||||
.builder()
|
||||
.messages(messages)
|
||||
|
||||
@@ -43,7 +43,7 @@ import java.util.List;
|
||||
@RequestMapping("/chat")
|
||||
public class ChatController {
|
||||
|
||||
private final ISseService ISseService;
|
||||
private final ISseService sseService;
|
||||
|
||||
private final IChatMessageService chatMessageService;
|
||||
|
||||
@@ -54,9 +54,9 @@ public class ChatController {
|
||||
@ResponseBody
|
||||
public SseEmitter sseChat(@RequestBody @Valid ChatRequest chatRequest, HttpServletRequest request) {
|
||||
if (chatRequest.getModel().startsWith("ollama")) {
|
||||
return ISseService.ollamaChat(chatRequest);
|
||||
return sseService.ollamaChat(chatRequest);
|
||||
}
|
||||
return ISseService.sseChat(chatRequest,request);
|
||||
return sseService.sseChat(chatRequest,request);
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ public class ChatController {
|
||||
@PostMapping("/upload")
|
||||
@ResponseBody
|
||||
public UploadFileResponse upload(@RequestPart("file") MultipartFile file) {
|
||||
return ISseService.upload(file);
|
||||
return sseService.upload(file);
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ public class ChatController {
|
||||
@PostMapping("/audio")
|
||||
@ResponseBody
|
||||
public WhisperResponse audio(@RequestParam("file") MultipartFile file) {
|
||||
WhisperResponse whisperResponse = ISseService.speechToTextTranscriptionsV2(file);
|
||||
WhisperResponse whisperResponse = sseService.speechToTextTranscriptionsV2(file);
|
||||
return whisperResponse;
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ public class ChatController {
|
||||
@PostMapping("/speech")
|
||||
@ResponseBody
|
||||
public ResponseEntity<Resource> speech(@RequestBody TextToSpeech textToSpeech) {
|
||||
return ISseService.textToSpeed(textToSpeech);
|
||||
return sseService.textToSpeed(textToSpeech);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -101,13 +101,13 @@ public class ChatController {
|
||||
@PostMapping("/translation")
|
||||
@ResponseBody
|
||||
public String translation(@RequestBody TranslationRequest translationRequest) {
|
||||
return ISseService.translation(translationRequest);
|
||||
return sseService.translation(translationRequest);
|
||||
}
|
||||
|
||||
@PostMapping("/dall3")
|
||||
@ResponseBody
|
||||
public R<List<Item>> dall3(@RequestBody @Valid Dall3Request request) {
|
||||
return R.ok(ISseService.dall3(request));
|
||||
return R.ok(sseService.dall3(request));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -229,21 +229,19 @@ public class WeaviateVectorStore implements VectorStore{
|
||||
@Override
|
||||
public void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList,String kid, String docId,List<String> fidList) {
|
||||
WeaviateClient client = getClient();
|
||||
for (int i = 0; i < chunkList.size(); i++) {
|
||||
if (vectorList != null) {
|
||||
if (vectorList != null) {
|
||||
for (int i = 0; i < Math.min(chunkList.size(), vectorList.size()); i++) {
|
||||
List<Double> vector = vectorList.get(i);
|
||||
Float[] vf = new Float[vector.size()];
|
||||
for (int j = 0; j < vector.size(); j++) {
|
||||
Double value = vector.get(j);
|
||||
vf[j] = value.floatValue();
|
||||
}
|
||||
Float[] vf = vector.stream().map(Double::floatValue).toArray(Float[]::new);
|
||||
|
||||
Map<String, Object> dataSchema = new HashMap<>();
|
||||
dataSchema.put("content", chunkList.get(i));
|
||||
dataSchema.put("kid", kid);
|
||||
dataSchema.put("docId", docId);
|
||||
dataSchema.put("fid", fidList.get(i));
|
||||
String uuid = UUID.randomUUID(true).toString();
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
dataSchema.put("uuid", uuid);
|
||||
|
||||
Result<WeaviateObject> result = client.data().creator()
|
||||
.withClassName(className + kid)
|
||||
.withID(uuid)
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.zhipu.oapi.ClientV4;
|
||||
import com.zhipu.oapi.service.v4.tools.*;
|
||||
import io.github.ollama4j.OllamaAPI;
|
||||
import io.github.ollama4j.models.chat.OllamaChatMessage;
|
||||
import io.github.ollama4j.models.chat.OllamaChatMessageRole;
|
||||
import io.github.ollama4j.models.chat.OllamaChatRequestBuilder;
|
||||
import io.github.ollama4j.models.chat.OllamaChatRequestModel;
|
||||
@@ -626,13 +627,20 @@ public class SseServiceImpl implements ISseService {
|
||||
final SseEmitter emitter = new SseEmitter();
|
||||
String host = sysModel.getApiHost();
|
||||
List<Message> msgList = chatRequest.getMessages();
|
||||
Message message = msgList.get(msgList.size() - 1);
|
||||
List<OllamaChatMessage> messages = new ArrayList<>();
|
||||
|
||||
for (Message message : msgList) {
|
||||
OllamaChatMessage ollamaChatMessage = new OllamaChatMessage();
|
||||
ollamaChatMessage.setRole(OllamaChatMessageRole.USER);
|
||||
ollamaChatMessage.setContent(message.getContent().toString());
|
||||
messages.add(ollamaChatMessage);
|
||||
}
|
||||
OllamaAPI api = new OllamaAPI(host);
|
||||
api.setRequestTimeoutSeconds(100);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(parts[1]);
|
||||
|
||||
OllamaChatRequestModel requestModel = builder
|
||||
.withMessage(OllamaChatMessageRole.USER,
|
||||
message.getContent().toString())
|
||||
.withMessages(messages)
|
||||
.build();
|
||||
|
||||
// 异步执行 OllAma API 调用
|
||||
|
||||
Reference in New Issue
Block a user