This commit is contained in:
2026-02-23 19:49:12 +08:00
parent 0c4cffe18e
commit c02f5d36c8
2 changed files with 27 additions and 4 deletions

View File

@@ -247,6 +247,7 @@ const handleSend = async () => {
actions: false actions: false
} }
messages.value.push(assistantMessage) messages.value.push(assistantMessage)
const currentMessage = messages.value[messages.value.length - 1]
abortController.value = new AbortController() abortController.value = new AbortController()
@@ -259,11 +260,11 @@ const handleSend = async () => {
ctrl: abortController.value, ctrl: abortController.value,
onMessage: (result) => { onMessage: (result) => {
if (result.event === 'message' && result.content) { if (result.event === 'message' && result.content) {
assistantMessage.content += result.content currentMessage.content += result.content
scrollToBottom() scrollToBottom()
} else if (result.event === 'done') { } else if (result.event === 'done') {
conversationId.value = result.conversationId conversationId.value = result.conversationId
assistantMessage.actions = true currentMessage.actions = true
} else if (result.event === 'error') { } else if (result.event === 'error') {
message.error(result.errorMessage || '对话出错') message.error(result.errorMessage || '对话出错')
} }

View File

@@ -101,14 +101,36 @@ public class DifyClient {
try { try {
Map<String, Object> data = objectMapper.readValue(jsonStr, new TypeReference<>() {}); Map<String, Object> data = objectMapper.readValue(jsonStr, new TypeReference<>() {});
String eventType = (String) data.get("event"); String eventType = (String) data.get("event");
String answer = (String) data.get("answer");
String conversationId = (String) data.get("conversation_id"); String conversationId = (String) data.get("conversation_id");
// 获取内容:优先 answer其次 text_messagechatflow 模式)
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) { return switch (eventType) {
case "message", "agent_message" -> DifyChatRespVO.message(answer, conversationId); case "message", "agent_message" -> DifyChatRespVO.message(answer, conversationId);
case "workflow_finished", "message_end" -> DifyChatRespVO.done(conversationId, null); case "workflow_finished", "message_end" -> DifyChatRespVO.done(conversationId, null);
case "error" -> DifyChatRespVO.error(answer); case "error" -> DifyChatRespVO.error(answer);
default -> null; // chatflow 节点事件,尝试提取内容
case "node_finished" -> {
@SuppressWarnings("unchecked")
Map<String, Object> outputs = (Map<String, Object>) 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) { } catch (Exception e) {
log.warn("[parseSSEEvent] 解析 SSE 事件失败: {}", event, e); log.warn("[parseSSEEvent] 解析 SSE 事件失败: {}", event, e);