'use client'; import { useState } from 'react'; interface KnowledgeBaseProps { data: any; onChange: (data: any) => void; } export default function KnowledgeBase({ data, onChange }: KnowledgeBaseProps) { const [uploadedFiles, setUploadedFiles] = useState([ { id: 1, name: '产品手册.pdf', size: '2.4 MB', status: 'uploaded', type: 'pdf', chunks: 45, lastModified: '2024-01-15' }, { id: 2, name: '常见问题FAQ.docx', size: '856 KB', status: 'uploaded', type: 'docx', chunks: 23, lastModified: '2024-01-14' }, { id: 3, name: '技术文档.md', size: '1.2 MB', status: 'uploaded', type: 'md', chunks: 67, lastModified: '2024-01-13' }, ]); const [webSources, setWebSources] = useState([ { id: 1, url: 'https://docs.example.com', title: '官方文档', status: 'crawled', pages: 15, lastUpdate: '2024-01-15' }, { id: 2, url: 'https://help.example.com', title: '帮助中心', status: 'crawling', pages: 8, lastUpdate: '2024-01-14' } ]); const [manualContent, setManualContent] = useState(''); const [newUrl, setNewUrl] = useState(''); const [activeTab, setActiveTab] = useState('files'); const [processingSettings, setProcessingSettings] = useState({ autoChunk: true, smartDedup: true, generateSummary: false, chunkSize: 1000, overlap: 200 }); const knowledgeBases = [ { id: 'kb-001', name: '通用知识库', description: '包含基础常识和通用信息', items: 1240, isDefault: true }, { id: 'kb-002', name: '技术文档库', description: '技术相关的文档和资料', items: 567, isDefault: false }, { id: 'kb-003', name: '产品说明库', description: '产品相关的说明和手册', items: 892, isDefault: false }, { id: 'kb-004', name: '客服问答库', description: '客服常见问题和解答', items: 345, isDefault: false } ]; const [selectedKnowledgeBases, setSelectedKnowledgeBases] = useState(['kb-001']); const handleFileUpload = (event: React.ChangeEvent) => { 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 removeFile = (fileId: number) => { setUploadedFiles(prev => prev.filter(file => file.id !== fileId)); }; 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 removeWebSource = (sourceId: number) => { setWebSources(prev => prev.filter(source => source.id !== sourceId)); }; const toggleKnowledgeBase = (kbId: string) => { setSelectedKnowledgeBases(prev => prev.includes(kbId) ? prev.filter(id => id !== kbId) : [...prev, kbId] ); }; const addManualContent = () => { if (manualContent.trim()) { const newFile = { id: uploadedFiles.length + 1, name: `手动内容_${new Date().toLocaleTimeString()}`, size: `${Math.ceil(manualContent.length / 1024)} KB`, status: 'uploaded', type: 'text', chunks: Math.ceil(manualContent.length / processingSettings.chunkSize), lastModified: new Date().toISOString().split('T')[0] }; setUploadedFiles([...uploadedFiles, newFile]); setManualContent(''); } }; return (

知识库配置

为Agent配置知识来源,提升回答的准确性和专业性

{/* 选择现有知识库 */}

选择现有知识库

{knowledgeBases.map((kb) => (
toggleKnowledgeBase(kb.id)} className={`p-4 border rounded-lg cursor-pointer transition-all ${ selectedKnowledgeBases.includes(kb.id) ? 'border-blue-500 bg-blue-50' : 'border-gray-200 hover:border-gray-300' }`} >
{kb.name}
{kb.isDefault && ( 默认 )}

{kb.description}

{kb.items.toLocaleString()} 条记录

{selectedKnowledgeBases.includes(kb.id) && ( )}
))}
{/* 添加新内容 */}
{[ { key: 'files', label: '文件上传', icon: 'ri-file-line' }, { key: 'web', label: '网页抓取', icon: 'ri-global-line' }, { key: 'manual', label: '手动输入', icon: 'ri-edit-line' } ].map((tab) => ( ))}
{activeTab === 'files' && (

拖拽文件到此处,或者

支持 PDF, DOC, DOCX, TXT, MD, CSV, XLSX 格式,最大 50MB

)} {activeTab === 'web' && (
setNewUrl(e.target.value)} className="flex-1 px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm" />
支持抓取文档站点、博客文章、产品页面等,自动提取文本内容
)} {activeTab === 'manual' && (