diff --git a/src/pages/Chat/ChatWindow.jsx b/src/pages/Chat/ChatWindow.jsx index ae48c0a..3e6a062 100644 --- a/src/pages/Chat/ChatWindow.jsx +++ b/src/pages/Chat/ChatWindow.jsx @@ -2,11 +2,11 @@ import React, { useState, useEffect, useRef } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { resetSendMessageStatus, addMessage, updateMessage } from '../../store/chat/chat.slice'; import { showNotification } from '../../store/notification.slice'; -import { createChatRecord, fetchAvailableDatasets, fetchConversationDetail } from '../../store/chat/chat.thunks'; +import { fetchAvailableDatasets, fetchConversationDetail, getChatResources } from '../../store/chat/chat.thunks'; import SvgIcon from '../../components/SvgIcon'; import SafeMarkdown from '../../components/SafeMarkdown'; import ResourceList from '../../components/ResourceList'; -import { sendChatMessageViaWebSocket, processChatWebSocketMessage } from '../../services/websocket'; +import { sendChatMessageViaWebSocket } from '../../services/websocket'; export default function ChatWindow({ chatId, knowledgeBaseId }) { const dispatch = useDispatch(); @@ -222,9 +222,12 @@ export default function ChatWindow({ chatId, knowledgeBaseId }) { console.log('发送消息参数:', requestBody); - // 同时通过WebSocket发送消息(测试) + // 创建WebSocket测试的AI回复消息ID - 必须先初始化 + const wsMessageId = `ws-${Date.now()}`; + let wsMessageContent = ''; + // 添加用户消息 - const userMessageId = Date.now().toString(); + const userMessageId = `user-${Date.now()}`; dispatch( addMessage({ id: userMessageId, @@ -234,10 +237,6 @@ export default function ChatWindow({ chatId, knowledgeBaseId }) { }) ); - // 创建WebSocket测试的AI回复消息ID - 必须先初始化 - const wsMessageId = `ws-${Date.now()}`; - let wsMessageContent = ''; - // 添加一个空白的临时消息用于WebSocket流式回复 dispatch( addMessage({ @@ -250,21 +249,23 @@ export default function ChatWindow({ chatId, knowledgeBaseId }) { }) ); + // 获取聊天资源 - 在用户消息发送后立即请求资源 + dispatch( + getChatResources({ + dataset_id_list, + question: inputMessage, + messageId: wsMessageId, // 将资源关联到助手消息 + }) + ); + sendChatMessageViaWebSocket(requestBody, (data) => { try { // 根据消息类型处理不同的响应 - - // 处理开始流式传输的消息 - if (data.message === '开始流式传输') { - console.log('WebSocket开始流式传输'); - // 消息已在上面创建,这里无需重复创建 - } - // 处理部分内容 if (data.message === 'partial') { const newText = data.data.content || ''; wsMessageContent += newText; - + wsMessageId = data.data.id; // 更新消息内容 - 使用完全替换而不是追加,确保React检测到变化 dispatch( updateMessage({ @@ -414,10 +415,11 @@ export default function ChatWindow({ chatId, knowledgeBaseId }) { )} - {/* 只在AI回复消息下方显示资源列表 */} + {/* 只在AI回复消息下方显示资源列表,仅当有内容时显示 */} {message.role === 'assistant' && !message.is_streaming && resources.messageId === message.id && + resources.status === 'succeeded' && resources.items.length > 0 && ( )}