|
@@ -68,8 +68,8 @@ public class ChatController {
|
|
|
String intent = (String) cached.getOrDefault("intent", "");
|
|
String intent = (String) cached.getOrDefault("intent", "");
|
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
|
List<Map<String, Object>> sources = (List<Map<String, Object>>) cached.getOrDefault("sources", List.of());
|
|
List<Map<String, Object>> sources = (List<Map<String, Object>>) cached.getOrDefault("sources", List.of());
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user", query, intent, null);
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user", query, intent, null);
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", answer, intent, sources);
|
|
|
return ResponseEntity.ok(Map.of(
|
|
return ResponseEntity.ok(Map.of(
|
|
|
"answer", answer,
|
|
"answer", answer,
|
|
|
"sources", sources,
|
|
"sources", sources,
|
|
@@ -87,8 +87,8 @@ public class ChatController {
|
|
|
String intent = (String) waited.getOrDefault("intent", "");
|
|
String intent = (String) waited.getOrDefault("intent", "");
|
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
|
List<Map<String, Object>> sources = (List<Map<String, Object>>) waited.getOrDefault("sources", List.of());
|
|
List<Map<String, Object>> sources = (List<Map<String, Object>>) waited.getOrDefault("sources", List.of());
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user", query, intent, null);
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user", query, intent, null);
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", answer, intent, sources);
|
|
|
return ResponseEntity.ok(Map.of(
|
|
return ResponseEntity.ok(Map.of(
|
|
|
"answer", answer, "sources", sources, "intent", intent,
|
|
"answer", answer, "sources", sources, "intent", intent,
|
|
|
"conversation_id", cid, "cached", true
|
|
"conversation_id", cid, "cached", true
|
|
@@ -106,8 +106,8 @@ public class ChatController {
|
|
|
String answer = llmAnswer;
|
|
String answer = llmAnswer;
|
|
|
|
|
|
|
|
List<Map<String, Object>> sources = buildSources(docs);
|
|
List<Map<String, Object>> sources = buildSources(docs);
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user", query, intent, null);
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user", query, intent, null);
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
|
// 写入全局缓存
|
|
// 写入全局缓存
|
|
|
qaCache.put(normalized, answer, intent, sources);
|
|
qaCache.put(normalized, answer, intent, sources);
|
|
@@ -122,6 +122,7 @@ public class ChatController {
|
|
|
|
|
|
|
|
@PostMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
|
|
@PostMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
|
|
|
public Flux<ServerSentEvent<String>> chatStream(@RequestBody ChatRequest request) {
|
|
public Flux<ServerSentEvent<String>> chatStream(@RequestBody ChatRequest request) {
|
|
|
|
|
+ final String userKey = getCurrentUserKey();
|
|
|
String query = request.getMessage();
|
|
String query = request.getMessage();
|
|
|
String normalized = qaCache.normalize(query);
|
|
String normalized = qaCache.normalize(query);
|
|
|
final String cid = request.getConversationId() != null && !request.getConversationId().isBlank()
|
|
final String cid = request.getConversationId() != null && !request.getConversationId().isBlank()
|
|
@@ -173,8 +174,8 @@ public class ChatController {
|
|
|
} catch (Exception ignored) {}
|
|
} catch (Exception ignored) {}
|
|
|
|
|
|
|
|
String finalAnswer = cleanAnswer(fullAnswer.toString());
|
|
String finalAnswer = cleanAnswer(fullAnswer.toString());
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user", query, intent, null);
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", finalAnswer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user", query, intent, null);
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", finalAnswer, intent, sources);
|
|
|
|
|
|
|
|
// 写入全局缓存
|
|
// 写入全局缓存
|
|
|
qaCache.put(normalized, finalAnswer, intent, sources);
|
|
qaCache.put(normalized, finalAnswer, intent, sources);
|
|
@@ -196,8 +197,8 @@ public class ChatController {
|
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
|
List<Map<String, Object>> sources = (List<Map<String, Object>>) cached.getOrDefault("sources", List.of());
|
|
List<Map<String, Object>> sources = (List<Map<String, Object>>) cached.getOrDefault("sources", List.of());
|
|
|
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user", query, intent, null);
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user", query, intent, null);
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
|
return Flux.create(sink -> {
|
|
return Flux.create(sink -> {
|
|
|
sink.next(ServerSentEvent.<String>builder().event("intent").data(intent).build());
|
|
sink.next(ServerSentEvent.<String>builder().event("intent").data(intent).build());
|
|
@@ -250,10 +251,10 @@ public class ChatController {
|
|
|
String answer = llmAnswer;
|
|
String answer = llmAnswer;
|
|
|
|
|
|
|
|
List<Map<String, Object>> sources = buildSources(docs);
|
|
List<Map<String, Object>> sources = buildSources(docs);
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user",
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user",
|
|
|
request.getMessage().isBlank() ? "[图片]" : "[图片] " + request.getMessage(),
|
|
request.getMessage().isBlank() ? "[图片]" : "[图片] " + request.getMessage(),
|
|
|
intent, null);
|
|
intent, null);
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
|
return ResponseEntity.ok(Map.of(
|
|
return ResponseEntity.ok(Map.of(
|
|
|
"answer", answer,
|
|
"answer", answer,
|
|
@@ -327,10 +328,10 @@ public class ChatController {
|
|
|
} catch (Exception ignored) {}
|
|
} catch (Exception ignored) {}
|
|
|
|
|
|
|
|
String finalAnswer = cleanAnswer(fullAnswer.toString());
|
|
String finalAnswer = cleanAnswer(fullAnswer.toString());
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user",
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user",
|
|
|
request.getMessage().isBlank() ? "[图片]" : "[图片] " + request.getMessage(),
|
|
request.getMessage().isBlank() ? "[图片]" : "[图片] " + request.getMessage(),
|
|
|
intent, null);
|
|
intent, null);
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", finalAnswer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", finalAnswer, intent, sources);
|
|
|
sink.tryEmitComplete();
|
|
sink.tryEmitComplete();
|
|
|
})
|
|
})
|
|
|
.doOnError(sink::tryEmitError)
|
|
.doOnError(sink::tryEmitError)
|
|
@@ -395,8 +396,8 @@ public class ChatController {
|
|
|
List<Map<String, Object>> sources = buildSources(docs);
|
|
List<Map<String, Object>> sources = buildSources(docs);
|
|
|
String userMsg = !request.getMessage().isBlank() ? request.getMessage()
|
|
String userMsg = !request.getMessage().isBlank() ? request.getMessage()
|
|
|
: !ocrText.isEmpty() ? "[" + mediaLabel + "]" : request.getMessage();
|
|
: !ocrText.isEmpty() ? "[" + mediaLabel + "]" : request.getMessage();
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user", userMsg, intent, null);
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user", userMsg, intent, null);
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", answer, intent, sources);
|
|
|
|
|
|
|
|
return ResponseEntity.ok(Map.of(
|
|
return ResponseEntity.ok(Map.of(
|
|
|
"answer", answer,
|
|
"answer", answer,
|
|
@@ -590,8 +591,8 @@ public class ChatController {
|
|
|
String finalAnswer = cleanAnswer(fullAnswer.toString());
|
|
String finalAnswer = cleanAnswer(fullAnswer.toString());
|
|
|
String userMsg = !request.getMessage().isBlank() ? request.getMessage()
|
|
String userMsg = !request.getMessage().isBlank() ? request.getMessage()
|
|
|
: !ocrText.isEmpty() ? "[" + mediaLabel + "]" : "";
|
|
: !ocrText.isEmpty() ? "[" + mediaLabel + "]" : "";
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "user", userMsg, intent, null);
|
|
|
|
|
- persistenceService.saveMessage(getCurrentUserKey(), cid, "assistant", finalAnswer, intent, sources);
|
|
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "user", userMsg, intent, null);
|
|
|
|
|
+ persistenceService.saveMessage(userKey, cid, "assistant", finalAnswer, intent, sources);
|
|
|
sink.tryEmitComplete();
|
|
sink.tryEmitComplete();
|
|
|
})
|
|
})
|
|
|
.doOnError(sink::tryEmitError)
|
|
.doOnError(sink::tryEmitError)
|
|
@@ -604,7 +605,7 @@ public class ChatController {
|
|
|
@RequestParam(defaultValue = "1") int page,
|
|
@RequestParam(defaultValue = "1") int page,
|
|
|
@RequestParam(defaultValue = "20") int pageSize) {
|
|
@RequestParam(defaultValue = "20") int pageSize) {
|
|
|
// getHistory 现在直接返回包含 items/page/page_size/total/total_pages 的 Map
|
|
// getHistory 现在直接返回包含 items/page/page_size/total/total_pages 的 Map
|
|
|
- var result = persistenceService.getHistory(getCurrentUserKey(), page, pageSize);
|
|
|
|
|
|
|
+ var result = persistenceService.getHistory(userKey, page, pageSize);
|
|
|
return ResponseEntity.ok(result);
|
|
return ResponseEntity.ok(result);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -618,7 +619,7 @@ public class ChatController {
|
|
|
@GetMapping("/recent-messages")
|
|
@GetMapping("/recent-messages")
|
|
|
public ResponseEntity<Map<String, Object>> getRecentMessages(
|
|
public ResponseEntity<Map<String, Object>> getRecentMessages(
|
|
|
@RequestParam(defaultValue = "50") int limit) {
|
|
@RequestParam(defaultValue = "50") int limit) {
|
|
|
- var msgs = persistenceService.getRecentMessages(getCurrentUserKey(), Math.min(limit, 200));
|
|
|
|
|
|
|
+ var msgs = persistenceService.getRecentMessages(userKey, Math.min(limit, 200));
|
|
|
return ResponseEntity.ok(Map.of("messages", msgs));
|
|
return ResponseEntity.ok(Map.of("messages", msgs));
|
|
|
}
|
|
}
|
|
|
|
|
|