import React, { useState } from 'react'; import { Search, Bookmark, BookmarkCheck, Copy, Download, MessageSquare, Bot, History, Calendar, Filter, ChevronDown, GitCompare, FileText, ArrowRight, X, Star, CheckCircle, AlertCircle, Send, } from 'lucide-react'; import { useTheme } from '../contexts/ThemeContext'; import { PageType } from '../components/Sidebar'; type RecordType = 'all' | 'general' | 'agent'; type ModeType = 'all' | 'single-round' | 'multi-round' | 'deep-search' | 'compare'; type CollectionStatus = 'all' | 'collected'; interface QARecord { id: string; type: 'general' | 'agent'; mode: 'single-round' | 'multi-round' | 'deep-search' | 'compare'; question: string; answer: string; agentName?: string; createTime: Date; isCollected: boolean; isHighValue: boolean; isReusable: boolean; isConvertible: boolean; notes?: string; evaluation?: string; sources?: string[]; } const QARecords: React.FC<{ onNavigate: (page: PageType) => void }> = ({ onNavigate }) => { const { theme } = useTheme(); const isDark = theme === 'dark'; // 模拟问答记录数据 const mockRecords: QARecord[] = [ { id: '1', type: 'general', mode: 'compare', question: 'RAG技术的工作原理是什么?', answer: '单轮RAG回答:直接检索并生成答案,响应速度快...', createTime: new Date('2026-03-19 14:30'), isCollected: true, isHighValue: true, isReusable: true, isConvertible: true, sources: ['RAG技术白皮书', 'LLM应用实践'], }, { id: '2', type: 'agent', mode: 'single-round', question: '目标受众应如何分层?', answer: '基于受众分析智能体的专业能力,识别出核心受众特征...', agentName: 'AudienceAgent', createTime: new Date('2026-03-19 10:20'), isCollected: false, isHighValue: true, isReusable: true, isConvertible: true, }, { id: '3', type: 'general', mode: 'deep-search', question: '品牌年轻化传播策略有哪些?', answer: '通过深度检索分析,总结出以下品牌年轻化传播策略...', createTime: new Date('2026-03-18 16:45'), isCollected: true, isHighValue: false, isReusable: false, isConvertible: false, notes: '需要进一步补充具体案例', }, { id: '4', type: 'agent', mode: 'multi-round', question: '如何制定有效的用户激活策略?', answer: '通过多轮对话深入分析,制定以下用户激活策略...', agentName: 'ChannelAgent', createTime: new Date('2026-03-18 11:15'), isCollected: false, isHighValue: true, isReusable: true, isConvertible: true, evaluation: '策略实用性强,建议转化任务执行', }, { id: '5', type: 'general', mode: 'single-round', question: '内容营销的最佳实践是什么?', answer: '内容营销最佳实践包括:明确目标受众、创造高质量内容...', createTime: new Date('2026-03-17 09:00'), isCollected: false, isHighValue: false, isReusable: true, isConvertible: false, }, ]; // 状态 const [records, setRecords] = useState(mockRecords); const [selectedRecord, setSelectedRecord] = useState(mockRecords[0]); const [searchQuery, setSearchQuery] = useState(''); const [recordType, setRecordType] = useState('all'); const [modeType, setModeType] = useState('all'); const [collectionStatus, setCollectionStatus] = useState('all'); const [timeRange, setTimeRange] = useState('all'); const [notesInput, setNotesInput] = useState(''); // 筛选记录 const filteredRecords = records.filter((record) => { // 搜索过滤 if (searchQuery && !record.question.toLowerCase().includes(searchQuery.toLowerCase())) { return false; } // 类型过滤 if (recordType !== 'all' && record.type !== recordType) { return false; } // 模式过滤 if (modeType !== 'all' && record.mode !== modeType) { return false; } // 收藏状态过滤 if (collectionStatus === 'collected' && !record.isCollected) { return false; } return true; }); // 获取模式标签 const getModeLabel = (mode: QARecord['mode']) => { switch (mode) { case 'single-round': return '单轮RAG'; case 'multi-round': return '多轮RAG'; case 'deep-search': return '深度检索'; case 'compare': return '对比'; } }; // 获取模式颜色 const getModeColor = (mode: QARecord['mode']) => { switch (mode) { case 'single-round': return isDark ? 'bg-blue-600/30 text-blue-400' : 'bg-blue-100 text-blue-600'; case 'multi-round': return isDark ? 'bg-green-600/30 text-green-400' : 'bg-green-100 text-green-600'; case 'deep-search': return isDark ? 'bg-purple-600/30 text-purple-400' : 'bg-purple-100 text-purple-600'; case 'compare': return isDark ? 'bg-orange-600/30 text-orange-400' : 'bg-orange-100 text-orange-600'; } }; // 切换收藏 const toggleCollect = (recordId: string) => { setRecords(records.map(record => record.id === recordId ? { ...record, isCollected: !record.isCollected } : record )); if (selectedRecord?.id === recordId) { setSelectedRecord({ ...selectedRecord, isCollected: !selectedRecord.isCollected }); } }; // 复制问题 const copyQuestion = (question: string) => { navigator.clipboard.writeText(question); alert('问题已复制'); }; // 导出记录 const exportRecord = (record: QARecord) => { alert(`导出记录: ${record.question.substring(0, 20)}...`); }; // 转到任务 const convertToTask = (record: QARecord, taskType: 'single' | 'consult' | 'scene') => { const messages = { single: '单智能体任务', consult: '多智能体会商', scene: '场景任务', }; alert(`已转为${messages[taskType]}`); }; // 格式化时间 const formatTime = (date: Date) => { const now = new Date(); const diff = now.getTime() - date.getTime(); const days = Math.floor(diff / (1000 * 60 * 60 * 24)); if (days === 0) { return `今天 ${date.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })}`; } else if (days === 1) { return `昨天 ${date.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })}`; } else if (days < 7) { return `${days}天前`; } else { return date.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric' }); } }; return (
{/* 顶部筛选栏 */}

问答记录

查看历史问答、对比结果与高价值记录
{/* 筛选控件 */}
{/* 搜索框 */}
setSearchQuery(e.target.value)} placeholder="搜索问题关键词..." className={`w-64 pl-10 pr-4 py-2 rounded-lg text-sm focus:outline-none ${ isDark ? 'bg-transparent text-white placeholder-slate-500' : 'bg-transparent text-gray-800 placeholder-gray-400' }`} />
{/* 记录类型 */}
{/* 模式 */}
{/* 收藏状态 */}
{/* 时间范围 */}
{/* 主体内容区 */}
{/* 左侧记录列表 */}
{filteredRecords.map((record) => ( ))}
{filteredRecords.length === 0 && (

暂无匹配记录

)}
{/* 中间记录详情 */}
{selectedRecord ? (
{/* 问题 */}
问题

{selectedRecord.question}

{/* 回答 */}
{selectedRecord.type === 'general' ? 'RAG回答' : '智能体回答'} {getModeLabel(selectedRecord.mode)} {selectedRecord.agentName && ( {selectedRecord.agentName} )}

{selectedRecord.answer}

{/* 来源摘要 */} {selectedRecord.sources && selectedRecord.sources.length > 0 && (
来源摘要
{selectedRecord.sources.map((source, idx) => ( {source} ))}
)} {/* 评价 */} {selectedRecord.evaluation && (
人工评价

{selectedRecord.evaluation}

)}
) : (

选择一条记录查看详情

)}
{/* 右侧操作与标签区 */}
{selectedRecord ? ( <> {/* 记录标签 */}

记录标签

{/* 操作按钮 */}

操作

{/* 转任务 */} {selectedRecord.isConvertible && (

转为任务

)} {/* 备注 */}

备注