From c02f5d36c83c84756b3625bfb9ecc2ee9cf3c7b4 Mon Sep 17 00:00:00 2001 From: shenaowei <450702724@qq.com> Date: Mon, 23 Feb 2026 19:49:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/agents/ChatDrawer.vue | 5 ++-- .../module/tik/dify/client/DifyClient.java | 26 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/frontend/app/web-gold/src/components/agents/ChatDrawer.vue b/frontend/app/web-gold/src/components/agents/ChatDrawer.vue index 0e9f9cf674..555e972fef 100644 --- a/frontend/app/web-gold/src/components/agents/ChatDrawer.vue +++ b/frontend/app/web-gold/src/components/agents/ChatDrawer.vue @@ -247,6 +247,7 @@ const handleSend = async () => { actions: false } messages.value.push(assistantMessage) + const currentMessage = messages.value[messages.value.length - 1] abortController.value = new AbortController() @@ -259,11 +260,11 @@ const handleSend = async () => { ctrl: abortController.value, onMessage: (result) => { if (result.event === 'message' && result.content) { - assistantMessage.content += result.content + currentMessage.content += result.content scrollToBottom() } else if (result.event === 'done') { conversationId.value = result.conversationId - assistantMessage.actions = true + currentMessage.actions = true } else if (result.event === 'error') { message.error(result.errorMessage || '对话出错') } diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/dify/client/DifyClient.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/dify/client/DifyClient.java index 542e5e59d1..e32c4ccf5b 100644 --- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/dify/client/DifyClient.java +++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/dify/client/DifyClient.java @@ -101,14 +101,36 @@ public class DifyClient { try { Map data = objectMapper.readValue(jsonStr, new TypeReference<>() {}); String eventType = (String) data.get("event"); - String answer = (String) data.get("answer"); String conversationId = (String) data.get("conversation_id"); + // 获取内容:优先 answer,其次 text_message(chatflow 模式) + String answer = (String) data.get("answer"); + if (answer == null) { + answer = (String) data.get("text_message"); + } + + log.debug("[parseSSEEvent] event={}, answer={}", eventType, answer); + return switch (eventType) { case "message", "agent_message" -> DifyChatRespVO.message(answer, conversationId); case "workflow_finished", "message_end" -> DifyChatRespVO.done(conversationId, null); case "error" -> DifyChatRespVO.error(answer); - default -> null; + // chatflow 节点事件,尝试提取内容 + case "node_finished" -> { + @SuppressWarnings("unchecked") + Map outputs = (Map) data.get("outputs"); + if (outputs != null) { + String text = (String) outputs.get("text"); + if (text != null) { + yield DifyChatRespVO.message(text, conversationId); + } + } + yield null; + } + default -> { + log.debug("[parseSSEEvent] 未处理的事件类型: {}", eventType); + yield null; + } }; } catch (Exception e) { log.warn("[parseSSEEvent] 解析 SSE 事件失败: {}", event, e);