import React, { useState } from 'react'; import { CheckCircle, ChevronLeft, ChevronRight, History, MessageCircle, Users } from 'lucide-react'; import { useTheme } from '../../contexts/ThemeContext'; import { PageType } from '../../components/Sidebar'; import { ChatMessage, EmptyChatState, QAComposer, TypingIndicator } from './QACommon'; interface CollaborativeQAProps { onNavigate: (page: PageType) => void; } interface CollaborativeMessage { id: string; role: 'user' | 'assistant'; content: string; timestamp: Date; agentName?: string; } const collaborativeAgents = [ { id: 'goal-agent', name: 'GoalAgent', category: '目标规划', color: 'blue' }, { id: 'audience-agent', name: 'AudienceAgent', category: '受众分析', color: 'green' }, { id: 'risk-agent', name: 'RiskAgent', category: '风险识别', color: 'purple' }, ]; /** * 多智能体协同问答组件 * 多个智能体从不同视角联合分析问题,生成综合建议 * @param onNavigate - 页面导航函数 */ const CollaborativeQA: React.FC = ({ onNavigate }) => { const { theme } = useTheme(); const isDark = theme === 'dark'; const [messages, setMessages] = useState([]); const [inputValue, setInputValue] = useState(''); const [isLoading, setIsLoading] = useState(false); const [selectedAgents, setSelectedAgents] = useState(collaborativeAgents.map((agent) => agent.id)); const [isLeftSidebarCollapsed, setIsLeftSidebarCollapsed] = useState(false); const activeAgents = collaborativeAgents.filter((agent) => selectedAgents.includes(agent.id)); const handleSend = () => { if (!inputValue.trim()) return; const userMessage: CollaborativeMessage = { id: `user-${Date.now()}`, role: 'user', content: inputValue, timestamp: new Date(), }; setMessages((prev) => [...prev, userMessage]); setInputValue(''); setIsLoading(true); setTimeout(() => { const agentNames = activeAgents.map((agent) => agent.name).join('、'); const assistantMessage: CollaborativeMessage = { id: `assistant-${Date.now()}`, role: 'assistant', content: `已组织 ${agentNames || '默认协同组'} 完成一轮联合研判:\n\n1. GoalAgent 建议先明确任务目标与阶段性 KPI,避免讨论发散。\n2. AudienceAgent 认为应优先锁定核心受众画像,并补充行为触点数据。\n3. RiskAgent 提醒需要同步评估内容合规、舆情扩散和资源约束。\n\n综合建议:先形成“目标-受众-风险”三列表,再进入方案细化与执行拆解。`, timestamp: new Date(), agentName: '协同编排助手', }; setMessages((prev) => [...prev, assistantMessage]); setIsLoading(false); }, 1800); }; const handleStop = () => { setIsLoading(false); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } }; const toggleAgent = (agentId: string) => { setSelectedAgents((prev) => prev.includes(agentId) ? prev.filter((id) => id !== agentId) : [...prev, agentId] ); }; return (

多智能体协同问答

多角色联合研判、共识汇总与风险补充
{messages.length === 0 ? ( } title="发起一次协同会商" description="输入任务背景,多个智能体会从不同视角生成联合建议" /> ) : ( messages.map((message) => ( )) )} {isLoading && }
alert('问答记录已保存')} onCollect={() => alert('已添加到收藏')} isLoading={isLoading} placeholder="输入协同研判主题或任务背景..." showUpload={false} />
); }; export default CollaborativeQA;