From 5e06a681898413ac8274d4db10b8f61f98570c00 Mon Sep 17 00:00:00 2001 From: AI Clinical Dev Team Date: Sat, 11 Oct 2025 17:56:19 +0800 Subject: [PATCH] fix: AgentChatPage conversation data extraction issue --- frontend/src/pages/AgentChatPage.tsx | 111 ++++++++++++++++++++------- 重启所有服务.bat | 0 2 files changed, 82 insertions(+), 29 deletions(-) create mode 100644 重启所有服务.bat diff --git a/frontend/src/pages/AgentChatPage.tsx b/frontend/src/pages/AgentChatPage.tsx index 5d8823d2..af6415fd 100644 --- a/frontend/src/pages/AgentChatPage.tsx +++ b/frontend/src/pages/AgentChatPage.tsx @@ -15,18 +15,22 @@ const AgentChatPage = () => { const { currentProject } = useProjectStore() const { knowledgeBases, fetchKnowledgeBases } = useKnowledgeBaseStore() - // 智能体相关状? const [agent, setAgent] = useState(null) + // 智能体相关状态 + const [agent, setAgent] = useState(null) const [agentLoading, setAgentLoading] = useState(true) const [error, setError] = useState(null) - // 对话相关状? const [conversation, setConversation] = useState(null) + // 对话相关状态 + const [conversation, setConversation] = useState(null) const [messages, setMessages] = useState([]) const [selectedModel, setSelectedModel] = useState('deepseek-v3') - // 消息发送状? const [sending, setSending] = useState(false) + // 消息发送状态 + const [sending, setSending] = useState(false) const [streamingContent, setStreamingContent] = useState('') - // 加载智能体配? useEffect(() => { + // 加载智能体配置 + useEffect(() => { const fetchAgent = async () => { if (!agentId) return @@ -41,8 +45,8 @@ const AgentChatPage = () => { } } catch (err) { console.error('Failed to load agent:', err) - setError('加载智能体配置失?) - message.error('加载智能体配置失?) + setError('加载智能体配置失败') + message.error('加载智能体配置失败') } finally { setAgentLoading(false) } @@ -51,25 +55,46 @@ const AgentChatPage = () => { fetchAgent() }, [agentId]) - // 加载知识库列? useEffect(() => { + // 加载知识库列表 + useEffect(() => { fetchKnowledgeBases() + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) - // 创建或加载对? useEffect(() => { + // 创建或加载对话 + useEffect(() => { const initConversation = async () => { - if (!agent || !currentProject) return + console.log('🔷 [initConversation] 开始', { agent, currentProject }) + + if (!agent || !currentProject) { + console.warn('⚠️ [initConversation] agent或currentProject为空,跳过') + return + } try { - // 创建新对? const response = await conversationApi.createConversation({ + console.log('📞 [initConversation] 调用API创建对话') + // 创建新对话 + const response = await conversationApi.createConversation({ projectId: currentProject.id, agentId: agent.id, - title: `?{agent.name}的对话`, + title: `与${agent.name}的对话`, }) - setConversation(response.data.data || null) - setMessages([]) + console.log('✅ [initConversation] 对话创建成功', response) + console.log('📦 [initConversation] response:', response) + + // response 本身就是 ApiResponse + // response.data 是 Conversation | undefined + if (response.data) { + console.log('💾 [initConversation] 设置conversation为:', response.data) + setConversation(response.data as any) + setMessages([]) + } else { + console.error('❌ [initConversation] response.data为空') + message.error('创建对话失败:无数据返回') + } } catch (err) { - console.error('Failed to create conversation:', err) + console.error('❌ [initConversation] 创建对话失败:', err) message.error('创建对话失败') } } @@ -77,20 +102,38 @@ const AgentChatPage = () => { initConversation() }, [agent, currentProject]) - // 发送消息(流式? const handleSendMessage = async (content: string, knowledgeBaseIds: string[]) => { - if (!conversation || sending) return + // 发送消息(流式) + const handleSendMessage = async (content: string, knowledgeBaseIds: string[]) => { + console.log('🔵 [handleSendMessage] 开始', { content, knowledgeBaseIds, conversation, sending }) + + if (!conversation) { + console.error('❌ [handleSendMessage] conversation为空!') + message.error('对话未初始化,请刷新页面') + return + } + + if (sending) { + console.warn('⚠️ [handleSendMessage] 正在发送中,忽略本次请求') + return + } setSending(true) setStreamingContent('') - // 添加用户消息到列? const userMessage: Message = { + // 添加用户消息到列表 + const userMessage: Message = { id: `temp-${Date.now()}`, conversationId: conversation.id, role: 'user', content, createdAt: new Date().toISOString(), } - setMessages(prev => [...prev, userMessage]) + console.log('📝 [handleSendMessage] 添加用户消息', userMessage) + setMessages(prev => { + const newMessages = [...prev, userMessage] + console.log('📋 [handleSendMessage] 更新后的消息列表', newMessages) + return newMessages + }) try { let fullContent = '' @@ -109,7 +152,8 @@ const AgentChatPage = () => { }, // onComplete () => { - // 流式完成后,添加完整的助手消? const assistantMessage: Message = { + // 流式完成后,添加完整的助手消息 + const assistantMessage: Message = { id: `temp-assistant-${Date.now()}`, conversationId: conversation.id, role: 'assistant', @@ -131,7 +175,7 @@ const AgentChatPage = () => { ) } catch (err) { console.error('Failed to send message:', err) - message.error('发送消息失?) + message.error('发送消息失败') setStreamingContent('') setSending(false) } @@ -139,8 +183,15 @@ const AgentChatPage = () => { if (agentLoading) { return ( -
- +
+ +
+
) } @@ -149,7 +200,7 @@ const AgentChatPage = () => { return ( @@ -180,7 +231,7 @@ const AgentChatPage = () => { return (
- {/* 顶部工具?- 紧凑设计 */} + {/* 顶部工具栏 - 紧凑设计 */}
{
- {/* 模型选择?*/} + {/* 模型选择器 */} { flex: 1, display: 'flex', flexDirection: 'column', - minHeight: 0, // 重要:确保可以滚? overflow: 'hidden', + minHeight: 0, // 重要:确保可以滚动 + overflow: 'hidden', }}> {messages.length === 0 && !sending ? (
-
开始对话,我将为您提供专业的研究建?/div> +
开始对话,我将为您提供专业的研究建议
- 您可以直接输入问题,或使用@知识库功能引用文?
+ 您可以直接输入问题,或使用@知识库功能引用文献 +
) : ( @@ -251,7 +304,7 @@ const AgentChatPage = () => { onSend={handleSendMessage} loading={sending} knowledgeBases={knowledgeBases} - placeholder={`?{agent.name}提问...(Shift+Enter换行,Enter发送)`} + placeholder={`向${agent.name}提问...(Shift+Enter换行,Enter发送)`} />
diff --git a/重启所有服务.bat b/重启所有服务.bat new file mode 100644 index 00000000..e69de29b