From b05f094ac51dce91eb8c00235226d54a04658c6d Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期一, 23 三月 2026 15:51:17 +0800
Subject: [PATCH] #ai 页面优化
---
rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/chat/AiChatOrchestrator.java | 25 +++++++++++++------------
1 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/chat/AiChatOrchestrator.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/chat/AiChatOrchestrator.java
index 055192b..8b6b510 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/chat/AiChatOrchestrator.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/chat/AiChatOrchestrator.java
@@ -57,6 +57,7 @@
String requestId = request.getRequestId();
long startedAt = System.currentTimeMillis();
AtomicReference<Long> firstTokenAtRef = new AtomicReference<>();
+ AtomicLong traceSequence = new AtomicLong(0);
AtomicLong toolCallSequence = new AtomicLong(0);
AtomicLong toolSuccessCount = new AtomicLong(0);
AtomicLong toolFailureCount = new AtomicLong(0);
@@ -64,7 +65,7 @@
Long callLogId = null;
String model = null;
String resolvedPromptCode = request.getPromptCode();
- AiThinkingTraceEmitter thinkingTraceEmitter = null;
+ AiChatTraceEmitter traceEmitter = null;
try {
ensureIdentity(userId, tenantId);
AiResolvedConfig config = resolveConfig(request, tenantId);
@@ -115,13 +116,13 @@
.build());
log.info("AI chat started, requestId={}, userId={}, tenantId={}, sessionId={}, model={}",
requestId, userId, tenantId, session.getId(), resolvedModel);
- thinkingTraceEmitter = new AiThinkingTraceEmitter(aiSseEventPublisher, emitter, requestId, session.getId());
- thinkingTraceEmitter.startAnalyze();
- AiThinkingTraceEmitter activeThinkingTraceEmitter = thinkingTraceEmitter;
+ traceEmitter = new AiChatTraceEmitter(aiSseEventPublisher, emitter, requestId, session.getId(), traceSequence);
+ traceEmitter.startAnalyze();
+ AiChatTraceEmitter activeTraceEmitter = traceEmitter;
ToolCallback[] observableToolCallbacks = aiToolObservationService.wrapToolCallbacks(
- runtime.getToolCallbacks(), emitter, requestId, session.getId(), toolCallSequence,
- toolSuccessCount, toolFailureCount, callLogId, userId, tenantId, activeThinkingTraceEmitter
+ runtime.getToolCallbacks(), requestId, session.getId(), toolCallSequence,
+ toolSuccessCount, toolFailureCount, callLogId, userId, tenantId, activeTraceEmitter
);
Prompt prompt = new Prompt(
aiPromptMessageBuilder.buildPromptMessages(memory, mergedMessages, config.getPrompt(), request.getMetadata()),
@@ -134,10 +135,10 @@
String content = extractContent(response);
aiChatMemoryService.saveRound(session, userId, tenantId, request.getMessages(), content);
if (StringUtils.hasText(content)) {
- aiSseEventPublisher.markFirstToken(firstTokenAtRef, emitter, requestId, session.getId(), resolvedModel, startedAt, activeThinkingTraceEmitter);
+ aiSseEventPublisher.markFirstToken(firstTokenAtRef, emitter, requestId, session.getId(), resolvedModel, startedAt, activeTraceEmitter);
aiSseEventPublisher.emitStrict(emitter, "delta", aiSseEventPublisher.buildMessagePayload("requestId", requestId, "content", content));
}
- activeThinkingTraceEmitter.completeCurrentPhase();
+ activeTraceEmitter.completeCurrentPhase();
aiSseEventPublisher.emitDone(emitter, requestId, response.getMetadata(), config.getAiParam().getModel(),
session.getId(), startedAt, firstTokenAtRef.get());
aiSseEventPublisher.emitSafely(emitter, "status",
@@ -169,7 +170,7 @@
lastMetadata.set(response.getMetadata());
String content = extractContent(response);
if (StringUtils.hasText(content)) {
- aiSseEventPublisher.markFirstToken(firstTokenAtRef, emitter, requestId, session.getId(), resolvedModel, startedAt, activeThinkingTraceEmitter);
+ aiSseEventPublisher.markFirstToken(firstTokenAtRef, emitter, requestId, session.getId(), resolvedModel, startedAt, activeTraceEmitter);
assistantContent.append(content);
aiSseEventPublisher.emitStrict(emitter, "delta",
aiSseEventPublisher.buildMessagePayload("requestId", requestId, "content", content));
@@ -181,7 +182,7 @@
e == null ? "AI 妯″瀷娴佸紡璋冪敤澶辫触" : e.getMessage(), e);
}
aiChatMemoryService.saveRound(session, userId, tenantId, request.getMessages(), assistantContent.toString());
- activeThinkingTraceEmitter.completeCurrentPhase();
+ activeTraceEmitter.completeCurrentPhase();
aiSseEventPublisher.emitDone(emitter, requestId, lastMetadata.get(), config.getAiParam().getModel(),
session.getId(), startedAt, firstTokenAtRef.get());
aiSseEventPublisher.emitSafely(emitter, "status",
@@ -205,13 +206,13 @@
}
} catch (AiChatException e) {
aiChatFailureHandler.handleStreamFailure(emitter, requestId, sessionId, model, startedAt, firstTokenAtRef.get(), e,
- callLogId, toolSuccessCount.get(), toolFailureCount.get(), thinkingTraceEmitter,
+ callLogId, toolSuccessCount.get(), toolFailureCount.get(), traceEmitter,
tenantId, userId, resolvedPromptCode);
} catch (Exception e) {
aiChatFailureHandler.handleStreamFailure(emitter, requestId, sessionId, model, startedAt, firstTokenAtRef.get(),
aiChatFailureHandler.buildAiException("AI_INTERNAL_ERROR", AiErrorCategory.INTERNAL, "INTERNAL",
e == null ? "AI 瀵硅瘽澶辫触" : e.getMessage(), e),
- callLogId, toolSuccessCount.get(), toolFailureCount.get(), thinkingTraceEmitter,
+ callLogId, toolSuccessCount.get(), toolFailureCount.get(), traceEmitter,
tenantId, userId, resolvedPromptCode);
} finally {
log.debug("AI chat stream finished, requestId={}", requestId);
--
Gitblit v1.9.1