import { CheckCircleFilled, QuestionCircleOutlined, SaveOutlined } from '@ant-design/icons';
import { Button, Card, Checkbox, Descriptions, Divider, InputNumber, Select, Slider, Spin, Tag, Tooltip } from 'antd';
import { useDatasetSettings, type SearchMethod } from '~/hooks/dify-dataset-manager/dataset-settings';
import type { DatasetSettingsProps } from '~/types/dify-dataset-manager/dataset-settings';
// 检索方式选项
const SEARCH_METHOD_OPTIONS: { label: string; value: SearchMethod; description: string }[] = [
{ label: '向量检索', value: 'semantic_search', description: '基于语义理解的智能检索,适合需要理解上下文的场景' },
{ label: '全文检索', value: 'full_text_search', description: '基于关键词匹配的传统检索方式' },
{ label: '混合检索', value: 'hybrid_search', description: '结合向量和全文检索,综合效果最佳' },
{ label: '关键字检索', value: 'keyword_search', description: '精确关键字匹配' },
];
/**
* 知识库设置组件
* 使用 Descriptions 展示只读的知识库基本信息,提供可编辑的检索设置
* 注:Dify API 不支持修改知识库名称和描述,故这些字段仅作只读展示
*/
export default function DatasetSettings({
dataset,
onDatasetUpdated,
}: DatasetSettingsProps) {
const {
saving,
hasChanges,
retrievalSettings,
handleSave,
handleReset,
updateRetrievalSettings,
} = useDatasetSettings(dataset, onDatasetUpdated);
// 是否需要显示 Reranking 提示(语义检索和混合检索需要,且强制开启)
const showRerankingInfo = retrievalSettings.searchMethod === 'semantic_search' || retrievalSettings.searchMethod === 'hybrid_search';
// 权重设置:由于 Reranking 强制开启,混合检索时由 Reranking 模型决定排序,不需要手动设置权重
// 所以这里始终不显示权重设置
const showWeightsOption = false;
if (!dataset) {
return (
);
}
return (
{/* 页面标题 */}
{/* 知识库基本信息 */}
知识库信息
}
>
{dataset.name}
{dataset.description && (
{dataset.description}
)}
{dataset.indexing_technique === 'high_quality' ? '高质量' : '经济'}
{dataset.document_count}
{dataset.word_count?.toLocaleString() || 0}
{new Date(dataset.created_at * 1000).toLocaleString('zh-CN')}
{new Date(dataset.updated_at * 1000).toLocaleString('zh-CN')}
{/* 检索设置卡片 */}
检索设置
{/* 检索方式 */}
{/* Reranking 设置(语义检索和混合检索时显示,默认开启不可关闭) */}
{showRerankingInfo && (
启用 Reranking 模型
)}
{/* 混合检索权重设置 */}
{showWeightsOption && (
关键词
updateRetrievalSettings('weights', value)}
min={0}
max={1}
step={0.1}
style={{ flex: 1 }}
/>
语义
updateRetrievalSettings('weights', value ?? 0.7)}
min={0}
max={1}
step={0.1}
size="small"
style={{ width: 70 }}
/>
)}
{/* Top K 设置 */}
updateRetrievalSettings('topK', value)}
min={1}
max={20}
style={{ flex: 1 }}
/>
updateRetrievalSettings('topK', value ?? 3)}
min={1}
max={20}
size="small"
style={{ width: 70 }}
/>
{/* Score 阈值设置(默认开启不可关闭,但可调节数值) */}
updateRetrievalSettings('scoreThreshold', value)}
min={0}
max={1}
step={0.01}
style={{ flex: 1 }}
/>
updateRetrievalSettings('scoreThreshold', value ?? 0.5)}
min={0}
max={1}
step={0.01}
size="small"
style={{ width: 70 }}
/>
{/* 操作按钮 */}
}
onClick={handleSave}
loading={saving}
disabled={!hasChanges}
>
保存
);
}