'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; export default function KnowledgeBuilder() { const router = useRouter(); const [currentStep, setCurrentStep] = useState(0); const [knowledgeData, setKnowledgeData] = useState({ name: '', description: '', category: 'general', isPublic: false, tags: [], files: [], webSources: [], manualContent: '', processingSettings: { autoChunk: true, smartDedup: true, generateSummary: false, chunkSize: 1000, overlap: 200 } }); const [uploadedFiles, setUploadedFiles] = useState([]); const [webSources, setWebSources] = useState([]); const [newUrl, setNewUrl] = useState(''); const [activeTab, setActiveTab] = useState('files'); const steps = [ { id: 0, name: '基本信息', icon: 'ri-information-line' }, { id: 1, name: '内容添加', icon: 'ri-file-add-line' }, { id: 2, name: '处理配置', icon: 'ri-settings-3-line' }, { id: 3, name: '预览测试', icon: 'ri-eye-line' } ]; const categories = [ { key: 'general', label: '通用知识', icon: 'ri-book-line' }, { key: 'tech', label: '技术文档', icon: 'ri-code-line' }, { key: 'product', label: '产品说明', icon: 'ri-product-hunt-line' }, { key: 'service', label: '客服问答', icon: 'ri-customer-service-line' }, { key: 'legal', label: '法务合规', icon: 'ri-scales-line' }, { key: 'sales', label: '销售材料', icon: 'ri-line-chart-line' } ]; const handleNext = () => { if (currentStep < steps.length - 1) { setCurrentStep(currentStep + 1); } }; const handlePrev = () => { if (currentStep > 0) { setCurrentStep(currentStep - 1); } }; const handleSave = () => { console.log('保存知识库:', knowledgeData); router.push('/knowledge'); }; const handlePublish = () => { console.log('发布知识库:', knowledgeData); router.push('/knowledge'); }; const handleFileUpload = (event) => { const files = Array.from(event.target.files || []); const newFiles = files.map((file, index) => ({ id: uploadedFiles.length + index + 1, name: file.name, size: `${(file.size / 1024 / 1024).toFixed(1)} MB`, status: 'uploading', type: file.name.split('.').pop() || 'unknown', chunks: 0, lastModified: new Date().toISOString().split('T')[0] })); setUploadedFiles([...uploadedFiles, ...newFiles]); setTimeout(() => { setUploadedFiles(prev => prev.map(file => newFiles.some(nf => nf.id === file.id) ? { ...file, status: 'uploaded', chunks: Math.floor(Math.random() * 50) + 10 } : file )); }, 2000); }; const addWebSource = () => { if (newUrl) { const newSource = { id: webSources.length + 1, url: newUrl, title: '正在获取标题...', status: 'crawling', pages: 0, lastUpdate: new Date().toISOString().split('T')[0] }; setWebSources([...webSources, newSource]); setNewUrl(''); setTimeout(() => { setWebSources(prev => prev.map(source => source.id === newSource.id ? { ...source, status: 'crawled', title: `${newUrl.split('/')[2]} - 文档`, pages: Math.floor(Math.random() * 20) + 5 } : source )); }, 3000); } }; const renderStepContent = () => { switch (currentStep) { case 0: return (
拖拽文件到此处,或者
支持 PDF、DOC、DOCX、TXT、MD、CSV、XLSX 格式,单文件最大 50MB
• 支持抓取文档站点、博客文章、产品页面等
• 自动识别并提取页面文本内容
• 支持批量抓取同站点多个页面
将长文档自动分割为合适大小的片段
自动识别并合并重复或相似内容
为每个内容片段生成简要摘要