优化
This commit is contained in:
@@ -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 || '对话出错')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_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) {
|
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user