|
@@ -133,6 +133,11 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
@@ -133,6 +133,11 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
133
|
* @param emitter 流式返回
|
133
|
* @param emitter 流式返回
|
|
134
|
* @param questionEmbedding 问题向量
|
134
|
* @param questionEmbedding 问题向量
|
|
135
|
*/
|
135
|
*/
|
|
|
|
136
|
+ /**
|
|
|
|
137
|
+ * 发送token
|
|
|
|
138
|
+ * @param emitter 流式返回
|
|
|
|
139
|
+ * @param questionEmbedding 问题向量
|
|
|
|
140
|
+ */
|
|
136
|
private void sendQuestionEmbeddingResponse(SseEmitter emitter, QuestionEmbedding questionEmbedding) throws Exception {
|
141
|
private void sendQuestionEmbeddingResponse(SseEmitter emitter, QuestionEmbedding questionEmbedding) throws Exception {
|
|
137
|
ObjectMapper objectMapper = new ObjectMapper();
|
142
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
138
|
|
143
|
|
|
@@ -141,8 +146,11 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
@@ -141,8 +146,11 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
141
|
data.put("token", questionEmbedding.getAnswer());
|
146
|
data.put("token", questionEmbedding.getAnswer());
|
|
142
|
emitter.send(SseEmitter.event().data(objectMapper.writeValueAsString(data)));
|
147
|
emitter.send(SseEmitter.event().data(objectMapper.writeValueAsString(data)));
|
|
143
|
|
148
|
|
|
144
|
- // 发送END事件
|
|
|
|
145
|
- Map<String, String> endData = createEndData(objectMapper.writeValueAsString(questionEmbedding.getMetadata()), String.valueOf(questionEmbedding.getSimilarity()));
|
149
|
+ // 发送END事件(改为直接传Map)
|
|
|
|
150
|
+ Map<String, String> endData = createEndData(
|
|
|
|
151
|
+ questionEmbedding.getMetadata(),
|
|
|
|
152
|
+ String.valueOf(1 - questionEmbedding.getSimilarity())
|
|
|
|
153
|
+ );
|
|
146
|
emitter.send(SseEmitter.event().data(objectMapper.writeValueAsString(endData)));
|
154
|
emitter.send(SseEmitter.event().data(objectMapper.writeValueAsString(endData)));
|
|
147
|
emitter.complete();
|
155
|
emitter.complete();
|
|
148
|
}
|
156
|
}
|
|
@@ -258,9 +266,27 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
@@ -258,9 +266,27 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
258
|
* @param fileName 文件名称
|
266
|
* @param fileName 文件名称
|
|
259
|
* @param storedFileName 本地存储文件名称
|
267
|
* @param storedFileName 本地存储文件名称
|
|
260
|
*/
|
268
|
*/
|
|
261
|
- private void processLLMResponse(SseEmitter emitter, AiragLog logRecord, String modelId,
|
|
|
|
262
|
- String systemPrompt, String userPrompt,
|
|
|
|
263
|
- Map<String, Object> firstMatch, String fileName, String storedFileName) {
|
269
|
+ /**
|
|
|
|
270
|
+ * 对llm模型进行提问
|
|
|
|
271
|
+ * @param emitter 流式返回
|
|
|
|
272
|
+ * @param logRecord 日志对象
|
|
|
|
273
|
+ * @param modelId 模型id
|
|
|
|
274
|
+ * @param systemPrompt 系统提示词
|
|
|
|
275
|
+ * @param userPrompt 用户提示词
|
|
|
|
276
|
+ * @param firstMatch 最相似的数据
|
|
|
|
277
|
+ * @param fileName 文件名称
|
|
|
|
278
|
+ * @param storedFileName 本地存储文件名称
|
|
|
|
279
|
+ */
|
|
|
|
280
|
+ private void processLLMResponse(
|
|
|
|
281
|
+ SseEmitter emitter,
|
|
|
|
282
|
+ AiragLog logRecord,
|
|
|
|
283
|
+ String modelId,
|
|
|
|
284
|
+ String systemPrompt,
|
|
|
|
285
|
+ String userPrompt,
|
|
|
|
286
|
+ Map<String, Object> firstMatch,
|
|
|
|
287
|
+ String fileName,
|
|
|
|
288
|
+ String storedFileName
|
|
|
|
289
|
+ ) {
|
|
264
|
StringBuilder answerBuilder = new StringBuilder();
|
290
|
StringBuilder answerBuilder = new StringBuilder();
|
|
265
|
List<ChatMessage> messages = new ArrayList<>();
|
291
|
List<ChatMessage> messages = new ArrayList<>();
|
|
266
|
messages.add(new SystemMessage(systemPrompt));
|
292
|
messages.add(new SystemMessage(systemPrompt));
|
|
@@ -281,8 +307,14 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
@@ -281,8 +307,14 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
281
|
|
307
|
|
|
282
|
tokenStream.onComplete(response -> {
|
308
|
tokenStream.onComplete(response -> {
|
|
283
|
try {
|
309
|
try {
|
|
284
|
- Map<String, String> endData = createEndData(firstMatch.get("metadata").toString(),
|
|
|
|
285
|
- firstMatch.get("score").toString());
|
310
|
+ // 把metadata先转成Map
|
|
|
|
311
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
312
|
+ Map<String, Object> metadata = objectMapper.readValue(firstMatch.get("metadata").toString(), Map.class);
|
|
|
|
313
|
+
|
|
|
|
314
|
+ Map<String, String> endData = createEndData(
|
|
|
|
315
|
+ metadata,
|
|
|
|
316
|
+ firstMatch.get("score").toString()
|
|
|
|
317
|
+ );
|
|
286
|
endData.put("fileName", fileName);
|
318
|
endData.put("fileName", fileName);
|
|
287
|
endData.put("fileBase64", FileToBase64Util.fileToBase64(uploadPath + storedFileName));
|
319
|
endData.put("fileBase64", FileToBase64Util.fileToBase64(uploadPath + storedFileName));
|
|
288
|
|
320
|
|
|
@@ -305,23 +337,27 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
@@ -305,23 +337,27 @@ public class AiragResponseServiceImpl implements AiragResponseService { |
|
305
|
tokenStream.start();
|
337
|
tokenStream.start();
|
|
306
|
}
|
338
|
}
|
|
307
|
|
339
|
|
|
|
|
340
|
+
|
|
308
|
/**
|
341
|
/**
|
|
309
|
* 创建结束标志,发送结束token
|
342
|
* 创建结束标志,发送结束token
|
|
310
|
* @param metadataJson 元数据
|
343
|
* @param metadataJson 元数据
|
|
311
|
* @param similarity 相似度
|
344
|
* @param similarity 相似度
|
|
312
|
*/
|
345
|
*/
|
|
313
|
- private Map<String, String> createEndData(String metadataJson, String similarity) throws IOException {
|
346
|
+ /**
|
|
|
|
347
|
+ * 创建结束标志,发送结束token
|
|
|
|
348
|
+ * @param metadata 元数据(直接Map)
|
|
|
|
349
|
+ * @param similarity 相似度
|
|
|
|
350
|
+ */
|
|
|
|
351
|
+ private Map<String, String> createEndData(Map<String, Object> metadata, String similarity) throws IOException {
|
|
314
|
Map<String, String> endData = new HashMap<>();
|
352
|
Map<String, String> endData = new HashMap<>();
|
|
315
|
endData.put("event", "END");
|
353
|
endData.put("event", "END");
|
|
316
|
endData.put("similarity", similarity);
|
354
|
endData.put("similarity", similarity);
|
|
317
|
|
355
|
|
|
318
|
- if (StringUtils.isNotBlank(metadataJson)) {
|
|
|
|
319
|
- ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
320
|
- Map<String, String> metadata = objectMapper.readValue(metadataJson, Map.class);
|
|
|
|
321
|
- String docName = metadata.get("docName");
|
356
|
+ if (metadata != null && !metadata.isEmpty()) {
|
|
|
|
357
|
+ String docName = metadata.get("docName").toString();
|
|
322
|
endData.put("fileName", docName);
|
358
|
endData.put("fileName", docName);
|
|
323
|
|
359
|
|
|
324
|
- String fileName = generateFilePath(metadataJson);
|
360
|
+ String fileName = metadata.get("storedFileName").toString();
|
|
325
|
if (StringUtils.isNotBlank(fileName)) {
|
361
|
if (StringUtils.isNotBlank(fileName)) {
|
|
326
|
endData.put("fileBase64", FileToBase64Util.fileToBase64(uploadPath + fileName));
|
362
|
endData.put("fileBase64", FileToBase64Util.fileToBase64(uploadPath + fileName));
|
|
327
|
}
|
363
|
}
|