From 7ce3acd7718cde3a8763bb57d8e0f67ea0f91d65 Mon Sep 17 00:00:00 2001
From: PingChuan <1259732256@qq.com>
Date: Tue, 9 Dec 2025 16:53:24 +0800
Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E6=B8=85=E9=99=A4=E4=B8=80?=
=?UTF-8?q?=E4=BA=9B=E5=85=B3=E4=BA=8E=E9=80=9A=E8=BF=87api=E6=8E=A5?=
=?UTF-8?q?=E5=85=A5dify=E4=B8=8D=E6=94=AF=E6=8C=81=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../area-dataset-config.tsx | 4 +-
.../dify-dataset-manager/dataset-settings.tsx | 116 ++++++++----------
.../dify-dataset-manager/dataset-settings.ts | 91 ++++++--------
3 files changed, 91 insertions(+), 120 deletions(-)
diff --git a/app/components/dify-dataset-manager/area-dataset-config.tsx b/app/components/dify-dataset-manager/area-dataset-config.tsx
index b611f34..0ecf43f 100644
--- a/app/components/dify-dataset-manager/area-dataset-config.tsx
+++ b/app/components/dify-dataset-manager/area-dataset-config.tsx
@@ -594,7 +594,7 @@ export default function AreaDatasetConfig() {
{/* 知识库描述 */}
-
diff --git a/app/components/dify-dataset-manager/dataset-settings.tsx b/app/components/dify-dataset-manager/dataset-settings.tsx
index af651ac..53df97f 100644
--- a/app/components/dify-dataset-manager/dataset-settings.tsx
+++ b/app/components/dify-dataset-manager/dataset-settings.tsx
@@ -1,10 +1,8 @@
-import { Form, Input, Button, Card, Spin, Divider, Select, Slider, InputNumber, Tooltip, Checkbox } from 'antd';
-import { SaveOutlined, QuestionCircleOutlined, CheckCircleFilled } from '@ant-design/icons';
+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 { TextArea } = Input;
-
// 检索方式选项
const SEARCH_METHOD_OPTIONS: { label: string; value: SearchMethod; description: string }[] = [
{ label: '向量检索', value: 'semantic_search', description: '基于语义理解的智能检索,适合需要理解上下文的场景' },
@@ -15,23 +13,21 @@ const SEARCH_METHOD_OPTIONS: { label: string; value: SearchMethod; description:
/**
* 知识库设置组件
- * 用于修改知识库名称和描述
+ * 使用 Descriptions 展示只读的知识库基本信息,提供可编辑的检索设置
+ * 注:Dify API 不支持修改知识库名称和描述,故这些字段仅作只读展示
*/
export default function DatasetSettings({
dataset,
onDatasetUpdated,
}: DatasetSettingsProps) {
- const [form] = Form.useForm();
-
const {
saving,
hasChanges,
retrievalSettings,
- handleValuesChange,
handleSave,
handleReset,
updateRetrievalSettings,
- } = useDatasetSettings(dataset, form, onDatasetUpdated);
+ } = useDatasetSettings(dataset, onDatasetUpdated);
// 是否需要显示 Reranking 提示(语义检索和混合检索需要,且强制开启)
const showRerankingInfo = retrievalSettings.searchMethod === 'semantic_search' || retrievalSettings.searchMethod === 'hybrid_search';
@@ -53,66 +49,56 @@ export default function DatasetSettings({
设置
- 管理知识库的基本信息
+ 管理知识库的基本信息和检索配置
- {/* 设置表单 */}
-
-
+
+ {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')}
+
+
{/* 检索设置卡片 */}
diff --git a/app/hooks/dify-dataset-manager/dataset-settings.ts b/app/hooks/dify-dataset-manager/dataset-settings.ts
index 0409ab3..ea73e89 100644
--- a/app/hooks/dify-dataset-manager/dataset-settings.ts
+++ b/app/hooks/dify-dataset-manager/dataset-settings.ts
@@ -1,8 +1,7 @@
-import { useState, useEffect, useCallback } from 'react';
import { message } from 'antd';
-import type { FormInstance } from 'antd';
+import { useCallback, useEffect, useState } from 'react';
+import { fetchDataset, updateDatasetSettings } from '~/api/dify-dataset/api/datasetApi';
import type { Dataset, RetrievalModel } from '~/api/dify-dataset/type/datasetTypes';
-import { updateDatasetSettings, fetchDataset } from '~/api/dify-dataset/api/datasetApi';
import { DIFY_CONFIG } from '~/config/api-config';
/**
@@ -75,10 +74,10 @@ function formValuesToRetrievalModel(values: RetrievalSettingsFormValues): Retrie
/**
* 知识库设置状态管理 Hook
+ * 注:Dify API 不支持修改知识库名称和描述,只支持修改检索设置
*/
export function useDatasetSettings(
dataset: Dataset | null,
- form: FormInstance,
onDatasetUpdated: (dataset: Dataset) => void
) {
const [saving, setSaving] = useState(false);
@@ -89,18 +88,36 @@ export function useDatasetSettings(
() => retrievalModelToFormValues(dataset?.retrieval_model_dict)
);
- // 初始化表单数据
+ // 原始检索设置,用于对比变化
+ const [originalSettings, setOriginalSettings] = useState
(
+ () => retrievalModelToFormValues(dataset?.retrieval_model_dict)
+ );
+
+ // 初始化检索设置
useEffect(() => {
if (dataset) {
- form.setFieldsValue({
- name: dataset.name,
- description: dataset.description || '',
- });
console.log('[DatasetSettings] 初始化检索设置, retrieval_model_dict:', dataset.retrieval_model_dict);
- setRetrievalSettings(retrievalModelToFormValues(dataset.retrieval_model_dict));
+ const settings = retrievalModelToFormValues(dataset.retrieval_model_dict);
+ setRetrievalSettings(settings);
+ setOriginalSettings(settings);
setHasChanges(false);
}
- }, [dataset, form]);
+ }, [dataset]);
+
+ /**
+ * 检查检索设置是否有变化
+ */
+ const checkRetrievalChanges = useCallback((newSettings: RetrievalSettingsFormValues) => {
+ const hasChanged =
+ newSettings.searchMethod !== originalSettings.searchMethod ||
+ newSettings.topK !== originalSettings.topK ||
+ newSettings.scoreThresholdEnabled !== originalSettings.scoreThresholdEnabled ||
+ newSettings.scoreThreshold !== originalSettings.scoreThreshold ||
+ newSettings.rerankingEnable !== originalSettings.rerankingEnable ||
+ newSettings.weights !== originalSettings.weights;
+
+ setHasChanges(hasChanged);
+ }, [originalSettings]);
/**
* 更新检索设置
@@ -112,40 +129,14 @@ export function useDatasetSettings(
setRetrievalSettings(prev => {
const newSettings = { ...prev, [key]: value };
// 检查是否有变化
- checkForChanges(newSettings);
+ checkRetrievalChanges(newSettings);
return newSettings;
});
- }, [dataset]);
-
- /**
- * 检查是否有变化
- */
- const checkForChanges = useCallback((newRetrievalSettings?: RetrievalSettingsFormValues) => {
- const values = form.getFieldsValue();
- const currentRetrieval = newRetrievalSettings || retrievalSettings;
- const originalRetrieval = retrievalModelToFormValues(dataset?.retrieval_model_dict);
-
- const nameChanged = values.name !== dataset?.name;
- const retrievalChanged =
- currentRetrieval.searchMethod !== originalRetrieval.searchMethod ||
- currentRetrieval.topK !== originalRetrieval.topK ||
- currentRetrieval.scoreThresholdEnabled !== originalRetrieval.scoreThresholdEnabled ||
- currentRetrieval.scoreThreshold !== originalRetrieval.scoreThreshold ||
- currentRetrieval.rerankingEnable !== originalRetrieval.rerankingEnable ||
- currentRetrieval.weights !== originalRetrieval.weights;
-
- setHasChanges(nameChanged || retrievalChanged);
- }, [form, dataset, retrievalSettings]);
-
- /**
- * 处理表单值变化
- */
- const handleValuesChange = useCallback(() => {
- checkForChanges();
- }, [checkForChanges]);
+ }, [checkRetrievalChanges]);
/**
* 保存设置
+ * 注:仅保存检索设置,Dify API 不支持修改名称和描述
*/
const handleSave = useCallback(async () => {
if (!dataset) {
@@ -154,12 +145,10 @@ export function useDatasetSettings(
}
try {
- const values = await form.validateFields();
setSaving(true);
- // 构建完整的更新请求
+ // 仅更新检索设置
await updateDatasetSettings(dataset.id, {
- name: values.name,
retrieval_model: formValuesToRetrievalModel(retrievalSettings),
});
@@ -167,8 +156,9 @@ export function useDatasetSettings(
const fullDataset = await fetchDataset(dataset.id);
console.log('[DatasetSettings] 保存后获取完整数据:', fullDataset);
- message.success('保存成功');
+ message.success('检索设置保存成功');
onDatasetUpdated(fullDataset);
+ setOriginalSettings(retrievalSettings);
setHasChanges(false);
} catch (err: any) {
console.error('保存设置失败:', err);
@@ -176,21 +166,17 @@ export function useDatasetSettings(
} finally {
setSaving(false);
}
- }, [dataset, form, retrievalSettings, onDatasetUpdated]);
+ }, [dataset, retrievalSettings, onDatasetUpdated]);
/**
- * 重置表单
+ * 重置检索设置
*/
const handleReset = useCallback(() => {
if (dataset) {
- form.setFieldsValue({
- name: dataset.name,
- description: dataset.description || '',
- });
- setRetrievalSettings(retrievalModelToFormValues(dataset.retrieval_model_dict));
+ setRetrievalSettings(originalSettings);
setHasChanges(false);
}
- }, [dataset, form]);
+ }, [dataset, originalSettings]);
return {
// 状态
@@ -199,7 +185,6 @@ export function useDatasetSettings(
retrievalSettings,
// 方法
- handleValuesChange,
handleSave,
handleReset,
updateRetrievalSettings,