import { Input, Button, InputNumber, Checkbox, Card, Empty, Spin, Divider, Tooltip, Progress, } from 'antd'; import { QuestionCircleOutlined, ReloadOutlined, EyeOutlined, } from '@ant-design/icons'; import { useDocumentDetail } from '~/hooks/dify-dataset-manager/document-detail'; import type { DocumentDetailProps } from '~/types/dify-dataset-manager/document-detail'; import { INDEXING_STATUS_CONFIG } from '~/types/dify-dataset-manager/document-detail'; /** * 文档详情组件 * 显示文档的分段设置,支持修改并重新处理 */ export default function DocumentDetail({ datasetId, document, }: DocumentDetailProps) { const { settings, previewSegments, previewLoading, showPreview, saving, isProcessing, indexingStatus, updateSettings, handleReset, handlePreview, handleSaveAndProcess, } = useDocumentDetail(datasetId, document); if (!document) { return (
); } return (
{/* 左侧设置区域 */}
{/* 分段设置 */}

分段设置

{/* 分块模式 */} {/*
通用 通用文本分块模式,检索和召回的块是相同的
*/} {/* 分段标识符 */}
updateSettings('separator', e.target.value)} placeholder="\n\n" disabled={isProcessing} className="setting-input" />
{/* 分段最大长度 */}
updateSettings('maxTokens', value || 500)} min={100} max={4000} disabled={isProcessing} className="setting-input-number" /> characters
{/* 分段重叠长度 */}
updateSettings('chunkOverlap', value || 50)} min={0} max={500} disabled={isProcessing} className="setting-input-number" /> characters
{/* 文本预处理规则 */}

文本预处理规则

updateSettings('removeExtraSpaces', e.target.checked)} disabled={isProcessing} > 替换掉连续的空格、换行符和制表符 updateSettings('removeUrlsEmails', e.target.checked)} disabled={isProcessing} > 删除所有 URL 和电子邮件地址
{/* 索引方式 */}

索引方式

!isProcessing && updateSettings('indexingTechnique', 'high_quality')} > 高质量 推荐
!isProcessing && updateSettings('indexingTechnique', 'economy')} > 经济
{/* 操作按钮 */}
{/* 保存并处理按钮 */}
{/* 右侧预览区域 */}
预览
{document.name}
{showPreview ? `${previewSegments.length} 段块` : '0 段块'}
} className="preview-card" > {/* 处理进度显示 */} {isProcessing && indexingStatus && (
正在处理文档...
{INDEXING_STATUS_CONFIG[indexingStatus]?.text || '处理中...'}
)} {/* 预览内容 */} {!isProcessing && ( <> {previewLoading ? (
加载中...
) : !showPreview ? (

点击左侧的"预览块"按钮来预览

) : previewSegments.length === 0 ? ( ) : (
{previewSegments.map((segment, index) => (
#{index + 1} {segment.word_count} 字符
{segment.content}
))}
)} )}
); }