Регистрация потоковых ответов от Spring AI не фиксирует фактический контент.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Регистрация потоковых ответов от Spring AI не фиксирует фактический контент.

Сообщение Anonymous »

Я пытаюсь регистрировать разговоры Spring AI в формате JSON, аналогично тому, как это делает SimpleLoggerAdvisor. Однако когда я установил точку останова в этом методе с помощью IntelliJ IDEA, я заметил, что интерфейс все еще получает выходные данные. Это заставляет меня подозревать, что ответ, отправляемый во внешний интерфейс, и код, в котором я установил точку останова, выполняются в разных потоках, особенно с учетом того, что я агрегировал потоковый ответ.
@Override
public Flux adviseStream(ChatClientRequest chatClientRequest, StreamAdvisorChain streamAdvisorChain) {

String conversationId = getConversationId(chatClientRequest.context(), ChatMemory.DEFAULT_CONVERSATION_ID);
String prompt = chatClientRequest.prompt().getContents();
Instant start = Instant.now();

logger.atInfo()
.addKeyValue("event", "ai_stream_session")
.addKeyValue("conversationId", conversationId)
.addKeyValue("prompt", prompt)
.log("AI stream request logged");
Flux chatClientResponses = streamAdvisorChain
.nextStream(chatClientRequest)
;

return new ChatClientMessageAggregator()
.aggregateChatClientResponse(chatClientResponses, resp -> logResponse(conversationId, resp, start));
}
private void logResponse(String conversationId, ChatClientResponse response, Instant startTime) {
try {
ChatResponse chatResponse = response.chatResponse();
String responseText = chatResponse.getResult().getOutput().getText();
Instant endTime = Instant.now();
long durationMs = Duration.between(startTime, endTime).toMillis();

LoggingEventBuilder logBuilder = logger.atInfo()
.addKeyValue("response", responseText)
.addKeyValue("durationMs", durationMs);

if (chatResponse != null && chatResponse.getMetadata() != null) {
ChatResponseMetadata meta = chatResponse.getMetadata();
Usage usage = meta.getUsage();

logBuilder
.addKeyValue("model", meta.getModel())
.addKeyValue("promptTokens", usage != null ? usage.getPromptTokens() : 0)
.addKeyValue("completionTokens", usage != null ? usage.getCompletionTokens() : 0)
.addKeyValue("totalTokens", usage != null ? usage.getTotalTokens() : 0);
}
logBuilder.log("AI response logged");
} catch (Exception e) {
logger.atError()
.addKeyValue("conversationId", conversationId)
.addKeyValue("error", e.getMessage())
.setCause(e)
.log("Failed to log AI response");
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... tual-conte
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»