|
...
|
...
|
@@ -133,16 +133,24 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
|
|
* @param emitter 流式返回
|
|
|
|
* @param questionEmbedding 问题向量
|
|
|
|
*/
|
|
|
|
/**
|
|
|
|
* 发送token
|
|
|
|
* @param emitter 流式返回
|
|
|
|
* @param questionEmbedding 问题向量
|
|
|
|
*/
|
|
|
|
private void sendQuestionEmbeddingResponse(SseEmitter emitter, QuestionEmbedding questionEmbedding) throws Exception {
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
|
|
|
|
|
|
|
// 发送token
|
|
|
|
Map<String, String> data = new HashMap<>();
|
|
|
|
data.put("token", questionEmbedding.getAnswer());
|
|
|
|
emitter.send(SseEmitter.event().data(objectMapper.writeValueAsString(data)));
|
|
|
|
|
|
|
|
// 发送END事件
|
|
|
|
Map<String, String> endData = createEndData(objectMapper.writeValueAsString(questionEmbedding.getMetadata()), String.valueOf(questionEmbedding.getSimilarity()));
|
|
|
|
// 发送END事件(改为直接传Map)
|
|
|
|
Map<String, String> endData = createEndData(
|
|
|
|
questionEmbedding.getMetadata(),
|
|
|
|
String.valueOf(1 - questionEmbedding.getSimilarity())
|
|
|
|
);
|
|
|
|
emitter.send(SseEmitter.event().data(objectMapper.writeValueAsString(endData)));
|
|
|
|
emitter.complete();
|
|
|
|
}
|
|
...
|
...
|
@@ -258,16 +266,34 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
|
|
* @param fileName 文件名称
|
|
|
|
* @param storedFileName 本地存储文件名称
|
|
|
|
*/
|
|
|
|
private void processLLMResponse(SseEmitter emitter, AiragLog logRecord, String modelId,
|
|
|
|
String systemPrompt, String userPrompt,
|
|
|
|
Map<String, Object> firstMatch, String fileName, String storedFileName) {
|
|
|
|
/**
|
|
|
|
* 对llm模型进行提问
|
|
|
|
* @param emitter 流式返回
|
|
|
|
* @param logRecord 日志对象
|
|
|
|
* @param modelId 模型id
|
|
|
|
* @param systemPrompt 系统提示词
|
|
|
|
* @param userPrompt 用户提示词
|
|
|
|
* @param firstMatch 最相似的数据
|
|
|
|
* @param fileName 文件名称
|
|
|
|
* @param storedFileName 本地存储文件名称
|
|
|
|
*/
|
|
|
|
private void processLLMResponse(
|
|
|
|
SseEmitter emitter,
|
|
|
|
AiragLog logRecord,
|
|
|
|
String modelId,
|
|
|
|
String systemPrompt,
|
|
|
|
String userPrompt,
|
|
|
|
Map<String, Object> firstMatch,
|
|
|
|
String fileName,
|
|
|
|
String storedFileName
|
|
|
|
) {
|
|
|
|
StringBuilder answerBuilder = new StringBuilder();
|
|
|
|
List<ChatMessage> messages = new ArrayList<>();
|
|
|
|
messages.add(new SystemMessage(systemPrompt));
|
|
|
|
messages.add(new UserMessage(userPrompt));
|
|
|
|
|
|
|
|
TokenStream tokenStream = aiChatHandler.chat(modelId, messages);
|
|
|
|
|
|
|
|
|
|
|
|
tokenStream.onNext(token -> {
|
|
|
|
try {
|
|
|
|
answerBuilder.append(token);
|
|
...
|
...
|
@@ -281,11 +307,17 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
|
|
|
|
|
|
tokenStream.onComplete(response -> {
|
|
|
|
try {
|
|
|
|
Map<String, String> endData = createEndData(firstMatch.get("metadata").toString(),
|
|
|
|
firstMatch.get("score").toString());
|
|
|
|
// 把metadata先转成Map
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
Map<String, Object> metadata = objectMapper.readValue(firstMatch.get("metadata").toString(), Map.class);
|
|
|
|
|
|
|
|
Map<String, String> endData = createEndData(
|
|
|
|
metadata,
|
|
|
|
firstMatch.get("score").toString()
|
|
|
|
);
|
|
|
|
endData.put("fileName", fileName);
|
|
|
|
endData.put("fileBase64", FileToBase64Util.fileToBase64(uploadPath + storedFileName));
|
|
|
|
|
|
|
|
|
|
|
|
emitter.send(SseEmitter.event().data(new ObjectMapper().writeValueAsString(endData)));
|
|
|
|
logRecord.setAnswer(answerBuilder.toString()).setAnswerType(2);
|
|
|
|
airagLogService.save(logRecord);
|
|
...
|
...
|
@@ -305,28 +337,32 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
|
|
tokenStream.start();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建结束标志,发送结束token
|
|
|
|
* @param metadataJson 元数据
|
|
|
|
* @param similarity 相似度
|
|
|
|
*/
|
|
|
|
private Map<String, String> createEndData(String metadataJson, String similarity) throws IOException {
|
|
|
|
/**
|
|
|
|
* 创建结束标志,发送结束token
|
|
|
|
* @param metadata 元数据(直接Map)
|
|
|
|
* @param similarity 相似度
|
|
|
|
*/
|
|
|
|
private Map<String, String> createEndData(Map<String, Object> metadata, String similarity) throws IOException {
|
|
|
|
Map<String, String> endData = new HashMap<>();
|
|
|
|
endData.put("event", "END");
|
|
|
|
endData.put("similarity", similarity);
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(metadataJson)) {
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
Map<String, String> metadata = objectMapper.readValue(metadataJson, Map.class);
|
|
|
|
String docName = metadata.get("docName");
|
|
|
|
|
|
|
|
if (metadata != null && !metadata.isEmpty()) {
|
|
|
|
String docName = metadata.get("docName").toString();
|
|
|
|
endData.put("fileName", docName);
|
|
|
|
|
|
|
|
String fileName = generateFilePath(metadataJson);
|
|
|
|
|
|
|
|
String fileName = metadata.get("storedFileName").toString();
|
|
|
|
if (StringUtils.isNotBlank(fileName)) {
|
|
|
|
endData.put("fileBase64", FileToBase64Util.fileToBase64(uploadPath + fileName));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return endData;
|
|
|
|
}
|
|
|
|
|
...
|
...
|
|