From b34311f5268f88993d39c6618cdb546eb1a357ab Mon Sep 17 00:00:00 2001 From: dreamer6680 <146868355@qq.com> Date: Sat, 24 May 2025 19:16:56 +0800 Subject: [PATCH 1/9] add feishuKonwledge dataset --- packages/global/core/dataset/api.d.ts | 3 +- packages/global/core/dataset/apiDataset.d.ts | 8 +- packages/global/core/dataset/constants.ts | 14 +- packages/global/core/dataset/type.d.ts | 10 +- .../service/core/dataset/apiDataset/index.ts | 18 +- .../service/core/dataset/collection/utils.ts | 3 +- .../dataset/feishuKnowledgeDataset/api.ts | 356 ++++++++++++++++++ .../api.ts | 14 +- packages/service/core/dataset/read.ts | 23 +- packages/service/core/dataset/schema.ts | 3 +- .../web/components/common/Icon/constants.ts | 11 +- .../dataset/feishuKnowledgeDatasetColor.svg | 1 + .../dataset/feishuKnowledgeDatasetOutline.svg | 1 + ...tColor.svg => feishuShareDatasetColor.svg} | 0 ...line.svg => feishuShareDatasetOutline.svg} | 0 packages/web/i18n/en/dataset.json | 9 +- packages/web/i18n/zh-CN/dataset.json | 9 +- packages/web/i18n/zh-Hant/dataset.json | 9 +- projects/app/src/global/core/dataset/api.d.ts | 8 +- .../pageComponents/dataset/ApiDatasetForm.tsx | 93 +++-- .../dataset/detail/CollectionCard/Header.tsx | 3 +- .../Info/components/EditApiServiceModal.tsx | 8 +- .../dataset/detail/Info/index.tsx | 35 +- .../dataset/list/CreateModal.tsx | 13 +- .../pageComponents/dataset/list/SideTag.tsx | 10 +- .../api/core/dataset/apiDataset/getCatalog.ts | 20 +- .../core/dataset/apiDataset/getPathNames.ts | 36 +- .../pages/api/core/dataset/apiDataset/list.ts | 6 +- .../collection/create/apiCollection.ts | 6 +- .../collection/create/reTrainingCollection.ts | 3 +- .../pages/api/core/dataset/collection/read.ts | 6 +- .../app/src/pages/api/core/dataset/create.ts | 8 +- .../app/src/pages/api/core/dataset/detail.ts | 13 +- .../api/core/dataset/file/getPreviewChunks.ts | 3 +- .../app/src/pages/api/core/dataset/update.ts | 22 +- projects/app/src/pages/dataset/list/index.tsx | 18 +- .../dataset/context/datasetPageContext.tsx | 15 +- 37 files changed, 691 insertions(+), 127 deletions(-) create mode 100644 packages/service/core/dataset/feishuKnowledgeDataset/api.ts rename packages/service/core/dataset/{feishuDataset => feishuShareDataset}/api.ts (94%) create mode 100644 packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg create mode 100644 packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg rename packages/web/components/common/Icon/icons/core/dataset/{feishuDatasetColor.svg => feishuShareDatasetColor.svg} (100%) rename packages/web/components/common/Icon/icons/core/dataset/{feishuDatasetOutline.svg => feishuShareDatasetOutline.svg} (100%) diff --git a/packages/global/core/dataset/api.d.ts b/packages/global/core/dataset/api.d.ts index 92dc32ed375e..e5b20e3f6237 100644 --- a/packages/global/core/dataset/api.d.ts +++ b/packages/global/core/dataset/api.d.ts @@ -26,7 +26,8 @@ export type DatasetUpdateBody = { defaultPermission?: DatasetSchemaType['defaultPermission']; apiServer?: DatasetSchemaType['apiServer']; yuqueServer?: DatasetSchemaType['yuqueServer']; - feishuServer?: DatasetSchemaType['feishuServer']; + feishuShareServer?: DatasetSchemaType['feishuShareServer']; + feishuKnowledgeServer?: DatasetSchemaType['feishuKnowledgeServer']; chunkSettings?: DatasetSchemaType['chunkSettings']; // sync schedule diff --git a/packages/global/core/dataset/apiDataset.d.ts b/packages/global/core/dataset/apiDataset.d.ts index 524b18674ef4..ca2cdd75365a 100644 --- a/packages/global/core/dataset/apiDataset.d.ts +++ b/packages/global/core/dataset/apiDataset.d.ts @@ -17,11 +17,17 @@ export type APIFileServer = { authorization?: string; basePath?: string; }; -export type FeishuServer = { +export type FeishuShareServer = { appId: string; appSecret?: string; folderToken: string; }; +export type FeishuKnowledgeServer = { + appId: string; + appSecret: string; + basePath?: string; +}; + export type YuqueServer = { userId: string; token?: string; diff --git a/packages/global/core/dataset/constants.ts b/packages/global/core/dataset/constants.ts index 25acca5632fc..f9bd8ba14ad6 100644 --- a/packages/global/core/dataset/constants.ts +++ b/packages/global/core/dataset/constants.ts @@ -7,7 +7,8 @@ export enum DatasetTypeEnum { websiteDataset = 'websiteDataset', // depp link externalFile = 'externalFile', apiDataset = 'apiDataset', - feishu = 'feishu', + feishuShare = 'feishuShare', + feishuKnowledge = 'feishuKnowledge', yuque = 'yuque' } export const DatasetTypeMap = { @@ -36,9 +37,14 @@ export const DatasetTypeMap = { label: i18nT('dataset:api_file'), collectionLabel: i18nT('common:File') }, - [DatasetTypeEnum.feishu]: { - icon: 'core/dataset/feishuDatasetOutline', - label: i18nT('dataset:feishu_dataset'), + [DatasetTypeEnum.feishuShare]: { + icon: 'core/dataset/feishuShareDatasetOutline', + label: i18nT('dataset:feishu_share_dataset'), + collectionLabel: i18nT('common:File') + }, + [DatasetTypeEnum.feishuKnowledge]: { + icon: 'core/dataset/feishuKnowledgeDatasetOutline', + label: i18nT('dataset:feishu_knowledge_dataset'), collectionLabel: i18nT('common:File') }, [DatasetTypeEnum.yuque]: { diff --git a/packages/global/core/dataset/type.d.ts b/packages/global/core/dataset/type.d.ts index f3424eaa3fc7..0bacf0d5e04b 100644 --- a/packages/global/core/dataset/type.d.ts +++ b/packages/global/core/dataset/type.d.ts @@ -13,7 +13,12 @@ import type { ChunkTriggerConfigTypeEnum } from './constants'; import type { DatasetPermission } from '../../support/permission/dataset/controller'; -import type { APIFileServer, FeishuServer, YuqueServer } from './apiDataset'; +import type { + APIFileServer, + FeishuShareServer, + YuqueServer, + FeishuKnowledgeServer +} from './apiDataset'; import type { SourceMemberType } from 'support/user/type'; import type { DatasetDataIndexTypeEnum } from './data/constants'; @@ -73,8 +78,9 @@ export type DatasetSchemaType = { inheritPermission: boolean; apiServer?: APIFileServer; - feishuServer?: FeishuServer; + feishuShareServer?: FeishuShareServer; yuqueServer?: YuqueServer; + feishuKnowledgeServer?: FeishuKnowledgeServer; // abandon autoSync?: boolean; diff --git a/packages/service/core/dataset/apiDataset/index.ts b/packages/service/core/dataset/apiDataset/index.ts index 79af379c4490..dbea80cfed7c 100644 --- a/packages/service/core/dataset/apiDataset/index.ts +++ b/packages/service/core/dataset/apiDataset/index.ts @@ -1,18 +1,21 @@ import type { APIFileServer, YuqueServer, - FeishuServer + FeishuShareServer, + FeishuKnowledgeServer } from '@fastgpt/global/core/dataset/apiDataset'; import { useApiDatasetRequest } from './api'; import { useYuqueDatasetRequest } from '../yuqueDataset/api'; -import { useFeishuDatasetRequest } from '../feishuDataset/api'; +import { useFeishuShareDatasetRequest } from '../feishuShareDataset/api'; +import { useFeishuKnowledgeDatasetRequest } from '../feishuKnowledgeDataset/api'; export const getApiDatasetRequest = async (data: { apiServer?: APIFileServer; yuqueServer?: YuqueServer; - feishuServer?: FeishuServer; + feishuShareServer?: FeishuShareServer; + feishuKnowledgeServer?: FeishuKnowledgeServer; }) => { - const { apiServer, yuqueServer, feishuServer } = data; + const { apiServer, yuqueServer, feishuShareServer, feishuKnowledgeServer } = data; if (apiServer) { return useApiDatasetRequest({ apiServer }); @@ -20,8 +23,11 @@ export const getApiDatasetRequest = async (data: { if (yuqueServer) { return useYuqueDatasetRequest({ yuqueServer }); } - if (feishuServer) { - return useFeishuDatasetRequest({ feishuServer }); + if (feishuShareServer) { + return useFeishuShareDatasetRequest({ feishuShareServer }); + } + if (feishuKnowledgeServer) { + return useFeishuKnowledgeDatasetRequest({ feishuKnowledgeServer }); } return Promise.reject('Can not find api dataset server'); }; diff --git a/packages/service/core/dataset/collection/utils.ts b/packages/service/core/dataset/collection/utils.ts index 96310ecb375e..0a5899ca4fd9 100644 --- a/packages/service/core/dataset/collection/utils.ts +++ b/packages/service/core/dataset/collection/utils.ts @@ -160,7 +160,8 @@ export const syncCollection = async (collection: CollectionWithDatasetType) => { type: DatasetSourceReadTypeEnum.apiFile, sourceId, apiServer: dataset.apiServer, - feishuServer: dataset.feishuServer, + feishuShareServer: dataset.feishuShareServer, + feishuKnowledgeServer: dataset.feishuKnowledgeServer, yuqueServer: dataset.yuqueServer }; })(); diff --git a/packages/service/core/dataset/feishuKnowledgeDataset/api.ts b/packages/service/core/dataset/feishuKnowledgeDataset/api.ts new file mode 100644 index 000000000000..1c126bf8d0c2 --- /dev/null +++ b/packages/service/core/dataset/feishuKnowledgeDataset/api.ts @@ -0,0 +1,356 @@ +import type { + APIFileItem, + ApiFileReadContentResponse, + ApiDatasetDetailResponse, + FeishuKnowledgeServer +} from '@fastgpt/global/core/dataset/apiDataset'; +import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; +import axios, { type Method } from 'axios'; +import { addLog } from '../../../common/system/log'; + +type ResponseDataType = { + success: boolean; + message: string; + data: any; +}; + +/** + * Request + */ +type FeishuFileListResponse = { + items: { + title: string; + creator: string; + has_child: boolean; + parent_node_token: string; + owner_id: string; + space_id: string; + node_token: string; + node_type: string; + node_create_time: number; + obj_edit_time: number; + obj_create_time: number; + obj_token: string; + obj_type: string; + origin_node_token: string; + origin_space_id: string; + }[]; + has_more: boolean; + next_page_token: string; +}; + +type FeishuSpaceListResponse = { + code: number; + msg: string; + data: { + items: { + space_id: string; + name: string; + description: string; + open_sharing: boolean; + visibility: string; + space_type: string; + }[]; + has_more: boolean; + page_token: string; + }; +}; + +type FeishuNodeResponse = { + code: number; + msg: string; + data: { + node: { + title: string; + creator: string; + has_child: boolean; + parent_node_token: string; + owner_id: string; + space_id: string; + node_token: string; + node_type: string; + node_create_time: number; + obj_edit_time: number; + obj_create_time: number; + obj_token: string; + obj_type: string; + origin_node_token: string; + origin_space_id: string; + }; + }; +}; + +type FeishuSpaceResponse = { + code: number; + msg: string; + data: { + space: { + description: string; + name: string; + open_sharing: boolean; + space_id: string; + space_type: string; + visibility: string; + }; + }; +}; + +type FeishuDomainResponse = { + code: number; + msg: string; + data: { + tenant: { + domain: string; + name: string; + }; + }; +}; + +const feishuBaseUrl = process.env.FEISHU_BASE_URL || 'https://open.feishu.cn'; + +export const useFeishuKnowledgeDatasetRequest = ({ + feishuKnowledgeServer +}: { + feishuKnowledgeServer: FeishuKnowledgeServer; +}) => { + const instance = axios.create({ + baseURL: feishuBaseUrl, + timeout: 60000 + }); + + // 添加请求拦截器 + instance.interceptors.request.use(async (config) => { + if (!config.headers.Authorization) { + const { data } = await axios.post<{ tenant_access_token: string }>( + `${feishuBaseUrl}/open-apis/auth/v3/tenant_access_token/internal`, + { + app_id: feishuKnowledgeServer.appId, + app_secret: feishuKnowledgeServer.appSecret + } + ); + + config.headers['Authorization'] = `Bearer ${data.tenant_access_token}`; + config.headers['Content-Type'] = 'application/json; charset=utf-8'; + } + return config; + }); + + /** + * 响应数据检查 + */ + const checkRes = (data: ResponseDataType) => { + if (data === undefined) { + addLog.info('yuque dataset data is empty'); + return Promise.reject('服务器异常'); + } + return data.data; + }; + const responseError = (err: any) => { + console.log('error->', '请求错误', err); + + if (!err) { + return Promise.reject({ message: '未知错误' }); + } + if (typeof err === 'string') { + return Promise.reject({ message: err }); + } + if (typeof err.message === 'string') { + return Promise.reject({ message: err.message }); + } + if (typeof err.data === 'string') { + return Promise.reject({ message: err.data }); + } + if (err?.response?.data) { + return Promise.reject(err?.response?.data); + } + return Promise.reject(err); + }; + + const request = (url: string, data: any, method: Method): Promise => { + /* 去空 */ + for (const key in data) { + if (data[key] === undefined) { + delete data[key]; + } + } + + return instance + .request({ + url, + method, + data: ['POST', 'PUT'].includes(method) ? data : undefined, + params: !['POST', 'PUT'].includes(method) ? data : undefined + }) + .then((res) => checkRes(res.data)) + .catch((err) => responseError(err)); + }; + + const listFiles = async ({ parentId }: { parentId?: ParentIdType }): Promise => { + const fetchSpaces = async ( + pageToken?: string + ): Promise => { + const response = await request( + `/open-apis/wiki/v2/spaces`, + { + lang: 'zh', + page_size: 50, + page_token: pageToken + }, + 'GET' + ); + + if (response.has_more) { + const nextFiles = await fetchSpaces(response.page_token); + return [...response.items, ...nextFiles]; + } + + return response.items; + }; + + if (!parentId) { + if (feishuKnowledgeServer.basePath) { + parentId = feishuKnowledgeServer.basePath; + } else { + const spaces = await fetchSpaces(); + return spaces.map((space) => ({ + id: space.space_id, + parentId: '', + name: space.name, + type: 'folder' as const, + hasChild: true, + updateTime: new Date(), + createTime: new Date() + })); + } + } + const spaceId = parentId.split('-')[0]; + const parent_node_token = parentId.split('-')[1]; + + const fetchFiles = async (pageToken?: string): Promise => { + const response = await request( + `/open-apis/wiki/v2/spaces/${spaceId}/nodes`, + { + page_size: 50, + page_token: pageToken, + parent_node_token: parent_node_token + }, + 'GET' + ); + + if (response.has_more) { + const nextFiles = await fetchFiles(response.next_page_token); + return [...response.items, ...nextFiles]; + } + + return response.items; + }; + const allFiles = await fetchFiles(); + const files = allFiles.filter((file) => ['folder', 'docx'].includes(file.obj_type)); + if (files.length === 0) { + return Promise.reject('There are no doc files in the current directory.'); + } + + return files.map((file) => ({ + id: spaceId + '-' + file.node_token, + parentId: file.parent_node_token ? spaceId + '-' + file.parent_node_token : spaceId, + name: file.title, + type: file.node_type === 'folder' ? ('folder' as const) : ('file' as const), + hasChild: file.has_child, + updateTime: new Date(file.obj_edit_time * 1000), + createTime: new Date(file.obj_create_time * 1000) + })); + }; + + const getNodeInfo = async (nodeToken: string) => + await request( + `/open-apis/wiki/v2/spaces/get_node`, + { + obj_type: 'wiki', + token: nodeToken + }, + 'GET' + ); + + const getFileContent = async ({ + apiFileId + }: { + apiFileId: string; + }): Promise => { + console.log('apiFileId', apiFileId); + const nodeToken = apiFileId.split('-')[1]; + const node = await getNodeInfo(nodeToken); + console.log('node', node); + const objToken = node.node.obj_token; + + const [{ content }, { document }] = await Promise.all([ + request<{ content: string }>( + `/open-apis/docx/v1/documents/${objToken}/raw_content`, + {}, + 'GET' + ), + request<{ document: { title: string } }>( + `/open-apis/docx/v1/documents/${objToken}`, + {}, + 'GET' + ) + ]); + + return { + title: document?.title, + rawText: content + }; + }; + + const getFilePreviewUrl = async ({ + apiFileId + }: { + apiFileId: string; + }): Promise => { + const nodeToken = apiFileId.split('-')[1]; + const response = await request( + `/open-apis/tenant/v2/tenant/query`, + {}, + 'GET' + ); + + return 'https://' + response.tenant.domain + '/wiki/' + nodeToken; + }; + + const getFileDetail = async ({ + apiFileId + }: { + apiFileId: string; + }): Promise => { + const spaceId = apiFileId.split('-')[0]; + const nodeToken = apiFileId.split('-')[1]; + const getSpace = await request( + `/open-apis/wiki/v2/spaces/${spaceId}`, + {}, + 'GET' + ); + if (nodeToken !== undefined) { + const getNode = await getNodeInfo(nodeToken); + + return { + name: getNode.node.title, + parentId: getNode.node.parent_node_token + ? spaceId + '-' + getNode.node.parent_node_token + : spaceId, + id: apiFileId + }; + } + + return { + name: getSpace.space.name, + parentId: null, + id: apiFileId + }; + }; + + return { + getFileContent, + listFiles, + getFilePreviewUrl, + getFileDetail + }; +}; diff --git a/packages/service/core/dataset/feishuDataset/api.ts b/packages/service/core/dataset/feishuShareDataset/api.ts similarity index 94% rename from packages/service/core/dataset/feishuDataset/api.ts rename to packages/service/core/dataset/feishuShareDataset/api.ts index df0d58700aef..16ccf9aa10d2 100644 --- a/packages/service/core/dataset/feishuDataset/api.ts +++ b/packages/service/core/dataset/feishuShareDataset/api.ts @@ -2,7 +2,7 @@ import type { APIFileItem, ApiFileReadContentResponse, ApiDatasetDetailResponse, - FeishuServer + FeishuShareServer } from '@fastgpt/global/core/dataset/apiDataset'; import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; import axios, { type Method } from 'axios'; @@ -31,7 +31,11 @@ type FeishuFileListResponse = { const feishuBaseUrl = process.env.FEISHU_BASE_URL || 'https://open.feishu.cn'; -export const useFeishuDatasetRequest = ({ feishuServer }: { feishuServer: FeishuServer }) => { +export const useFeishuShareDatasetRequest = ({ + feishuShareServer +}: { + feishuShareServer: FeishuShareServer; +}) => { const instance = axios.create({ baseURL: feishuBaseUrl, timeout: 60000 @@ -43,8 +47,8 @@ export const useFeishuDatasetRequest = ({ feishuServer }: { feishuServer: Feishu const { data } = await axios.post<{ tenant_access_token: string }>( `${feishuBaseUrl}/open-apis/auth/v3/tenant_access_token/internal`, { - app_id: feishuServer.appId, - app_secret: feishuServer.appSecret + app_id: feishuShareServer.appId, + app_secret: feishuShareServer.appSecret } ); @@ -109,7 +113,7 @@ export const useFeishuDatasetRequest = ({ feishuServer }: { feishuServer: Feishu const data = await request( `/open-apis/drive/v1/files`, { - folder_token: parentId || feishuServer.folderToken, + folder_token: parentId || feishuShareServer.folderToken, page_size: 200, page_token: pageToken }, diff --git a/packages/service/core/dataset/read.ts b/packages/service/core/dataset/read.ts index 647c057584b8..845b7cb05607 100644 --- a/packages/service/core/dataset/read.ts +++ b/packages/service/core/dataset/read.ts @@ -11,8 +11,9 @@ import { readRawContentByFileBuffer } from '../../common/file/read/utils'; import { parseFileExtensionFromUrl } from '@fastgpt/global/common/string/tools'; import { type APIFileServer, - type FeishuServer, - type YuqueServer + type FeishuShareServer, + type YuqueServer, + type FeishuKnowledgeServer } from '@fastgpt/global/core/dataset/apiDataset'; import { getApiDatasetRequest } from './apiDataset'; import Papa from 'papaparse'; @@ -70,8 +71,9 @@ export const readDatasetSourceRawText = async ({ selector, externalFileId, apiServer, - feishuServer, + feishuShareServer, yuqueServer, + feishuKnowledgeServer, customPdfParse, getFormatText }: { @@ -85,7 +87,8 @@ export const readDatasetSourceRawText = async ({ selector?: string; // link selector externalFileId?: string; // external file dataset apiServer?: APIFileServer; // api dataset - feishuServer?: FeishuServer; // feishu dataset + feishuShareServer?: FeishuShareServer; // feishu dataset + feishuKnowledgeServer?: FeishuKnowledgeServer; // feishu dataset yuqueServer?: YuqueServer; // yuque dataset }): Promise<{ title?: string; @@ -129,8 +132,9 @@ export const readDatasetSourceRawText = async ({ } else if (type === DatasetSourceReadTypeEnum.apiFile) { const { title, rawText } = await readApiServerFileContent({ apiServer, - feishuServer, + feishuShareServer, yuqueServer, + feishuKnowledgeServer, apiFileId: sourceId, teamId, tmbId @@ -148,16 +152,18 @@ export const readDatasetSourceRawText = async ({ export const readApiServerFileContent = async ({ apiServer, - feishuServer, + feishuShareServer, yuqueServer, + feishuKnowledgeServer, apiFileId, teamId, tmbId, customPdfParse }: { apiServer?: APIFileServer; - feishuServer?: FeishuServer; + feishuShareServer?: FeishuShareServer; yuqueServer?: YuqueServer; + feishuKnowledgeServer?: FeishuKnowledgeServer; apiFileId: string; teamId: string; tmbId: string; @@ -170,7 +176,8 @@ export const readApiServerFileContent = async ({ await getApiDatasetRequest({ apiServer, yuqueServer, - feishuServer + feishuShareServer, + feishuKnowledgeServer }) ).getFileContent({ teamId, diff --git a/packages/service/core/dataset/schema.ts b/packages/service/core/dataset/schema.ts index 1573acb66f74..c8b9a46834f8 100644 --- a/packages/service/core/dataset/schema.ts +++ b/packages/service/core/dataset/schema.ts @@ -128,8 +128,9 @@ const DatasetSchema = new Schema({ default: true }, apiServer: Object, - feishuServer: Object, + feishuShareServer: Object, yuqueServer: Object, + feishuKnowledgeServer: Object, // abandoned autoSync: Boolean, diff --git a/packages/web/components/common/Icon/constants.ts b/packages/web/components/common/Icon/constants.ts index 586420fe6a7e..257ef278882a 100644 --- a/packages/web/components/common/Icon/constants.ts +++ b/packages/web/components/common/Icon/constants.ts @@ -215,9 +215,14 @@ export const iconPaths = { import('./icons/core/dataset/externalDatasetColor.svg'), 'core/dataset/externalDatasetOutline': () => import('./icons/core/dataset/externalDatasetOutline.svg'), - 'core/dataset/feishuDatasetColor': () => import('./icons/core/dataset/feishuDatasetColor.svg'), - 'core/dataset/feishuDatasetOutline': () => - import('./icons/core/dataset/feishuDatasetOutline.svg'), + 'core/dataset/feishuShareDatasetColor': () => + import('./icons/core/dataset/feishuShareDatasetColor.svg'), + 'core/dataset/feishuKnowledgeDatasetColor': () => + import('./icons/core/dataset/feishuKnowledgeDatasetColor.svg'), + 'core/dataset/feishuKnowledgeDatasetOutline': () => + import('./icons/core/dataset/feishuKnowledgeDatasetOutline.svg'), + 'core/dataset/feishuShareDatasetOutline': () => + import('./icons/core/dataset/feishuShareDatasetOutline.svg'), 'core/dataset/fileCollection': () => import('./icons/core/dataset/fileCollection.svg'), 'core/dataset/fullTextRecall': () => import('./icons/core/dataset/fullTextRecall.svg'), 'core/dataset/manualCollection': () => import('./icons/core/dataset/manualCollection.svg'), diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg new file mode 100644 index 000000000000..b4e0b7606eee --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg new file mode 100644 index 000000000000..85f267d495e1 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuShareDatasetColor.svg similarity index 100% rename from packages/web/components/common/Icon/icons/core/dataset/feishuDatasetColor.svg rename to packages/web/components/common/Icon/icons/core/dataset/feishuShareDatasetColor.svg diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuDatasetOutline.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuShareDatasetOutline.svg similarity index 100% rename from packages/web/components/common/Icon/icons/core/dataset/feishuDatasetOutline.svg rename to packages/web/components/common/Icon/icons/core/dataset/feishuShareDatasetOutline.svg diff --git a/packages/web/i18n/en/dataset.json b/packages/web/i18n/en/dataset.json index 6a7b1e560adc..f68593508c5e 100644 --- a/packages/web/i18n/en/dataset.json +++ b/packages/web/i18n/en/dataset.json @@ -79,9 +79,12 @@ "external_url": "File Access URL", "failedToLoadRootDirectories": "Failed to load root directories", "failedToLoadSubDirectories": "Failed to load subdirectories", - "feishu_dataset": "Feishu Dataset", - "feishu_dataset_config": "Feishu Dataset Config", - "feishu_dataset_desc": "Can build a dataset using Feishu documents by configuring permissions, without secondary storage", + "feishu_knowledge_dataset": "Feishu Knowledge Base", + "feishu_knowledge_dataset_config": "Configure Feishu Knowledge Base", + "feishu_knowledge_dataset_desc": "You can use Feishu Knowledge Base to build a knowledge base by configuring Feishu Knowledge Base. The knowledge base documents will not be stored secondaryly.", + "feishu_share_dataset": "Feishu Shared Knowledge Base", + "feishu_share_dataset_config": "Configure Feishu Shared Knowledge Base", + "feishu_share_dataset_desc": "You can use Feishu Shared Folder permissions to build a knowledge base using Feishu Shared files, and the files will not be stored twice.", "file_list": "File list", "file_model_function_tip": "Enhances indexing and QA generation", "filename": "Filename", diff --git a/packages/web/i18n/zh-CN/dataset.json b/packages/web/i18n/zh-CN/dataset.json index 455343d17960..c6cf549dc4b7 100644 --- a/packages/web/i18n/zh-CN/dataset.json +++ b/packages/web/i18n/zh-CN/dataset.json @@ -79,9 +79,12 @@ "external_url": "文件访问 URL", "failedToLoadRootDirectories": "加载根目录失败", "failedToLoadSubDirectories": "加载子目录失败", - "feishu_dataset": "飞书知识库", - "feishu_dataset_config": "配置飞书知识库", - "feishu_dataset_desc": "可通过配置飞书文档权限,使用飞书文档构建知识库,文档不会进行二次存储", + "feishu_knowledge_dataset": "飞书知识库", + "feishu_knowledge_dataset_config": "配置飞书知识库", + "feishu_knowledge_dataset_desc": "可通过配置飞书知识库权限,使用飞书知识库构建知识库,知识库文档不会进行二次存储", + "feishu_share_dataset": "飞书共享知识库", + "feishu_share_dataset_config": "配置飞书共享知识库", + "feishu_share_dataset_desc": "可通过配置飞书共享文件夹权限,使用飞书共享文件构建知识库,文件不会进行二次存储", "file_list": "文件列表", "file_model_function_tip": "用于增强索引和 QA 生成", "filename": "文件名", diff --git a/packages/web/i18n/zh-Hant/dataset.json b/packages/web/i18n/zh-Hant/dataset.json index 463d81a6e272..4351f13e161a 100644 --- a/packages/web/i18n/zh-Hant/dataset.json +++ b/packages/web/i18n/zh-Hant/dataset.json @@ -77,9 +77,12 @@ "external_url": "檔案存取網址", "failedToLoadRootDirectories": "加載根目錄失敗", "failedToLoadSubDirectories": "加載子目錄失敗", - "feishu_dataset": "飛書知識庫", - "feishu_dataset_config": "設定飛書知識庫", - "feishu_dataset_desc": "可透過設定飛書文件權限,使用飛書文件建構知識庫,文件不會進行二次儲存", + "feishu_knowledge_dataset": "飛書知識庫", + "feishu_knowledge_dataset_config": "配置飛書知識庫", + "feishu_knowledge_dataset_desc": "可通過配置飛書知識庫權限,使用飛書知識庫構建知識庫,知識庫文檔不會進行二次存儲", + "feishu_share_dataset": "飛書共享知識庫", + "feishu_share_dataset_config": "配置飛書共享知識庫", + "feishu_share_dataset_desc": "可通過配置飛書共享文件夾權限,使用飛書共享文件構建知識庫,文件不會進行二次存儲", "file_list": "文件列表", "file_model_function_tip": "用於增強索引和問答生成", "filename": "檔案名稱", diff --git a/projects/app/src/global/core/dataset/api.d.ts b/projects/app/src/global/core/dataset/api.d.ts index 7c9aa0dbb7a0..7c23e06eab92 100644 --- a/projects/app/src/global/core/dataset/api.d.ts +++ b/projects/app/src/global/core/dataset/api.d.ts @@ -4,8 +4,9 @@ import type { } from '@fastgpt/global/core/dataset/api'; import type { APIFileServer, - FeishuServer, - YuqueServer + FeishuShareServer, + YuqueServer, + FeishuKnowledgeServer } from '@fastgpt/global/core/dataset/apiDataset'; import type { DatasetSearchModeEnum, @@ -32,8 +33,9 @@ export type CreateDatasetParams = { agentModel?: string; vlmModel?: string; apiServer?: APIFileServer; - feishuServer?: FeishuServer; + feishuShareServer?: FeishuShareServer; yuqueServer?: YuqueServer; + feishuKnowledgeServer?: FeishuKnowledgeServer; }; export type RebuildEmbeddingProps = { diff --git a/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx b/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx index 3588b474232a..7fe2fce32289 100644 --- a/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx +++ b/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx @@ -5,7 +5,8 @@ import type { UseFormReturn } from 'react-hook-form'; import { useTranslation } from 'next-i18next'; import type { APIFileServer, - FeishuServer, + FeishuShareServer, + FeishuKnowledgeServer, YuqueServer } from '@fastgpt/global/core/dataset/apiDataset'; import { getApiDatasetPaths, getApiDatasetCatalog } from '@/web/core/dataset/api'; @@ -33,7 +34,8 @@ const ApiDatasetForm = ({ form: UseFormReturn< { apiServer?: APIFileServer; - feishuServer?: FeishuServer; + feishuShareServer?: FeishuShareServer; + feishuKnowledgeServer?: FeishuKnowledgeServer; yuqueServer?: YuqueServer; }, any @@ -43,8 +45,9 @@ const ApiDatasetForm = ({ const { register, setValue, watch } = form; const yuqueServer = watch('yuqueServer'); - const feishuServer = watch('feishuServer'); + const feishuShareServer = watch('feishuShareServer'); const apiServer = watch('apiServer'); + const feishuKnowledgeServer = watch('feishuKnowledgeServer'); const [pathNames, setPathNames] = useState(t('dataset:rootdirectory')); const [ @@ -52,14 +55,16 @@ const ApiDatasetForm = ({ { setTrue: openBaseurlSeletModal, setFalse: closeBaseurlSelectModal } ] = useBoolean(); - const parentId = yuqueServer?.basePath || apiServer?.basePath; + const parentId = yuqueServer?.basePath || apiServer?.basePath || feishuKnowledgeServer?.basePath; const canSelectBaseUrl = useMemo(() => { switch (type) { case DatasetTypeEnum.yuque: return yuqueServer?.userId && yuqueServer?.token; - case DatasetTypeEnum.feishu: - return feishuServer?.appId && feishuServer?.appSecret; + case DatasetTypeEnum.feishuShare: + return feishuShareServer?.appId && feishuShareServer?.appSecret; + case DatasetTypeEnum.feishuKnowledge: + return feishuKnowledgeServer?.appId && feishuKnowledgeServer?.appSecret; case DatasetTypeEnum.apiDataset: return !!apiServer?.baseUrl; default: @@ -69,8 +74,10 @@ const ApiDatasetForm = ({ type, yuqueServer?.userId, yuqueServer?.token, - feishuServer?.appId, - feishuServer?.appSecret, + feishuShareServer?.appId, + feishuShareServer?.appSecret, + feishuKnowledgeServer?.appId, + feishuKnowledgeServer?.appSecret, apiServer?.baseUrl ]); @@ -80,7 +87,9 @@ const ApiDatasetForm = ({ if ( !datasetId && ((yuqueServer && (!yuqueServer.userId || !yuqueServer?.token)) || - (apiServer && !apiServer?.baseUrl)) + (apiServer && !apiServer?.baseUrl) || + (feishuKnowledgeServer && + (!feishuKnowledgeServer?.appId || !feishuKnowledgeServer?.appSecret))) ) { return setPathNames(t('dataset:input_required_field_to_select_baseurl')); } @@ -92,8 +101,9 @@ const ApiDatasetForm = ({ datasetId, parentId, yuqueServer, - feishuServer, - apiServer + feishuShareServer, + apiServer, + feishuKnowledgeServer }); setPathNames(path); }, @@ -110,12 +120,15 @@ const ApiDatasetForm = ({ case DatasetTypeEnum.yuque: setValue('yuqueServer.basePath', value); break; - case DatasetTypeEnum.feishu: - setValue('feishuServer.folderToken', value); + case DatasetTypeEnum.feishuShare: + setValue('feishuShareServer.folderToken', value); break; case DatasetTypeEnum.apiDataset: setValue('apiServer.basePath', value); break; + case DatasetTypeEnum.feishuKnowledge: + setValue('feishuKnowledgeServer.basePath', value); + break; } closeBaseurlSelectModal(); @@ -158,11 +171,18 @@ const ApiDatasetForm = ({ }; break; // Currently, only Yuque is using it - case DatasetTypeEnum.feishu: - params.feishuServer = { - appId: feishuServer?.appId || '', - appSecret: feishuServer?.appSecret || '', - folderToken: feishuServer?.folderToken || '' + case DatasetTypeEnum.feishuShare: + params.feishuShareServer = { + appId: feishuShareServer?.appId || '', + appSecret: feishuShareServer?.appSecret || '', + folderToken: feishuShareServer?.folderToken || '' + }; + break; + case DatasetTypeEnum.feishuKnowledge: + params.feishuKnowledgeServer = { + appId: feishuKnowledgeServer?.appId || '', + appSecret: feishuKnowledgeServer?.appSecret || '', + basePath: '' }; break; case DatasetTypeEnum.apiDataset: @@ -211,7 +231,7 @@ const ApiDatasetForm = ({ {renderDirectoryModal()} )} - {type === DatasetTypeEnum.feishu && ( + {type === DatasetTypeEnum.feishuShare && ( <> @@ -244,7 +264,7 @@ const ApiDatasetForm = ({ bg={'myWhite.600'} placeholder={'App Secret'} maxLength={200} - {...register('feishuServer.appSecret', { required: true })} + {...register('feishuShareServer.appSecret', { required: true })} /> @@ -261,13 +281,42 @@ const ApiDatasetForm = ({ bg={'myWhite.600'} placeholder={'Folder Token'} maxLength={200} - {...register('feishuServer.folderToken', { required: true })} + {...register('feishuShareServer.folderToken', { required: true })} /> {/* {renderBaseUrlSelector()} {renderDirectoryModal()} */} )} + {type === DatasetTypeEnum.feishuKnowledge && ( + <> + + + App ID + + + + + + App Secret + + + + {renderBaseUrlSelector()} + {renderDirectoryModal()} + + )} + {type === DatasetTypeEnum.yuque && ( <> diff --git a/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx index 6f5c857e0089..bc0df1a3f18b 100644 --- a/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx +++ b/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx @@ -416,7 +416,8 @@ const Header = ({ hasTrainingData }: { hasTrainingData: boolean }) => { )} {/* apiDataset */} {(datasetDetail?.type === DatasetTypeEnum.apiDataset || - datasetDetail?.type === DatasetTypeEnum.feishu || + datasetDetail?.type === DatasetTypeEnum.feishuShare || + datasetDetail?.type === DatasetTypeEnum.feishuKnowledge || datasetDetail?.type === DatasetTypeEnum.yuque) && ( { )} + {datasetDetail.type === DatasetTypeEnum.feishuKnowledge && ( + <> + + + + {t('dataset:feishu_knowledge_dataset_config')} + + + setEditedAPIDataset({ + id: datasetDetail._id, + feishuKnowledgeServer: datasetDetail.feishuKnowledgeServer + }) + } + /> + + {datasetDetail.feishuKnowledgeServer?.appId} + + + )} - {datasetDetail.type === DatasetTypeEnum.feishu && ( + {datasetDetail.type === DatasetTypeEnum.feishuShare && ( <> - {t('dataset:feishu_dataset_config')} + {t('dataset:feishu_share_dataset_config')} { onClick={() => setEditedAPIDataset({ id: datasetDetail._id, - feishuServer: datasetDetail.feishuServer + feishuShareServer: datasetDetail.feishuShareServer }) } /> - {datasetDetail.feishuServer?.folderToken} + {datasetDetail.feishuShareServer?.folderToken} )} @@ -437,7 +461,8 @@ const Info = ({ datasetId }: { datasetId: string }) => { id: datasetId, apiServer: data.apiServer, yuqueServer: data.yuqueServer, - feishuServer: data.feishuServer + feishuShareServer: data.feishuShareServer, + feishuKnowledgeServer: data.feishuKnowledgeServer }) } /> diff --git a/projects/app/src/pageComponents/dataset/list/CreateModal.tsx b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx index 38e60863524d..2338c570ce6b 100644 --- a/projects/app/src/pageComponents/dataset/list/CreateModal.tsx +++ b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx @@ -26,7 +26,8 @@ export type CreateDatasetType = | DatasetTypeEnum.dataset | DatasetTypeEnum.apiDataset | DatasetTypeEnum.websiteDataset - | DatasetTypeEnum.feishu + | DatasetTypeEnum.feishuShare + | DatasetTypeEnum.feishuKnowledge | DatasetTypeEnum.yuque; const CreateModal = ({ @@ -57,9 +58,13 @@ const CreateModal = ({ name: t('dataset:api_file'), icon: 'core/dataset/externalDatasetColor' }, - [DatasetTypeEnum.feishu]: { - name: t('dataset:feishu_dataset'), - icon: 'core/dataset/feishuDatasetColor' + [DatasetTypeEnum.feishuShare]: { + name: t('dataset:feishu_share_dataset'), + icon: 'core/dataset/feishuShareDatasetColor' + }, + [DatasetTypeEnum.feishuKnowledge]: { + name: t('dataset:feishu_knowledge_dataset'), + icon: 'core/dataset/feishuKnowledgeDatasetColor' }, [DatasetTypeEnum.yuque]: { name: t('dataset:yuque_dataset'), diff --git a/projects/app/src/pageComponents/dataset/list/SideTag.tsx b/projects/app/src/pageComponents/dataset/list/SideTag.tsx index 0cb84048a9e4..1364f5564b71 100644 --- a/projects/app/src/pageComponents/dataset/list/SideTag.tsx +++ b/projects/app/src/pageComponents/dataset/list/SideTag.tsx @@ -25,9 +25,13 @@ const SideTag = ({ type, ...props }: { type: `${DatasetTypeEnum}` } & FlexProps) icon: 'core/dataset/externalDatasetOutline', label: t('dataset:api_file') }, - [DatasetTypeEnum.feishu]: { - icon: 'core/dataset/feishuDatasetOutline', - label: t('dataset:feishu_dataset') + [DatasetTypeEnum.feishuShare]: { + icon: 'core/dataset/feishuShareDatasetOutline', + label: t('dataset:feishu_share_dataset') + }, + [DatasetTypeEnum.feishuKnowledge]: { + icon: 'core/dataset/feishuKnowledgeDatasetOutline', + label: t('dataset:feishu_knowledge_dataset') }, [DatasetTypeEnum.yuque]: { icon: 'core/dataset/yuqueDatasetOutline', diff --git a/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts b/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts index 906e465b5ede..3effdb8728ad 100644 --- a/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts +++ b/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts @@ -5,7 +5,8 @@ import type { APIFileItem, APIFileServer, YuqueServer, - FeishuServer + FeishuShareServer, + FeishuKnowledgeServer } from '@fastgpt/global/core/dataset/apiDataset'; import { type NextApiRequest } from 'next'; import { authCert } from '@fastgpt/service/support/permission/auth/common'; @@ -13,22 +14,31 @@ import { authCert } from '@fastgpt/service/support/permission/auth/common'; export type GetApiDatasetCataLogProps = { parentId?: ParentIdType; yuqueServer?: YuqueServer; - feishuServer?: FeishuServer; + feishuShareServer?: FeishuShareServer; + feishuKnowledgeServer?: FeishuKnowledgeServer; apiServer?: APIFileServer; }; export type GetApiDatasetCataLogResponse = APIFileItem[]; async function handler(req: NextApiRequest) { - let { searchKey = '', parentId = null, yuqueServer, feishuServer, apiServer } = req.body; + let { + searchKey = '', + parentId = null, + yuqueServer, + feishuShareServer, + apiServer, + feishuKnowledgeServer + } = req.body; await authCert({ req, authToken: true }); const data = await ( await getApiDatasetRequest({ - feishuServer, + feishuShareServer, yuqueServer, - apiServer + apiServer, + feishuKnowledgeServer }) ).listFiles({ parentId, searchKey }); diff --git a/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts b/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts index f069ea47b006..c54560b00286 100644 --- a/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts +++ b/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts @@ -4,8 +4,9 @@ import type { ParentIdType } from '@fastgpt/global/common/parentFolder/type'; import type { APIFileServer, YuqueServer, - FeishuServer, - ApiDatasetDetailResponse + FeishuShareServer, + ApiDatasetDetailResponse, + FeishuKnowledgeServer } from '@fastgpt/global/core/dataset/apiDataset'; import { getApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset'; import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next'; @@ -19,8 +20,9 @@ export type GetApiDatasetPathBody = { datasetId?: string; parentId?: ParentIdType; yuqueServer?: YuqueServer; - feishuServer?: FeishuServer; + feishuShareServer?: FeishuShareServer; apiServer?: APIFileServer; + feishuKnowledgeServer?: FeishuKnowledgeServer; }; export type GetApiDatasetPathResponse = string; @@ -50,7 +52,7 @@ async function handler( const { datasetId, parentId } = req.body; if (!parentId) return ''; - const { yuqueServer, feishuServer, apiServer } = await (async () => { + const { yuqueServer, feishuShareServer, apiServer, feishuKnowledgeServer } = await (async () => { if (datasetId) { const { dataset } = await authDataset({ req, @@ -64,35 +66,43 @@ async function handler( yuqueServer: req.body.yuqueServer ? { ...req.body.yuqueServer, token: dataset.yuqueServer?.token ?? '' } : dataset.yuqueServer, - feishuServer: req.body.feishuServer - ? { ...req.body.feishuServer, appSecret: dataset.feishuServer?.appSecret ?? '' } - : dataset.feishuServer, + feishuShareServer: req.body.feishuShareServer + ? { ...req.body.feishuShareServer, appSecret: dataset.feishuShareServer?.appSecret ?? '' } + : dataset.feishuShareServer, apiServer: req.body.apiServer ? { ...req.body.apiServer, authorization: dataset.apiServer?.authorization ?? '' } - : dataset.apiServer + : dataset.apiServer, + feishuKnowledgeServer: req.body.feishuKnowledgeServer + ? { + ...req.body.feishuKnowledgeServer, + appSecret: dataset.feishuKnowledgeServer?.appSecret ?? '' + } + : dataset.feishuKnowledgeServer }; } else { await authCert({ req, authToken: true }); return { yuqueServer: req.body.yuqueServer, - feishuServer: req.body.feishuServer, - apiServer: req.body.apiServer + feishuShareServer: req.body.feishuShareServer, + apiServer: req.body.apiServer, + feishuKnowledgeServer: req.body.feishuKnowledgeServer }; } })(); - if (feishuServer) { + if (feishuShareServer) { return ''; } - if (yuqueServer || apiServer) { + if (yuqueServer || apiServer || feishuKnowledgeServer) { const apiDataset = await getApiDatasetRequest({ yuqueServer, - apiServer + apiServer, + feishuKnowledgeServer }); if (!apiDataset?.getFileDetail) { diff --git a/projects/app/src/pages/api/core/dataset/apiDataset/list.ts b/projects/app/src/pages/api/core/dataset/apiDataset/list.ts index c83aed5f28bb..0fd92e1dda1e 100644 --- a/projects/app/src/pages/api/core/dataset/apiDataset/list.ts +++ b/projects/app/src/pages/api/core/dataset/apiDataset/list.ts @@ -24,14 +24,16 @@ async function handler(req: NextApiRequest) { }); const apiServer = dataset.apiServer; - const feishuServer = dataset.feishuServer; + const feishuShareServer = dataset.feishuShareServer; const yuqueServer = dataset.yuqueServer; + const feishuKnowledgeServer = dataset.feishuKnowledgeServer; return ( await getApiDatasetRequest({ apiServer, yuqueServer, - feishuServer + feishuShareServer, + feishuKnowledgeServer }) ).listFiles({ searchKey, parentId }); } diff --git a/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts b/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts index 9bbebda2898f..df24e9dabe3b 100644 --- a/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts +++ b/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts @@ -24,8 +24,9 @@ async function handler(req: NextApiRequest): CreateCollectionResponse { }); const apiServer = dataset.apiServer; - const feishuServer = dataset.feishuServer; + const feishuShareServer = dataset.feishuShareServer; const yuqueServer = dataset.yuqueServer; + const feishuKnowledgeServer = dataset.feishuKnowledgeServer; // Auth same apiFileId const storeCol = await MongoDatasetCollection.findOne( @@ -43,7 +44,8 @@ async function handler(req: NextApiRequest): CreateCollectionResponse { const { title, rawText } = await readApiServerFileContent({ apiServer, - feishuServer, + feishuShareServer, + feishuKnowledgeServer, yuqueServer, apiFileId, teamId, diff --git a/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts b/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts index aa1fc3db062e..bb388b46082d 100644 --- a/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts +++ b/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts @@ -60,7 +60,8 @@ async function handler( type: DatasetSourceReadTypeEnum.apiFile, sourceId: collection.apiFileId, apiServer: collection.dataset.apiServer, - feishuServer: collection.dataset.feishuServer, + feishuShareServer: collection.dataset.feishuShareServer, + feishuKnowledgeServer: collection.dataset.feishuKnowledgeServer, yuqueServer: collection.dataset.yuqueServer }; } diff --git a/projects/app/src/pages/api/core/dataset/collection/read.ts b/projects/app/src/pages/api/core/dataset/collection/read.ts index f5d91eec1a28..40ce482dccaa 100644 --- a/projects/app/src/pages/api/core/dataset/collection/read.ts +++ b/projects/app/src/pages/api/core/dataset/collection/read.ts @@ -95,13 +95,15 @@ async function handler( } if (collection.type === DatasetCollectionTypeEnum.apiFile && collection.apiFileId) { const apiServer = collection.dataset.apiServer; - const feishuServer = collection.dataset.feishuServer; + const feishuShareServer = collection.dataset.feishuShareServer; const yuqueServer = collection.dataset.yuqueServer; + const feishuKnowledgeServer = collection.dataset.feishuKnowledgeServer; return ( await getApiDatasetRequest({ apiServer, - feishuServer, + feishuShareServer, + feishuKnowledgeServer, yuqueServer }) ).getFilePreviewUrl({ diff --git a/projects/app/src/pages/api/core/dataset/create.ts b/projects/app/src/pages/api/core/dataset/create.ts index 2a57678207e9..91368b6cda00 100644 --- a/projects/app/src/pages/api/core/dataset/create.ts +++ b/projects/app/src/pages/api/core/dataset/create.ts @@ -36,8 +36,9 @@ async function handler( agentModel = getDatasetModel()?.model, vlmModel, apiServer, - feishuServer, - yuqueServer + feishuShareServer, + yuqueServer, + feishuKnowledgeServer } = req.body; // auth @@ -84,7 +85,8 @@ async function handler( avatar, type, apiServer, - feishuServer, + feishuShareServer, + feishuKnowledgeServer, yuqueServer } ], diff --git a/projects/app/src/pages/api/core/dataset/detail.ts b/projects/app/src/pages/api/core/dataset/detail.ts index f6bef3c34ef3..5b9fe40ebe6c 100644 --- a/projects/app/src/pages/api/core/dataset/detail.ts +++ b/projects/app/src/pages/api/core/dataset/detail.ts @@ -59,11 +59,18 @@ async function handler(req: ApiRequestProps): Promise { basePath: dataset.yuqueServer.basePath } : undefined, - feishuServer: dataset.feishuServer + feishuShareServer: dataset.feishuShareServer ? { - appId: dataset.feishuServer.appId, + appId: dataset.feishuShareServer.appId, appSecret: '', - folderToken: dataset.feishuServer.folderToken + folderToken: dataset.feishuShareServer.folderToken + } + : undefined, + feishuKnowledgeServer: dataset.feishuKnowledgeServer + ? { + appId: dataset.feishuKnowledgeServer.appId, + appSecret: '', + basePath: dataset.feishuKnowledgeServer.basePath } : undefined, permission, diff --git a/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts b/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts index b0e58238b184..4314206cfb9f 100644 --- a/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts +++ b/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts @@ -122,8 +122,9 @@ async function handler( sourceId, selector, apiServer: dataset.apiServer, - feishuServer: dataset.feishuServer, + feishuShareServer: dataset.feishuShareServer, yuqueServer: dataset.yuqueServer, + feishuKnowledgeServer: dataset.feishuKnowledgeServer, externalFileId, customPdfParse }); diff --git a/projects/app/src/pages/api/core/dataset/update.ts b/projects/app/src/pages/api/core/dataset/update.ts index c19bbc764954..08171ba2d5ad 100644 --- a/projects/app/src/pages/api/core/dataset/update.ts +++ b/projects/app/src/pages/api/core/dataset/update.ts @@ -68,7 +68,8 @@ async function handler( externalReadUrl, apiServer, yuqueServer, - feishuServer, + feishuShareServer, + feishuKnowledgeServer, autoSync, chunkSettings } = req.body; @@ -176,10 +177,21 @@ async function handler( ...(!!yuqueServer?.basePath !== undefined && { 'yuqueServer.basePath': yuqueServer?.basePath }), - ...(!!feishuServer?.appId && { 'feishuServer.appId': feishuServer.appId }), - ...(!!feishuServer?.appSecret && { 'feishuServer.appSecret': feishuServer.appSecret }), - ...(!!feishuServer?.folderToken && { - 'feishuServer.folderToken': feishuServer.folderToken + ...(!!feishuShareServer?.appId && { 'feishuShareServer.appId': feishuShareServer.appId }), + ...(!!feishuShareServer?.appSecret && { + 'feishuShareServer.appSecret': feishuShareServer.appSecret + }), + ...(!!feishuShareServer?.folderToken && { + 'feishuShareServer.folderToken': feishuShareServer.folderToken + }), + ...(!!feishuKnowledgeServer?.appId && { + 'feishuKnowledgeServer.appId': feishuKnowledgeServer.appId + }), + ...(!!feishuKnowledgeServer?.appSecret && { + 'feishuKnowledgeServer.appSecret': feishuKnowledgeServer.appSecret + }), + ...(!!feishuKnowledgeServer?.basePath !== undefined && { + 'feishuKnowledgeServer.basePath': feishuKnowledgeServer?.basePath }), ...(isMove && { inheritPermission: true }), ...(typeof autoSync === 'boolean' && { autoSync }) diff --git a/projects/app/src/pages/dataset/list/index.tsx b/projects/app/src/pages/dataset/list/index.tsx index 8468ea96b4bd..c51d2ea27ba7 100644 --- a/projects/app/src/pages/dataset/list/index.tsx +++ b/projects/app/src/pages/dataset/list/index.tsx @@ -177,10 +177,20 @@ const Dataset = () => { ...(feConfigs?.show_dataset_feishu !== false ? [ { - icon: 'core/dataset/feishuDatasetColor', - label: t('dataset:feishu_dataset'), - description: t('dataset:feishu_dataset_desc'), - onClick: () => onSelectDatasetType(DatasetTypeEnum.feishu) + icon: 'core/dataset/feishuShareDatasetColor', + label: t('dataset:feishu_share_dataset'), + description: t('dataset:feishu_share_dataset_desc'), + onClick: () => onSelectDatasetType(DatasetTypeEnum.feishuShare) + } + ] + : []), + ...(feConfigs?.show_dataset_feishu !== false + ? [ + { + icon: 'core/dataset/feishuKnowledgeDatasetColor', + label: t('dataset:feishu_knowledge_dataset'), + description: t('dataset:feishu_knowledge_dataset_desc'), + onClick: () => onSelectDatasetType(DatasetTypeEnum.feishuKnowledge) } ] : []), diff --git a/projects/app/src/web/core/dataset/context/datasetPageContext.tsx b/projects/app/src/web/core/dataset/context/datasetPageContext.tsx index 947b094fe8fb..eb15ffecfb3b 100644 --- a/projects/app/src/web/core/dataset/context/datasetPageContext.tsx +++ b/projects/app/src/web/core/dataset/context/datasetPageContext.tsx @@ -117,13 +117,20 @@ export const DatasetPageContextProvider = ({ basePath: data.yuqueServer.basePath } : state.yuqueServer, - feishuServer: data.feishuServer + feishuShareServer: data.feishuShareServer ? { - appId: data.feishuServer.appId, + appId: data.feishuShareServer.appId, appSecret: '', - folderToken: data.feishuServer.folderToken + folderToken: data.feishuShareServer.folderToken } - : state.feishuServer + : state.feishuShareServer, + feishuKnowledgeServer: data.feishuKnowledgeServer + ? { + appId: data.feishuKnowledgeServer.appId, + appSecret: '', + basePath: data.feishuKnowledgeServer.basePath + } + : state.feishuKnowledgeServer })); } }; From 12beaa527a10f1a73dcefa6032ce06e7d3867546 Mon Sep 17 00:00:00 2001 From: dreamer6680 <146868355@qq.com> Date: Sat, 24 May 2025 19:19:08 +0800 Subject: [PATCH 2/9] remove console --- packages/service/core/dataset/feishuKnowledgeDataset/api.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/service/core/dataset/feishuKnowledgeDataset/api.ts b/packages/service/core/dataset/feishuKnowledgeDataset/api.ts index 1c126bf8d0c2..bc12348ddef0 100644 --- a/packages/service/core/dataset/feishuKnowledgeDataset/api.ts +++ b/packages/service/core/dataset/feishuKnowledgeDataset/api.ts @@ -276,10 +276,8 @@ export const useFeishuKnowledgeDatasetRequest = ({ }: { apiFileId: string; }): Promise => { - console.log('apiFileId', apiFileId); const nodeToken = apiFileId.split('-')[1]; const node = await getNodeInfo(nodeToken); - console.log('node', node); const objToken = node.node.obj_token; const [{ content }, { document }] = await Promise.all([ From 0b85cddd8209090d215c394ad7daab9ad9f6b4d5 Mon Sep 17 00:00:00 2001 From: dreamer6680 <146868355@qq.com> Date: Sat, 24 May 2025 19:52:06 +0800 Subject: [PATCH 3/9] add doc --- .../docs/guide/knowledge_base/lark_dataset.md | 7 ++- .../knowledge_base/lark_share_dataset.md | 61 +++++++++++++++++++ .../app/src/web/core/dataset/constants.ts | 3 +- 3 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md diff --git a/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md b/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md index 8631b0f0dbc8..4b7dd0420d84 100644 --- a/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md +++ b/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md @@ -22,11 +22,12 @@ FastGPT v4.8.16 版本开始,商业版用户支持飞书知识库导入,用 ## 2. 配置应用权限 -创建应用后,进入应用可以配置相关权限,这里需要增加**3个权限**: +创建应用后,进入应用可以配置相关权限,这里需要增加**4个权限**: -1. 获取云空间文件夹下的云文档清单 -2. 查看新版文档 +1. 查看、编辑和管理知识库 +2. 查看知识空间信息 3. 查看、评论、编辑和管理云空间中所有文件 +4. 获取企业信息 ![alt text](/imgs/image-41.png) diff --git a/docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md b/docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md new file mode 100644 index 000000000000..53e0af98c7dc --- /dev/null +++ b/docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md @@ -0,0 +1,61 @@ +--- +title: '飞书共享知识库' +description: 'FastGPT 飞书知识库功能介绍和使用方式' +icon: 'language' +draft: false +toc: true +weight: 405 +--- + +| | | +| --- | --- | +| ![alt text](/imgs/image-39.png) | ![alt text](/imgs/image-40.png) | + +FastGPT v4.8.16 版本开始,商业版用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret,并选中一个**文档空间的顶层文件夹**来导入飞书共享知识库。目前处于测试阶段,部分交互有待优化。 + +由于飞书限制,无法直接获取所有文档内容,目前仅可以获取共享空间下文件目录的内容,无法获取个人空间里的内容。 +如果需要获取知识库的内容,[点击这里](./lark_dataset.md) + + +## 1. 创建飞书应用 + +打开 [飞书开放平台](https://open.feishu.cn/?lang=zh-CN),点击**创建应用**,选择**自建应用**,然后填写应用名称。 + +## 2. 配置应用权限 + +创建应用后,进入应用可以配置相关权限,这里需要增加**3个权限**: + +1. 获取云空间文件夹下的云文档清单 +2. 查看新版文档 +3. 查看、评论、编辑和管理云空间中所有文件 + +![alt text](/imgs/image-41.png) + +## 3. 获取 appId 和 appSecret + +![alt text](/imgs/image-42.png) + +## 4. 给 Folder 增加权限 + +可参考飞书教程: https://open.feishu.cn/document/server-docs/docs/drive-v1/faq#b02e5bfb + +大致总结为: + +1. 把刚刚创建的应用拉入一个群里 +2. 给这个群增加目录权限 + +如果你的目录已经给全员组增加权限了,则可以跳过上面步骤,直接获取 Folder Token。 + +![alt text](/imgs/image-43.png) + +## 5. 获取 Folder Token + +可以页面路径上获取 Folder Token,注意不要把问号复制进来。 + +![alt text](/imgs/image-44.png) + +## 6. 创建知识库 + +根据 3 和 5 获取到的 3 个参数,创建知识库,选择飞书文件库类型,然后填入对应的参数,点击创建。 + +![alt text](/imgs/image-39.png) \ No newline at end of file diff --git a/projects/app/src/web/core/dataset/constants.ts b/projects/app/src/web/core/dataset/constants.ts index 93be215246c0..adef75972d33 100644 --- a/projects/app/src/web/core/dataset/constants.ts +++ b/projects/app/src/web/core/dataset/constants.ts @@ -71,7 +71,8 @@ export const datasetTypeCourseMap: Record<`${DatasetTypeEnum}`, string> = { [DatasetTypeEnum.dataset]: '', [DatasetTypeEnum.apiDataset]: '/docs/guide/knowledge_base/api_dataset/', [DatasetTypeEnum.websiteDataset]: '/docs/guide/knowledge_base/websync/', - [DatasetTypeEnum.feishu]: '/docs/guide/knowledge_base/lark_dataset/', + [DatasetTypeEnum.feishuShare]: '/docs/guide/knowledge_base/lark_share_dataset/', + [DatasetTypeEnum.feishuKnowledge]: '/docs/guide/knowledge_base/lark_knowledge_dataset/', [DatasetTypeEnum.yuque]: '/docs/guide/knowledge_base/yuque_dataset/', [DatasetTypeEnum.externalFile]: '' }; From 4376de61d1b640fee026e7589edff78cbabed29c Mon Sep 17 00:00:00 2001 From: dreamer6680 <1468683855@qq.com> Date: Sun, 25 May 2025 18:17:25 +0800 Subject: [PATCH 4/9] fix doc --- docSite/assets/imgs/feishuKnowledge-1.png | Bin 0 -> 64802 bytes docSite/assets/imgs/feishuKnowledge-2.png | Bin 0 -> 68957 bytes docSite/assets/imgs/image-39.png | Bin 105705 -> 60769 bytes .../docs/guide/knowledge_base/lark_dataset.md | 20 ++++++++++-------- .../knowledge_base/lark_share_dataset.md | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 docSite/assets/imgs/feishuKnowledge-1.png create mode 100644 docSite/assets/imgs/feishuKnowledge-2.png diff --git a/docSite/assets/imgs/feishuKnowledge-1.png b/docSite/assets/imgs/feishuKnowledge-1.png new file mode 100644 index 0000000000000000000000000000000000000000..478f5c6d5c7b0ca39d2403b004d3b2a0446b9788 GIT binary patch literal 64802 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 literal 0 HcmV?d00001 diff --git a/docSite/assets/imgs/feishuKnowledge-2.png b/docSite/assets/imgs/feishuKnowledge-2.png new file mode 100644 index 0000000000000000000000000000000000000000..bace4b7b2337a69df0e8d1bdbf290470a3b9a554 GIT binary patch literal 68957 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�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 AQUCw| literal 0 HcmV?d00001 diff --git a/docSite/assets/imgs/image-39.png b/docSite/assets/imgs/image-39.png index 3c46ea9a3b30b91abf9ddcd9a55fd4ba7bc94bf5..0d522fd9b4a12899960e73a814343b434804ceab 100644 GIT binary patch literal 60769 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 Date: Wed, 28 May 2025 11:07:34 +0800 Subject: [PATCH 5/9] support feishuPrivateDataset --- .../global/common/system/types/index.d.ts | 3 + packages/global/core/dataset/api.d.ts | 1 + packages/global/core/dataset/apiDataset.d.ts | 7 + packages/global/core/dataset/constants.ts | 6 + packages/global/core/dataset/type.d.ts | 4 +- packages/service/common/api/type.d.ts | 2 +- .../service/core/dataset/apiDataset/index.ts | 11 +- .../service/core/dataset/collection/utils.ts | 1 + .../core/dataset/feishuPrivateDataset/api.ts | 232 ++++++++++++++++++ .../feishuPrivateDataset/refreshToken.ts | 74 ++++++ packages/service/core/dataset/read.ts | 11 +- packages/service/core/dataset/schema.ts | 1 + .../web/components/common/Icon/constants.ts | 4 + .../dataset/feishuPrivateDatasetColor.svg | 1 + .../dataset/feishuPrivateDatasetOutline.svg | 1 + packages/web/i18n/en/dataset.json | 6 + packages/web/i18n/zh-CN/dataset.json | 6 + packages/web/i18n/zh-Hant/dataset.json | 6 + projects/app/src/global/core/dataset/api.d.ts | 2 + .../pageComponents/dataset/ApiDatasetForm.tsx | 40 ++- .../dataset/detail/CollectionCard/Header.tsx | 1 + .../Info/components/EditApiServiceModal.tsx | 4 +- .../dataset/detail/Info/index.tsx | 5 +- .../dataset/list/CreateModal.tsx | 5 + .../pageComponents/dataset/list/SideTag.tsx | 4 + .../api/core/dataset/apiDataset/getCatalog.ts | 10 +- .../core/dataset/apiDataset/getPathNames.ts | 101 ++++---- .../pages/api/core/dataset/apiDataset/list.ts | 4 +- .../collection/create/apiCollection.ts | 2 + .../pages/api/core/dataset/collection/read.ts | 4 +- .../app/src/pages/api/core/dataset/create.ts | 4 +- .../app/src/pages/api/core/dataset/detail.ts | 8 + .../core/dataset/feishu/getUserAccessToken.ts | 67 +++++ .../pages/api/core/dataset/feishu/oauth.ts | 28 +++ .../api/core/dataset/file/getPreviewChunks.ts | 1 + .../app/src/pages/api/core/dataset/update.ts | 4 + .../app/src/pages/dataset/detail/index.tsx | 56 ++++- projects/app/src/pages/dataset/list/index.tsx | 10 + .../app/src/service/common/system/cron.ts | 9 + projects/app/src/web/core/dataset/api.ts | 3 + .../app/src/web/core/dataset/constants.ts | 3 +- .../dataset/context/datasetPageContext.tsx | 10 +- 42 files changed, 694 insertions(+), 68 deletions(-) create mode 100644 packages/service/core/dataset/feishuPrivateDataset/api.ts create mode 100644 packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts create mode 100644 packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg create mode 100644 packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg create mode 100644 projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts create mode 100644 projects/app/src/pages/api/core/dataset/feishu/oauth.ts diff --git a/packages/global/common/system/types/index.d.ts b/packages/global/common/system/types/index.d.ts index f6f6c183d46d..c68c16af80b0 100644 --- a/packages/global/common/system/types/index.d.ts +++ b/packages/global/common/system/types/index.d.ts @@ -73,6 +73,9 @@ export type FastGPTFeConfigsType = { show_dataset_enhance?: boolean; show_batch_eval?: boolean; + feishu_auth_robot_client_id?: string; + feishu_auth_robot_client_secret?: string; + concatMd?: string; docUrl?: string; openAPIDocUrl?: string; diff --git a/packages/global/core/dataset/api.d.ts b/packages/global/core/dataset/api.d.ts index e5b20e3f6237..75b96d5413b0 100644 --- a/packages/global/core/dataset/api.d.ts +++ b/packages/global/core/dataset/api.d.ts @@ -28,6 +28,7 @@ export type DatasetUpdateBody = { yuqueServer?: DatasetSchemaType['yuqueServer']; feishuShareServer?: DatasetSchemaType['feishuShareServer']; feishuKnowledgeServer?: DatasetSchemaType['feishuKnowledgeServer']; + feishuPrivateServer?: DatasetSchemaType['feishuPrivateServer']; chunkSettings?: DatasetSchemaType['chunkSettings']; // sync schedule diff --git a/packages/global/core/dataset/apiDataset.d.ts b/packages/global/core/dataset/apiDataset.d.ts index ca2cdd75365a..60b8beb1c083 100644 --- a/packages/global/core/dataset/apiDataset.d.ts +++ b/packages/global/core/dataset/apiDataset.d.ts @@ -28,6 +28,13 @@ export type FeishuKnowledgeServer = { basePath?: string; }; +export type FeishuPrivateServer = { + user_access_token: string; + refresh_token: string; + outdate_time: number; + basePath?: string; +}; + export type YuqueServer = { userId: string; token?: string; diff --git a/packages/global/core/dataset/constants.ts b/packages/global/core/dataset/constants.ts index f9bd8ba14ad6..537bc6be87b4 100644 --- a/packages/global/core/dataset/constants.ts +++ b/packages/global/core/dataset/constants.ts @@ -9,6 +9,7 @@ export enum DatasetTypeEnum { apiDataset = 'apiDataset', feishuShare = 'feishuShare', feishuKnowledge = 'feishuKnowledge', + feishuPrivate = 'feishuPrivate', yuque = 'yuque' } export const DatasetTypeMap = { @@ -47,6 +48,11 @@ export const DatasetTypeMap = { label: i18nT('dataset:feishu_knowledge_dataset'), collectionLabel: i18nT('common:File') }, + [DatasetTypeEnum.feishuPrivate]: { + icon: 'core/dataset/feishuPrivateDatasetOutline', + label: i18nT('dataset:feishu_private_dataset'), + collectionLabel: i18nT('common:File') + }, [DatasetTypeEnum.yuque]: { icon: 'core/dataset/yuqueDatasetOutline', label: i18nT('dataset:yuque_dataset'), diff --git a/packages/global/core/dataset/type.d.ts b/packages/global/core/dataset/type.d.ts index 0bacf0d5e04b..e5392c415c96 100644 --- a/packages/global/core/dataset/type.d.ts +++ b/packages/global/core/dataset/type.d.ts @@ -17,7 +17,8 @@ import type { APIFileServer, FeishuShareServer, YuqueServer, - FeishuKnowledgeServer + FeishuKnowledgeServer, + FeishuPrivateServer } from './apiDataset'; import type { SourceMemberType } from 'support/user/type'; import type { DatasetDataIndexTypeEnum } from './data/constants'; @@ -81,6 +82,7 @@ export type DatasetSchemaType = { feishuShareServer?: FeishuShareServer; yuqueServer?: YuqueServer; feishuKnowledgeServer?: FeishuKnowledgeServer; + feishuPrivateServer?: FeishuPrivateServer; // abandon autoSync?: boolean; diff --git a/packages/service/common/api/type.d.ts b/packages/service/common/api/type.d.ts index 2a9af9e2ba8f..c7535dbefec6 100644 --- a/packages/service/common/api/type.d.ts +++ b/packages/service/common/api/type.d.ts @@ -1,5 +1,5 @@ import type { ApiDatasetDetailResponse } from '@fastgpt/global/core/dataset/apiDataset'; -import { FeishuServer, YuqueServer } from '@fastgpt/global/core/dataset/apiDataset'; +import { FeishuShareServer, YuqueServer } from '@fastgpt/global/core/dataset/apiDataset'; import type { DeepRagSearchProps, SearchDatasetDataResponse diff --git a/packages/service/core/dataset/apiDataset/index.ts b/packages/service/core/dataset/apiDataset/index.ts index dbea80cfed7c..b7f2a8fbc11d 100644 --- a/packages/service/core/dataset/apiDataset/index.ts +++ b/packages/service/core/dataset/apiDataset/index.ts @@ -2,20 +2,24 @@ import type { APIFileServer, YuqueServer, FeishuShareServer, - FeishuKnowledgeServer + FeishuKnowledgeServer, + FeishuPrivateServer } from '@fastgpt/global/core/dataset/apiDataset'; import { useApiDatasetRequest } from './api'; import { useYuqueDatasetRequest } from '../yuqueDataset/api'; import { useFeishuShareDatasetRequest } from '../feishuShareDataset/api'; import { useFeishuKnowledgeDatasetRequest } from '../feishuKnowledgeDataset/api'; +import { useFeishuPrivateDatasetRequest } from '../feishuPrivateDataset/api'; export const getApiDatasetRequest = async (data: { apiServer?: APIFileServer; yuqueServer?: YuqueServer; feishuShareServer?: FeishuShareServer; feishuKnowledgeServer?: FeishuKnowledgeServer; + feishuPrivateServer?: FeishuPrivateServer; }) => { - const { apiServer, yuqueServer, feishuShareServer, feishuKnowledgeServer } = data; + const { apiServer, yuqueServer, feishuShareServer, feishuKnowledgeServer, feishuPrivateServer } = + data; if (apiServer) { return useApiDatasetRequest({ apiServer }); @@ -29,5 +33,8 @@ export const getApiDatasetRequest = async (data: { if (feishuKnowledgeServer) { return useFeishuKnowledgeDatasetRequest({ feishuKnowledgeServer }); } + if (feishuPrivateServer) { + return useFeishuPrivateDatasetRequest({ feishuPrivateServer }); + } return Promise.reject('Can not find api dataset server'); }; diff --git a/packages/service/core/dataset/collection/utils.ts b/packages/service/core/dataset/collection/utils.ts index 0a5899ca4fd9..47cfefa13775 100644 --- a/packages/service/core/dataset/collection/utils.ts +++ b/packages/service/core/dataset/collection/utils.ts @@ -162,6 +162,7 @@ export const syncCollection = async (collection: CollectionWithDatasetType) => { apiServer: dataset.apiServer, feishuShareServer: dataset.feishuShareServer, feishuKnowledgeServer: dataset.feishuKnowledgeServer, + feishuPrivateServer: dataset.feishuPrivateServer, yuqueServer: dataset.yuqueServer }; })(); diff --git a/packages/service/core/dataset/feishuPrivateDataset/api.ts b/packages/service/core/dataset/feishuPrivateDataset/api.ts new file mode 100644 index 000000000000..6873f24e365a --- /dev/null +++ b/packages/service/core/dataset/feishuPrivateDataset/api.ts @@ -0,0 +1,232 @@ +import type { + APIFileItem, + ApiFileReadContentResponse, + ApiDatasetDetailResponse, + FeishuPrivateServer +} from '@fastgpt/global/core/dataset/apiDataset'; +import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; +import axios, { type Method } from 'axios'; +import { addLog } from '../../../common/system/log'; +import { preLoadWorker } from 'worker/preload'; + +type ResponseDataType = { + success: boolean; + message: string; + data: any; +}; + +type FeishuFileListResponse = { + files: { + token: string; + parent_token: string; + name: string; + type: string; + modified_time: number; + created_time: number; + url: string; + owner_id: string; + shortcut_info?: { + target_token: string; + target_type: string; + }; + }[]; + has_more: boolean; + next_page_token: string; +}; + +type FeishuFileDetailResponse = { + code: number; + msg: string; + data: { + name: string; + parentId: string; + }; +}; + +const feishuBaseUrl = process.env.FEISHU_BASE_URL || 'https://open.feishu.cn'; + +export const useFeishuPrivateDatasetRequest = ({ + feishuPrivateServer +}: { + feishuPrivateServer: FeishuPrivateServer; +}) => { + const instance = axios.create({ + baseURL: feishuBaseUrl, + timeout: 60000 + }); + + instance.defaults.headers.common['Authorization'] = + `Bearer ${feishuPrivateServer.user_access_token}`; + instance.defaults.headers.common['Content-Type'] = 'application/json; charset=utf-8'; + + /** + * 响应数据检查 + */ + const checkRes = (data: ResponseDataType) => { + if (data === undefined) { + addLog.info('yuque dataset data is empty'); + return Promise.reject('服务器异常'); + } + return data.data; + }; + const responseError = (err: any) => { + console.log('error->', '请求错误', err); + + if (!err) { + return Promise.reject({ message: '未知错误' }); + } + if (typeof err === 'string') { + return Promise.reject({ message: err }); + } + if (typeof err.message === 'string') { + return Promise.reject({ message: err.message }); + } + if (typeof err.data === 'string') { + return Promise.reject({ message: err.data }); + } + if (err?.response?.data) { + return Promise.reject(err?.response?.data); + } + return Promise.reject(err); + }; + + const request = (url: string, data: any, method: Method): Promise => { + /* 去空 */ + for (const key in data) { + if (data[key] === undefined) { + delete data[key]; + } + } + + return instance + .request({ + url, + method, + data: ['POST', 'PUT'].includes(method) ? data : undefined, + params: !['POST', 'PUT'].includes(method) ? data : undefined + }) + .then((res) => checkRes(res.data)) + .catch((err) => responseError(err)); + }; + + const listFiles = async ({ parentId }: { parentId?: ParentIdType }): Promise => { + const fetchFiles = async ( + pageToken?: string, + parentId?: ParentIdType + ): Promise => { + const data = await request( + `/open-apis/drive/v1/files`, + { + page_size: 200, + page_token: pageToken, + folder_token: parentId ? parentId : undefined + }, + 'GET' + ); + if (data.has_more) { + const nextFiles = await fetchFiles(data.next_page_token); + return [...data.files, ...nextFiles]; + } + + return data.files; + }; + const parent = parentId?.split('-')[1]; + + const allFiles = await fetchFiles(undefined, parent); + + return allFiles + .filter((file) => { + if (file.type === 'shortcut') { + return ( + file.shortcut_info?.target_type === 'docx' || + file.shortcut_info?.target_type === 'folder' + ); + } + return file.type === 'folder' || file.type === 'docx'; + }) + .map((file) => ({ + id: + file.type === 'shortcut' + ? file.parent_token + '-' + file.shortcut_info!.target_token + : file.parent_token + '-' + file.token, + parentId: parentId, + name: file.name, + type: file.type === 'folder' ? ('folder' as const) : ('file' as const), + hasChild: file.type === 'folder', + updateTime: new Date(file.modified_time * 1000), + createTime: new Date(file.created_time * 1000) + })); + }; + + const getFileContent = async ({ + apiFileId + }: { + apiFileId: string; + }): Promise => { + const fileId = apiFileId.split('-')[1]; + const [{ content }, { document }] = await Promise.all([ + request<{ content: string }>(`/open-apis/docx/v1/documents/${fileId}/raw_content`, {}, 'GET'), + request<{ document: { title: string } }>(`/open-apis/docx/v1/documents/${fileId}`, {}, 'GET') + ]); + + return { + title: document?.title, + rawText: content + }; + }; + + const getFilePreviewUrl = async ({ apiFileId }: { apiFileId: string }): Promise => { + const fileId = apiFileId.split('-')[1]; + const { metas } = await request<{ metas: { url: string }[] }>( + `/open-apis/drive/v1/metas/batch_query`, + { + request_docs: [ + { + doc_token: fileId, + doc_type: 'docx' + } + ], + with_url: true + }, + 'POST' + ); + + return metas[0].url; + }; + + const getFileDetail = async ({ + apiFileId + }: { + apiFileId: string; + }): Promise => { + const parentId = apiFileId.split('-')[0]; + const fileId = apiFileId.split('-')[1]; + + const fileDetail = await request( + `/open-apis/drive/explorer/v2/folder/${fileId}/meta`, + {}, + 'GET' + ); + console.log('fileDetail', fileDetail); + if (!fileDetail) { + return { + name: '', + parentId: null, + id: apiFileId + }; + } + + return { + name: fileDetail?.name, + parentId: null, + id: apiFileId + }; + }; + + return { + getFileContent, + listFiles, + getFilePreviewUrl, + getFileDetail + }; +}; diff --git a/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts b/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts new file mode 100644 index 000000000000..407aa045b97f --- /dev/null +++ b/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts @@ -0,0 +1,74 @@ +import axios from 'axios'; +import { MongoDataset } from '../schema'; +import { addLog } from '../../../common/system/log'; + +const appId = global.feConfigs.feishu_auth_robot_client_id; +const appSecret = global.feConfigs.feishu_auth_robot_client_secret; + +/** + * refresh feishu token + * refresh token before 10 minutes + */ +export async function refreshFeishuToken() { + try { + const datasets = await MongoDataset.find({ + type: { $in: ['feishuPrivate'] } + }); + + const refreshPromises = datasets + .filter((dataset) => dataset.feishuPrivateServer) + .map(async (dataset) => { + try { + const response = await axios.post<{ + access_token: string; + refresh_token: string; + expires_in: number; + }>( + 'https://open.feishu.cn/open-apis/authen/v2/oauth/token', + { + client_id: appId, + client_secret: appSecret, + grant_type: 'refresh_token', + refresh_token: dataset.feishuPrivateServer?.refresh_token + }, + { + headers: { + 'Content-Type': 'application/json' + } + } + ); + + if (!response?.data.access_token) { + addLog.error('Failed to refresh access token', { + datasetId: dataset._id + }); + return; + } + + // update dataset + await MongoDataset.findByIdAndUpdate(dataset._id, { + $set: { + feishuPrivateServer: { + user_access_token: response.data.access_token, + refresh_token: response.data.refresh_token, + outdate_time: Date.now() + response.data.expires_in * 1000 + } + } + }); + + addLog.info('Feishu token refreshed successfully', { + datasetId: dataset._id + }); + } catch (error) { + addLog.error('Refresh Feishu token error', { + error, + datasetId: dataset._id + }); + } + }); + + await Promise.all(refreshPromises); + } catch (error) { + addLog.error('Refresh Feishu tokens error', { error }); + } +} diff --git a/packages/service/core/dataset/read.ts b/packages/service/core/dataset/read.ts index 845b7cb05607..1d4b70a618a3 100644 --- a/packages/service/core/dataset/read.ts +++ b/packages/service/core/dataset/read.ts @@ -13,7 +13,8 @@ import { type APIFileServer, type FeishuShareServer, type YuqueServer, - type FeishuKnowledgeServer + type FeishuKnowledgeServer, + type FeishuPrivateServer } from '@fastgpt/global/core/dataset/apiDataset'; import { getApiDatasetRequest } from './apiDataset'; import Papa from 'papaparse'; @@ -74,6 +75,7 @@ export const readDatasetSourceRawText = async ({ feishuShareServer, yuqueServer, feishuKnowledgeServer, + feishuPrivateServer, customPdfParse, getFormatText }: { @@ -89,6 +91,7 @@ export const readDatasetSourceRawText = async ({ apiServer?: APIFileServer; // api dataset feishuShareServer?: FeishuShareServer; // feishu dataset feishuKnowledgeServer?: FeishuKnowledgeServer; // feishu dataset + feishuPrivateServer?: FeishuPrivateServer; // feishu dataset yuqueServer?: YuqueServer; // yuque dataset }): Promise<{ title?: string; @@ -135,6 +138,7 @@ export const readDatasetSourceRawText = async ({ feishuShareServer, yuqueServer, feishuKnowledgeServer, + feishuPrivateServer, apiFileId: sourceId, teamId, tmbId @@ -155,6 +159,7 @@ export const readApiServerFileContent = async ({ feishuShareServer, yuqueServer, feishuKnowledgeServer, + feishuPrivateServer, apiFileId, teamId, tmbId, @@ -164,6 +169,7 @@ export const readApiServerFileContent = async ({ feishuShareServer?: FeishuShareServer; yuqueServer?: YuqueServer; feishuKnowledgeServer?: FeishuKnowledgeServer; + feishuPrivateServer?: FeishuPrivateServer; apiFileId: string; teamId: string; tmbId: string; @@ -177,7 +183,8 @@ export const readApiServerFileContent = async ({ apiServer, yuqueServer, feishuShareServer, - feishuKnowledgeServer + feishuKnowledgeServer, + feishuPrivateServer }) ).getFileContent({ teamId, diff --git a/packages/service/core/dataset/schema.ts b/packages/service/core/dataset/schema.ts index c8b9a46834f8..87bfabbfcc2a 100644 --- a/packages/service/core/dataset/schema.ts +++ b/packages/service/core/dataset/schema.ts @@ -131,6 +131,7 @@ const DatasetSchema = new Schema({ feishuShareServer: Object, yuqueServer: Object, feishuKnowledgeServer: Object, + feishuPrivateServer: Object, // abandoned autoSync: Boolean, diff --git a/packages/web/components/common/Icon/constants.ts b/packages/web/components/common/Icon/constants.ts index 257ef278882a..df89b46fbba1 100644 --- a/packages/web/components/common/Icon/constants.ts +++ b/packages/web/components/common/Icon/constants.ts @@ -219,6 +219,10 @@ export const iconPaths = { import('./icons/core/dataset/feishuShareDatasetColor.svg'), 'core/dataset/feishuKnowledgeDatasetColor': () => import('./icons/core/dataset/feishuKnowledgeDatasetColor.svg'), + 'core/dataset/feishuPrivateDatasetColor': () => + import('./icons/core/dataset/feishuPrivateDatasetColor.svg'), + 'core/dataset/feishuPrivateDatasetOutline': () => + import('./icons/core/dataset/feishuPrivateDatasetOutline.svg'), 'core/dataset/feishuKnowledgeDatasetOutline': () => import('./icons/core/dataset/feishuKnowledgeDatasetOutline.svg'), 'core/dataset/feishuShareDatasetOutline': () => diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg new file mode 100644 index 000000000000..a40b9a1252b5 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg new file mode 100644 index 000000000000..74e4ab0a21fb --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/web/i18n/en/dataset.json b/packages/web/i18n/en/dataset.json index f68593508c5e..916037facdf6 100644 --- a/packages/web/i18n/en/dataset.json +++ b/packages/web/i18n/en/dataset.json @@ -79,9 +79,15 @@ "external_url": "File Access URL", "failedToLoadRootDirectories": "Failed to load root directories", "failedToLoadSubDirectories": "Failed to load subdirectories", + "feishu_auth_button": "Click Authorization", + "feishu_auth_description": "Please complete Feishu authorization first to use personal knowledge base functions", + "feishu_auth_title": "Need to authorize Feishu", "feishu_knowledge_dataset": "Feishu Knowledge Base", "feishu_knowledge_dataset_config": "Configure Feishu Knowledge Base", "feishu_knowledge_dataset_desc": "You can use Feishu Knowledge Base to build a knowledge base by configuring Feishu Knowledge Base. The knowledge base documents will not be stored secondaryly.", + "feishu_private_dataset": "Feishu personal knowledge base", + "feishu_private_dataset_config": "Configure Feishu's personal knowledge base", + "feishu_private_dataset_desc": "You can use Feishu personal files to build a knowledge base by configuring Feishu personal folder permissions, and the files will not be stored twice.", "feishu_share_dataset": "Feishu Shared Knowledge Base", "feishu_share_dataset_config": "Configure Feishu Shared Knowledge Base", "feishu_share_dataset_desc": "You can use Feishu Shared Folder permissions to build a knowledge base using Feishu Shared files, and the files will not be stored twice.", diff --git a/packages/web/i18n/zh-CN/dataset.json b/packages/web/i18n/zh-CN/dataset.json index c6cf549dc4b7..c3610aad767a 100644 --- a/packages/web/i18n/zh-CN/dataset.json +++ b/packages/web/i18n/zh-CN/dataset.json @@ -79,9 +79,15 @@ "external_url": "文件访问 URL", "failedToLoadRootDirectories": "加载根目录失败", "failedToLoadSubDirectories": "加载子目录失败", + "feishu_auth_button": "点击授权", + "feishu_auth_description": "请先完成飞书授权以使用个人知识库功能", + "feishu_auth_title": "需要飞书授权", "feishu_knowledge_dataset": "飞书知识库", "feishu_knowledge_dataset_config": "配置飞书知识库", "feishu_knowledge_dataset_desc": "可通过配置飞书知识库权限,使用飞书知识库构建知识库,知识库文档不会进行二次存储", + "feishu_private_dataset": "飞书个人知识库", + "feishu_private_dataset_config": "配置飞书个人知识库", + "feishu_private_dataset_desc": "可通过配置飞书个人文件夹权限,使用飞书个人文件构建知识库,文件不会进行二次存储", "feishu_share_dataset": "飞书共享知识库", "feishu_share_dataset_config": "配置飞书共享知识库", "feishu_share_dataset_desc": "可通过配置飞书共享文件夹权限,使用飞书共享文件构建知识库,文件不会进行二次存储", diff --git a/packages/web/i18n/zh-Hant/dataset.json b/packages/web/i18n/zh-Hant/dataset.json index 4351f13e161a..bc5f3c30c1da 100644 --- a/packages/web/i18n/zh-Hant/dataset.json +++ b/packages/web/i18n/zh-Hant/dataset.json @@ -77,9 +77,15 @@ "external_url": "檔案存取網址", "failedToLoadRootDirectories": "加載根目錄失敗", "failedToLoadSubDirectories": "加載子目錄失敗", + "feishu_auth_button": "點擊授權", + "feishu_auth_description": "請先完成飛書授權以使用個人知識庫功能", + "feishu_auth_title": "需要飛書授權", "feishu_knowledge_dataset": "飛書知識庫", "feishu_knowledge_dataset_config": "配置飛書知識庫", "feishu_knowledge_dataset_desc": "可通過配置飛書知識庫權限,使用飛書知識庫構建知識庫,知識庫文檔不會進行二次存儲", + "feishu_private_dataset": "飛書個人知識庫", + "feishu_private_dataset_config": "配置飛書個人知識庫", + "feishu_private_dataset_desc": "可通過配置飛書個人文件夾權限,使用飛書個人文件構建知識庫,文件不會進行二次存儲", "feishu_share_dataset": "飛書共享知識庫", "feishu_share_dataset_config": "配置飛書共享知識庫", "feishu_share_dataset_desc": "可通過配置飛書共享文件夾權限,使用飛書共享文件構建知識庫,文件不會進行二次存儲", diff --git a/projects/app/src/global/core/dataset/api.d.ts b/projects/app/src/global/core/dataset/api.d.ts index 7c23e06eab92..82e2910ccd2c 100644 --- a/projects/app/src/global/core/dataset/api.d.ts +++ b/projects/app/src/global/core/dataset/api.d.ts @@ -5,6 +5,7 @@ import type { import type { APIFileServer, FeishuShareServer, + FeishuPrivateServer, YuqueServer, FeishuKnowledgeServer } from '@fastgpt/global/core/dataset/apiDataset'; @@ -36,6 +37,7 @@ export type CreateDatasetParams = { feishuShareServer?: FeishuShareServer; yuqueServer?: YuqueServer; feishuKnowledgeServer?: FeishuKnowledgeServer; + feishuPrivateServer?: FeishuPrivateServer; }; export type RebuildEmbeddingProps = { diff --git a/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx b/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx index 7fe2fce32289..213693cd26b6 100644 --- a/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx +++ b/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx @@ -1,4 +1,4 @@ -import React, { useState, useMemo } from 'react'; +import React, { useState, useMemo, useEffect } from 'react'; import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; import { Flex, Input, Button, ModalBody, ModalFooter, Box } from '@chakra-ui/react'; import type { UseFormReturn } from 'react-hook-form'; @@ -7,6 +7,7 @@ import type { APIFileServer, FeishuShareServer, FeishuKnowledgeServer, + FeishuPrivateServer, YuqueServer } from '@fastgpt/global/core/dataset/apiDataset'; import { getApiDatasetPaths, getApiDatasetCatalog } from '@/web/core/dataset/api'; @@ -36,6 +37,7 @@ const ApiDatasetForm = ({ apiServer?: APIFileServer; feishuShareServer?: FeishuShareServer; feishuKnowledgeServer?: FeishuKnowledgeServer; + feishuPrivateServer?: FeishuPrivateServer; yuqueServer?: YuqueServer; }, any @@ -48,6 +50,7 @@ const ApiDatasetForm = ({ const feishuShareServer = watch('feishuShareServer'); const apiServer = watch('apiServer'); const feishuKnowledgeServer = watch('feishuKnowledgeServer'); + const feishuPrivateServer = watch('feishuPrivateServer'); const [pathNames, setPathNames] = useState(t('dataset:rootdirectory')); const [ @@ -55,7 +58,11 @@ const ApiDatasetForm = ({ { setTrue: openBaseurlSeletModal, setFalse: closeBaseurlSelectModal } ] = useBoolean(); - const parentId = yuqueServer?.basePath || apiServer?.basePath || feishuKnowledgeServer?.basePath; + const parentId = + yuqueServer?.basePath || + apiServer?.basePath || + feishuKnowledgeServer?.basePath || + feishuPrivateServer?.basePath; const canSelectBaseUrl = useMemo(() => { switch (type) { @@ -67,6 +74,8 @@ const ApiDatasetForm = ({ return feishuKnowledgeServer?.appId && feishuKnowledgeServer?.appSecret; case DatasetTypeEnum.apiDataset: return !!apiServer?.baseUrl; + case DatasetTypeEnum.feishuPrivate: + return feishuPrivateServer?.user_access_token; default: return false; } @@ -78,7 +87,8 @@ const ApiDatasetForm = ({ feishuShareServer?.appSecret, feishuKnowledgeServer?.appId, feishuKnowledgeServer?.appSecret, - apiServer?.baseUrl + apiServer?.baseUrl, + feishuPrivateServer?.user_access_token ]); // Unified function to get the current path @@ -89,7 +99,8 @@ const ApiDatasetForm = ({ ((yuqueServer && (!yuqueServer.userId || !yuqueServer?.token)) || (apiServer && !apiServer?.baseUrl) || (feishuKnowledgeServer && - (!feishuKnowledgeServer?.appId || !feishuKnowledgeServer?.appSecret))) + (!feishuKnowledgeServer?.appId || !feishuKnowledgeServer?.appSecret)) || + (feishuPrivateServer && !feishuPrivateServer?.user_access_token)) ) { return setPathNames(t('dataset:input_required_field_to_select_baseurl')); } @@ -103,7 +114,8 @@ const ApiDatasetForm = ({ yuqueServer, feishuShareServer, apiServer, - feishuKnowledgeServer + feishuKnowledgeServer, + feishuPrivateServer }); setPathNames(path); }, @@ -129,6 +141,9 @@ const ApiDatasetForm = ({ case DatasetTypeEnum.feishuKnowledge: setValue('feishuKnowledgeServer.basePath', value); break; + case DatasetTypeEnum.feishuPrivate: + setValue('feishuPrivateServer.basePath', value); + break; } closeBaseurlSelectModal(); @@ -185,6 +200,14 @@ const ApiDatasetForm = ({ basePath: '' }; break; + case DatasetTypeEnum.feishuPrivate: + params.feishuPrivateServer = { + user_access_token: feishuPrivateServer?.user_access_token || '', + refresh_token: feishuPrivateServer?.refresh_token || '', + outdate_time: feishuPrivateServer?.outdate_time || 0, + basePath: '' + }; + break; case DatasetTypeEnum.apiDataset: params.apiServer = { baseUrl: apiServer?.baseUrl || '', @@ -316,7 +339,12 @@ const ApiDatasetForm = ({ {renderDirectoryModal()} )} - + {type === DatasetTypeEnum.feishuPrivate && ( + <> + {/* {renderBaseUrlSelector()} + {renderDirectoryModal()} */} + + )} {type === DatasetTypeEnum.yuque && ( <> diff --git a/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx index bc0df1a3f18b..c4da516b52cd 100644 --- a/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx +++ b/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx @@ -418,6 +418,7 @@ const Header = ({ hasTrainingData }: { hasTrainingData: boolean }) => { {(datasetDetail?.type === DatasetTypeEnum.apiDataset || datasetDetail?.type === DatasetTypeEnum.feishuShare || datasetDetail?.type === DatasetTypeEnum.feishuKnowledge || + datasetDetail?.type === DatasetTypeEnum.feishuPrivate || datasetDetail?.type === DatasetTypeEnum.yuque) && ( { )} + + {datasetDetail.type === DatasetTypeEnum.feishuPrivate && <>} {datasetDetail.permission.hasManagePer && ( @@ -462,7 +464,8 @@ const Info = ({ datasetId }: { datasetId: string }) => { apiServer: data.apiServer, yuqueServer: data.yuqueServer, feishuShareServer: data.feishuShareServer, - feishuKnowledgeServer: data.feishuKnowledgeServer + feishuKnowledgeServer: data.feishuKnowledgeServer, + feishuPrivateServer: data.feishuPrivateServer }) } /> diff --git a/projects/app/src/pageComponents/dataset/list/CreateModal.tsx b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx index 2338c570ce6b..eb4b1d148817 100644 --- a/projects/app/src/pageComponents/dataset/list/CreateModal.tsx +++ b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx @@ -28,6 +28,7 @@ export type CreateDatasetType = | DatasetTypeEnum.websiteDataset | DatasetTypeEnum.feishuShare | DatasetTypeEnum.feishuKnowledge + | DatasetTypeEnum.feishuPrivate | DatasetTypeEnum.yuque; const CreateModal = ({ @@ -66,6 +67,10 @@ const CreateModal = ({ name: t('dataset:feishu_knowledge_dataset'), icon: 'core/dataset/feishuKnowledgeDatasetColor' }, + [DatasetTypeEnum.feishuPrivate]: { + name: t('dataset:feishu_private_dataset'), + icon: 'core/dataset/feishuPrivateDatasetColor' + }, [DatasetTypeEnum.yuque]: { name: t('dataset:yuque_dataset'), icon: 'core/dataset/yuqueDatasetColor' diff --git a/projects/app/src/pageComponents/dataset/list/SideTag.tsx b/projects/app/src/pageComponents/dataset/list/SideTag.tsx index 1364f5564b71..645147dfdd2a 100644 --- a/projects/app/src/pageComponents/dataset/list/SideTag.tsx +++ b/projects/app/src/pageComponents/dataset/list/SideTag.tsx @@ -29,6 +29,10 @@ const SideTag = ({ type, ...props }: { type: `${DatasetTypeEnum}` } & FlexProps) icon: 'core/dataset/feishuShareDatasetOutline', label: t('dataset:feishu_share_dataset') }, + [DatasetTypeEnum.feishuPrivate]: { + icon: 'core/dataset/feishuPrivateDatasetOutline', + label: t('dataset:feishu_private_dataset') + }, [DatasetTypeEnum.feishuKnowledge]: { icon: 'core/dataset/feishuKnowledgeDatasetOutline', label: t('dataset:feishu_knowledge_dataset') diff --git a/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts b/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts index 3effdb8728ad..2ca0606869d9 100644 --- a/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts +++ b/projects/app/src/pages/api/core/dataset/apiDataset/getCatalog.ts @@ -6,7 +6,8 @@ import type { APIFileServer, YuqueServer, FeishuShareServer, - FeishuKnowledgeServer + FeishuKnowledgeServer, + FeishuPrivateServer } from '@fastgpt/global/core/dataset/apiDataset'; import { type NextApiRequest } from 'next'; import { authCert } from '@fastgpt/service/support/permission/auth/common'; @@ -16,6 +17,7 @@ export type GetApiDatasetCataLogProps = { yuqueServer?: YuqueServer; feishuShareServer?: FeishuShareServer; feishuKnowledgeServer?: FeishuKnowledgeServer; + feishuPrivateServer?: FeishuPrivateServer; apiServer?: APIFileServer; }; @@ -28,7 +30,8 @@ async function handler(req: NextApiRequest) { yuqueServer, feishuShareServer, apiServer, - feishuKnowledgeServer + feishuKnowledgeServer, + feishuPrivateServer } = req.body; await authCert({ req, authToken: true }); @@ -38,7 +41,8 @@ async function handler(req: NextApiRequest) { feishuShareServer, yuqueServer, apiServer, - feishuKnowledgeServer + feishuKnowledgeServer, + feishuPrivateServer }) ).listFiles({ parentId, searchKey }); diff --git a/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts b/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts index c54560b00286..2719dfd024ad 100644 --- a/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts +++ b/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts @@ -6,7 +6,8 @@ import type { YuqueServer, FeishuShareServer, ApiDatasetDetailResponse, - FeishuKnowledgeServer + FeishuKnowledgeServer, + FeishuPrivateServer } from '@fastgpt/global/core/dataset/apiDataset'; import { getApiDatasetRequest } from '@fastgpt/service/core/dataset/apiDataset'; import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next'; @@ -23,6 +24,7 @@ export type GetApiDatasetPathBody = { feishuShareServer?: FeishuShareServer; apiServer?: APIFileServer; feishuKnowledgeServer?: FeishuKnowledgeServer; + feishuPrivateServer?: FeishuPrivateServer; }; export type GetApiDatasetPathResponse = string; @@ -52,49 +54,60 @@ async function handler( const { datasetId, parentId } = req.body; if (!parentId) return ''; - const { yuqueServer, feishuShareServer, apiServer, feishuKnowledgeServer } = await (async () => { - if (datasetId) { - const { dataset } = await authDataset({ - req, - authToken: true, - authApiKey: true, - per: ManagePermissionVal, - datasetId - }); - - return { - yuqueServer: req.body.yuqueServer - ? { ...req.body.yuqueServer, token: dataset.yuqueServer?.token ?? '' } - : dataset.yuqueServer, - feishuShareServer: req.body.feishuShareServer - ? { ...req.body.feishuShareServer, appSecret: dataset.feishuShareServer?.appSecret ?? '' } - : dataset.feishuShareServer, - apiServer: req.body.apiServer - ? { - ...req.body.apiServer, - authorization: dataset.apiServer?.authorization ?? '' - } - : dataset.apiServer, - feishuKnowledgeServer: req.body.feishuKnowledgeServer - ? { - ...req.body.feishuKnowledgeServer, - appSecret: dataset.feishuKnowledgeServer?.appSecret ?? '' - } - : dataset.feishuKnowledgeServer - }; - } else { - await authCert({ req, authToken: true }); - - return { - yuqueServer: req.body.yuqueServer, - feishuShareServer: req.body.feishuShareServer, - apiServer: req.body.apiServer, - feishuKnowledgeServer: req.body.feishuKnowledgeServer - }; - } - })(); - - if (feishuShareServer) { + const { yuqueServer, feishuShareServer, apiServer, feishuKnowledgeServer, feishuPrivateServer } = + await (async () => { + if (datasetId) { + const { dataset } = await authDataset({ + req, + authToken: true, + authApiKey: true, + per: ManagePermissionVal, + datasetId + }); + + return { + yuqueServer: req.body.yuqueServer + ? { ...req.body.yuqueServer, token: dataset.yuqueServer?.token ?? '' } + : dataset.yuqueServer, + feishuShareServer: req.body.feishuShareServer + ? { + ...req.body.feishuShareServer, + appSecret: dataset.feishuShareServer?.appSecret ?? '' + } + : dataset.feishuShareServer, + apiServer: req.body.apiServer + ? { + ...req.body.apiServer, + authorization: dataset.apiServer?.authorization ?? '' + } + : dataset.apiServer, + feishuKnowledgeServer: req.body.feishuKnowledgeServer + ? { + ...req.body.feishuKnowledgeServer, + appSecret: dataset.feishuKnowledgeServer?.appSecret ?? '' + } + : dataset.feishuKnowledgeServer, + feishuPrivateServer: req.body.feishuPrivateServer + ? { + ...req.body.feishuPrivateServer, + user_access_token: dataset.feishuPrivateServer?.user_access_token ?? '' + } + : dataset.feishuPrivateServer + }; + } else { + await authCert({ req, authToken: true }); + + return { + yuqueServer: req.body.yuqueServer, + feishuShareServer: req.body.feishuShareServer, + apiServer: req.body.apiServer, + feishuKnowledgeServer: req.body.feishuKnowledgeServer, + feishuPrivateServer: req.body.feishuPrivateServer + }; + } + })(); + + if (feishuShareServer || feishuPrivateServer) { return ''; } diff --git a/projects/app/src/pages/api/core/dataset/apiDataset/list.ts b/projects/app/src/pages/api/core/dataset/apiDataset/list.ts index 0fd92e1dda1e..ba87de55248b 100644 --- a/projects/app/src/pages/api/core/dataset/apiDataset/list.ts +++ b/projects/app/src/pages/api/core/dataset/apiDataset/list.ts @@ -27,13 +27,15 @@ async function handler(req: NextApiRequest) { const feishuShareServer = dataset.feishuShareServer; const yuqueServer = dataset.yuqueServer; const feishuKnowledgeServer = dataset.feishuKnowledgeServer; + const feishuPrivateServer = dataset.feishuPrivateServer; return ( await getApiDatasetRequest({ apiServer, yuqueServer, feishuShareServer, - feishuKnowledgeServer + feishuKnowledgeServer, + feishuPrivateServer }) ).listFiles({ searchKey, parentId }); } diff --git a/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts b/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts index df24e9dabe3b..327dbaf72b9b 100644 --- a/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts +++ b/projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts @@ -27,6 +27,7 @@ async function handler(req: NextApiRequest): CreateCollectionResponse { const feishuShareServer = dataset.feishuShareServer; const yuqueServer = dataset.yuqueServer; const feishuKnowledgeServer = dataset.feishuKnowledgeServer; + const feishuPrivateServer = dataset.feishuPrivateServer; // Auth same apiFileId const storeCol = await MongoDatasetCollection.findOne( @@ -47,6 +48,7 @@ async function handler(req: NextApiRequest): CreateCollectionResponse { feishuShareServer, feishuKnowledgeServer, yuqueServer, + feishuPrivateServer, apiFileId, teamId, tmbId, diff --git a/projects/app/src/pages/api/core/dataset/collection/read.ts b/projects/app/src/pages/api/core/dataset/collection/read.ts index 40ce482dccaa..4989b4228c17 100644 --- a/projects/app/src/pages/api/core/dataset/collection/read.ts +++ b/projects/app/src/pages/api/core/dataset/collection/read.ts @@ -98,13 +98,15 @@ async function handler( const feishuShareServer = collection.dataset.feishuShareServer; const yuqueServer = collection.dataset.yuqueServer; const feishuKnowledgeServer = collection.dataset.feishuKnowledgeServer; + const feishuPrivateServer = collection.dataset.feishuPrivateServer; return ( await getApiDatasetRequest({ apiServer, feishuShareServer, feishuKnowledgeServer, - yuqueServer + yuqueServer, + feishuPrivateServer }) ).getFilePreviewUrl({ apiFileId: collection.apiFileId diff --git a/projects/app/src/pages/api/core/dataset/create.ts b/projects/app/src/pages/api/core/dataset/create.ts index 91368b6cda00..0786910815a7 100644 --- a/projects/app/src/pages/api/core/dataset/create.ts +++ b/projects/app/src/pages/api/core/dataset/create.ts @@ -38,7 +38,8 @@ async function handler( apiServer, feishuShareServer, yuqueServer, - feishuKnowledgeServer + feishuKnowledgeServer, + feishuPrivateServer } = req.body; // auth @@ -87,6 +88,7 @@ async function handler( apiServer, feishuShareServer, feishuKnowledgeServer, + feishuPrivateServer, yuqueServer } ], diff --git a/projects/app/src/pages/api/core/dataset/detail.ts b/projects/app/src/pages/api/core/dataset/detail.ts index 5b9fe40ebe6c..361ea029f21a 100644 --- a/projects/app/src/pages/api/core/dataset/detail.ts +++ b/projects/app/src/pages/api/core/dataset/detail.ts @@ -73,6 +73,14 @@ async function handler(req: ApiRequestProps): Promise { basePath: dataset.feishuKnowledgeServer.basePath } : undefined, + feishuPrivateServer: dataset.feishuPrivateServer + ? { + user_access_token: dataset.feishuPrivateServer.user_access_token, + refresh_token: dataset.feishuPrivateServer.refresh_token, + outdate_time: dataset.feishuPrivateServer.outdate_time, + basePath: dataset.feishuPrivateServer.basePath + } + : undefined, permission, vectorModel: getEmbeddingModel(dataset.vectorModel), agentModel: getLLMModel(dataset.agentModel), diff --git a/projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts b/projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts new file mode 100644 index 000000000000..3acb3640fc04 --- /dev/null +++ b/projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts @@ -0,0 +1,67 @@ +import axios from 'axios'; +import { MongoDataset } from '@fastgpt/service/core/dataset/schema'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; +import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; + +const appId = global.feConfigs.feishu_auth_robot_client_id; +const appSecret = global.feConfigs.feishu_auth_robot_client_secret; + +export async function getUserAccessToken(code: string, datasetId: string) { + if (!appId || !appSecret) { + throw new Error('FEISHU_APP_ID or FEISHU_APP_SECRET is not set'); + } + if (!code || !datasetId) { + throw new Error('code or datasetId is not set'); + } + const dataset = await MongoDataset.findById(datasetId); + if (!dataset) { + throw new Error('Dataset not found'); + } + + // 检查数据集类型 + if (dataset.type !== DatasetTypeEnum.feishuPrivate) { + throw new Error('Dataset type is not feishu private'); + } + + try { + const response = await axios.post<{ + access_token: string; + refresh_token: string; + expires_in: number; + }>( + 'https://open.feishu.cn/open-apis/authen/v2/oauth/token', + { + client_id: appId, + client_secret: appSecret, + grant_type: 'authorization_code', + code, + redirect_uri: 'http://localhost:3000/api/core/dataset/feishu/oauth', + code_verifier: 'TxYmzM4PHLBlqm5NtnCmwxMH8mFlRWl_ipie3O0aVzo' + }, + { + headers: { + 'Content-Type': 'application/json' + } + } + ); + + if (!response?.data.access_token) { + throw new Error('Failed to get access token'); + } + + await MongoDataset.findByIdAndUpdate(datasetId, { + $set: { + [`feishuPrivateServer`]: { + user_access_token: response.data.access_token, + refresh_token: response.data.refresh_token, + outdate_time: Date.now() + response.data.expires_in * 1000 + } + } + }); + + return response.data.access_token; + } catch (error) { + console.error('Get Feishu Access Token Error:', error); + throw error; + } +} diff --git a/projects/app/src/pages/api/core/dataset/feishu/oauth.ts b/projects/app/src/pages/api/core/dataset/feishu/oauth.ts new file mode 100644 index 000000000000..fe72a868dd37 --- /dev/null +++ b/projects/app/src/pages/api/core/dataset/feishu/oauth.ts @@ -0,0 +1,28 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { getUserAccessToken } from './getUserAccessToken'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + const { code, state } = req.query; + + // await authCert({ req, authRoot: true }); + + if (!code || !state) { + return res.status(400).json({ error: 'Missing code or state' }); + } + const stateData = JSON.parse(decodeURIComponent(state as string)); + const { returnUrl, datasetId } = stateData; + + // get user_access_token + const user_access_token = await getUserAccessToken(code as string, datasetId); + + // redirect to original page + const redirectUrl = new URL(returnUrl, 'http://localhost:3000'); + + res.redirect(redirectUrl.toString()); + } catch (error) { + console.error('Feishu OAuth Error:', error); + res.status(500).json({ error: 'Internal Server Error' }); + } +} diff --git a/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts b/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts index 4314206cfb9f..17012a951fb6 100644 --- a/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts +++ b/projects/app/src/pages/api/core/dataset/file/getPreviewChunks.ts @@ -125,6 +125,7 @@ async function handler( feishuShareServer: dataset.feishuShareServer, yuqueServer: dataset.yuqueServer, feishuKnowledgeServer: dataset.feishuKnowledgeServer, + feishuPrivateServer: dataset.feishuPrivateServer, externalFileId, customPdfParse }); diff --git a/projects/app/src/pages/api/core/dataset/update.ts b/projects/app/src/pages/api/core/dataset/update.ts index 08171ba2d5ad..c556df176f44 100644 --- a/projects/app/src/pages/api/core/dataset/update.ts +++ b/projects/app/src/pages/api/core/dataset/update.ts @@ -70,6 +70,7 @@ async function handler( yuqueServer, feishuShareServer, feishuKnowledgeServer, + feishuPrivateServer, autoSync, chunkSettings } = req.body; @@ -193,6 +194,9 @@ async function handler( ...(!!feishuKnowledgeServer?.basePath !== undefined && { 'feishuKnowledgeServer.basePath': feishuKnowledgeServer?.basePath }), + ...(!!feishuPrivateServer?.basePath !== undefined && { + 'feishuPrivateServer.basePath': feishuPrivateServer?.basePath + }), ...(isMove && { inheritPermission: true }), ...(typeof autoSync === 'boolean' && { autoSync }) }, diff --git a/projects/app/src/pages/dataset/detail/index.tsx b/projects/app/src/pages/dataset/detail/index.tsx index 0decfb61730a..bbb58ee19f0e 100644 --- a/projects/app/src/pages/dataset/detail/index.tsx +++ b/projects/app/src/pages/dataset/detail/index.tsx @@ -1,7 +1,19 @@ 'use client'; -import React from 'react'; +import React, { useEffect } from 'react'; import { useRouter } from 'next/router'; -import { Box, Flex, type FlexProps } from '@chakra-ui/react'; +import { + Box, + Flex, + type FlexProps, + useDisclosure, + Modal, + ModalOverlay, + ModalContent, + ModalHeader, + ModalBody, + Button, + ModalFooter +} from '@chakra-ui/react'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { getErrText } from '@fastgpt/global/common/error/utils'; import dynamic from 'next/dynamic'; @@ -19,7 +31,9 @@ import CollectionPageContextProvider from '@/pageComponents/dataset/detail/Colle import { useContextSelector } from 'use-context-selector'; import NextHead from '@/components/common/NextHead'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; +import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; const CollectionCard = dynamic( () => import('@/pageComponents/dataset/detail/CollectionCard/index') @@ -50,8 +64,22 @@ const Detail = ({ datasetId, currentTab }: Props) => { const { toast } = useToast(); const router = useRouter(); const { isPc } = useSystem(); + const { feConfigs } = useSystemStore(); + const datasetDetail = useContextSelector(DatasetPageContext, (v) => v.datasetDetail); const loadDatasetDetail = useContextSelector(DatasetPageContext, (v) => v.loadDatasetDetail); + const { isOpen, onOpen, onClose } = useDisclosure(); + const appid = feConfigs?.feishu_auth_robot_client_id; + + // check feishu auth status + useEffect(() => { + if ( + datasetDetail?.type === DatasetTypeEnum.feishuPrivate && + !datasetDetail?.feishuPrivateServer?.user_access_token + ) { + onOpen(); + } + }, [datasetDetail?.type, datasetDetail?.feishuPrivateServer?.user_access_token, onOpen]); useRequest2(() => loadDatasetDetail(datasetId), { onError(err: any) { @@ -68,6 +96,30 @@ const Detail = ({ datasetId, currentTab }: Props) => { <> + {/* 飞书授权弹窗 */} + + + + {t('dataset:feishu_auth_title')} + {t('dataset:feishu_auth_description')} + + + {t('dataset:feishu_auth_button')} + + + + + + {isPc ? ( diff --git a/projects/app/src/pages/dataset/list/index.tsx b/projects/app/src/pages/dataset/list/index.tsx index c51d2ea27ba7..f5b90169b14c 100644 --- a/projects/app/src/pages/dataset/list/index.tsx +++ b/projects/app/src/pages/dataset/list/index.tsx @@ -194,6 +194,16 @@ const Dataset = () => { } ] : []), + ...(feConfigs?.show_dataset_feishu !== false + ? [ + { + icon: 'core/dataset/feishuPrivateDatasetColor', + label: t('dataset:feishu_private_dataset'), + description: t('dataset:feishu_private_dataset_desc'), + onClick: () => onSelectDatasetType(DatasetTypeEnum.feishuPrivate) + } + ] + : []), ...(feConfigs?.show_dataset_yuque !== false ? [ { diff --git a/projects/app/src/service/common/system/cron.ts b/projects/app/src/service/common/system/cron.ts index 2a08da17fdb9..c899d63671e2 100644 --- a/projects/app/src/service/common/system/cron.ts +++ b/projects/app/src/service/common/system/cron.ts @@ -12,6 +12,7 @@ import { TimerIdEnum } from '@fastgpt/service/common/system/timerLock/constants' import { addHours } from 'date-fns'; import { getScheduleTriggerApp } from '@/service/core/app/utils'; import { clearExpiredRawTextBufferCron } from '@fastgpt/service/common/buffer/rawText/controller'; +import { refreshFeishuToken } from '@fastgpt/service/core/dataset/feishuPrivateDataset/refreshToken'; // Try to run train every minute const setTrainingQueueCron = () => { @@ -20,6 +21,13 @@ const setTrainingQueueCron = () => { }); }; +// Refresh feishu token every 110 minutes +const setRefreshFeishuTokenCron = () => { + setCron('*/110 * * * *', () => { + refreshFeishuToken(); + }); +}; + // Clear tmp upload files every ten minutes const setClearTmpUploadFilesCron = () => { // Clear tmp upload files every ten minutes @@ -85,4 +93,5 @@ export const startCron = () => { clearInvalidDataCron(); scheduleTriggerAppCron(); clearExpiredRawTextBufferCron(); + setRefreshFeishuTokenCron(); }; diff --git a/projects/app/src/web/core/dataset/api.ts b/projects/app/src/web/core/dataset/api.ts index adbc5f8ff875..98b7a10b7557 100644 --- a/projects/app/src/web/core/dataset/api.ts +++ b/projects/app/src/web/core/dataset/api.ts @@ -292,3 +292,6 @@ export const getApiDatasetCatalog = (data: GetApiDatasetCataLogProps) => export const getApiDatasetPaths = (data: GetApiDatasetPathBody) => POST('/core/dataset/apiDataset/getPathNames', data); + +export const getUserAccessToken = (data: { code: string; datasetId: string }) => + POST('/core/dataset/feishu/getUserAccessToken', data); diff --git a/projects/app/src/web/core/dataset/constants.ts b/projects/app/src/web/core/dataset/constants.ts index adef75972d33..328f94fdf8f5 100644 --- a/projects/app/src/web/core/dataset/constants.ts +++ b/projects/app/src/web/core/dataset/constants.ts @@ -72,7 +72,8 @@ export const datasetTypeCourseMap: Record<`${DatasetTypeEnum}`, string> = { [DatasetTypeEnum.apiDataset]: '/docs/guide/knowledge_base/api_dataset/', [DatasetTypeEnum.websiteDataset]: '/docs/guide/knowledge_base/websync/', [DatasetTypeEnum.feishuShare]: '/docs/guide/knowledge_base/lark_share_dataset/', - [DatasetTypeEnum.feishuKnowledge]: '/docs/guide/knowledge_base/lark_knowledge_dataset/', + [DatasetTypeEnum.feishuKnowledge]: '/docs/guide/knowledge_base/lark_dataset/', + [DatasetTypeEnum.feishuPrivate]: '/docs/guide/knowledge_base/lark_private_dataset/', [DatasetTypeEnum.yuque]: '/docs/guide/knowledge_base/yuque_dataset/', [DatasetTypeEnum.externalFile]: '' }; diff --git a/projects/app/src/web/core/dataset/context/datasetPageContext.tsx b/projects/app/src/web/core/dataset/context/datasetPageContext.tsx index eb15ffecfb3b..34d670fada97 100644 --- a/projects/app/src/web/core/dataset/context/datasetPageContext.tsx +++ b/projects/app/src/web/core/dataset/context/datasetPageContext.tsx @@ -130,7 +130,15 @@ export const DatasetPageContextProvider = ({ appSecret: '', basePath: data.feishuKnowledgeServer.basePath } - : state.feishuKnowledgeServer + : state.feishuKnowledgeServer, + feishuPrivateServer: data.feishuPrivateServer + ? { + user_access_token: data.feishuPrivateServer.user_access_token, + refresh_token: data.feishuPrivateServer.refresh_token, + outdate_time: data.feishuPrivateServer.outdate_time, + basePath: data.feishuPrivateServer.basePath + } + : state.feishuPrivateServer })); } }; From 6a46e9705f35ae9bdee41bd3e81cc0de9ee39ac1 Mon Sep 17 00:00:00 2001 From: dreamer6680 <146868355@qq.com> Date: Fri, 30 May 2025 17:49:21 +0800 Subject: [PATCH 6/9] add feishu oauth for feishudataset --- packages/global/core/dataset/apiDataset.d.ts | 10 +- .../dataset/feishuKnowledgeDataset/api.ts | 10 +- .../core/dataset/feishuPrivateDataset/api.ts | 17 +- .../feishuPrivateDataset/refreshToken.ts | 26 ++- .../core/dataset/feishuShareDataset/api.ts | 44 ++--- .../dataset/feishuKnowledgeDatasetColor.svg | 7 +- .../dataset/feishuKnowledgeDatasetOutline.svg | 5 +- .../dataset/feishuPrivateDatasetColor.svg | 5 +- .../dataset/feishuPrivateDatasetOutline.svg | 12 +- packages/web/i18n/en/dataset.json | 6 +- packages/web/i18n/zh-CN/dataset.json | 12 +- packages/web/i18n/zh-Hant/dataset.json | 6 +- projects/app/data/config.json | 4 +- .../pageComponents/dataset/ApiDatasetForm.tsx | 180 ++++++++---------- .../dataset/detail/Info/index.tsx | 102 +++++++++- .../core/dataset/apiDataset/getPathNames.ts | 11 +- .../collection/create/reTrainingCollection.ts | 1 + .../app/src/pages/api/core/dataset/detail.ts | 10 +- .../core/dataset/feishu/getUserAccessToken.ts | 11 +- .../pages/api/core/dataset/feishu/oauth.ts | 30 ++- .../app/src/pages/api/core/dataset/update.ts | 10 - .../app/src/pages/dataset/detail/index.tsx | 39 ---- .../app/src/web/core/dataset/constants.ts | 4 +- .../dataset/context/datasetPageContext.tsx | 10 +- 24 files changed, 327 insertions(+), 245 deletions(-) diff --git a/packages/global/core/dataset/apiDataset.d.ts b/packages/global/core/dataset/apiDataset.d.ts index 60b8beb1c083..105ebc84bece 100644 --- a/packages/global/core/dataset/apiDataset.d.ts +++ b/packages/global/core/dataset/apiDataset.d.ts @@ -18,13 +18,15 @@ export type APIFileServer = { basePath?: string; }; export type FeishuShareServer = { - appId: string; - appSecret?: string; + user_access_token: string; + refresh_token: string; + outdate_time: number; folderToken: string; }; export type FeishuKnowledgeServer = { - appId: string; - appSecret: string; + user_access_token: string; + refresh_token: string; + outdate_time: number; basePath?: string; }; diff --git a/packages/service/core/dataset/feishuKnowledgeDataset/api.ts b/packages/service/core/dataset/feishuKnowledgeDataset/api.ts index bc12348ddef0..13f2b9c23ca1 100644 --- a/packages/service/core/dataset/feishuKnowledgeDataset/api.ts +++ b/packages/service/core/dataset/feishuKnowledgeDataset/api.ts @@ -121,15 +121,7 @@ export const useFeishuKnowledgeDatasetRequest = ({ // 添加请求拦截器 instance.interceptors.request.use(async (config) => { if (!config.headers.Authorization) { - const { data } = await axios.post<{ tenant_access_token: string }>( - `${feishuBaseUrl}/open-apis/auth/v3/tenant_access_token/internal`, - { - app_id: feishuKnowledgeServer.appId, - app_secret: feishuKnowledgeServer.appSecret - } - ); - - config.headers['Authorization'] = `Bearer ${data.tenant_access_token}`; + config.headers['Authorization'] = `Bearer ${feishuKnowledgeServer.user_access_token}`; config.headers['Content-Type'] = 'application/json; charset=utf-8'; } return config; diff --git a/packages/service/core/dataset/feishuPrivateDataset/api.ts b/packages/service/core/dataset/feishuPrivateDataset/api.ts index 6873f24e365a..47adfb643391 100644 --- a/packages/service/core/dataset/feishuPrivateDataset/api.ts +++ b/packages/service/core/dataset/feishuPrivateDataset/api.ts @@ -130,7 +130,10 @@ export const useFeishuPrivateDatasetRequest = ({ return data.files; }; - const parent = parentId?.split('-')[1]; + if (!parentId) { + parentId = feishuPrivateServer.basePath?.split('-').slice(-1)[0]; + } + const parent = parentId ? parentId.split('-').slice(-1)[0] : undefined; const allFiles = await fetchFiles(undefined, parent); @@ -147,8 +150,8 @@ export const useFeishuPrivateDatasetRequest = ({ .map((file) => ({ id: file.type === 'shortcut' - ? file.parent_token + '-' + file.shortcut_info!.target_token - : file.parent_token + '-' + file.token, + ? parentId + '-' + file.shortcut_info!.target_token + : parentId + '-' + file.token, parentId: parentId, name: file.name, type: file.type === 'folder' ? ('folder' as const) : ('file' as const), @@ -199,15 +202,15 @@ export const useFeishuPrivateDatasetRequest = ({ }: { apiFileId: string; }): Promise => { - const parentId = apiFileId.split('-')[0]; - const fileId = apiFileId.split('-')[1]; + const parentId = apiFileId.split('-').slice(0, -1).join('-'); + const fileId = apiFileId.split('-').slice(-1)[0]; const fileDetail = await request( `/open-apis/drive/explorer/v2/folder/${fileId}/meta`, {}, 'GET' ); - console.log('fileDetail', fileDetail); + if (!fileDetail) { return { name: '', @@ -218,7 +221,7 @@ export const useFeishuPrivateDatasetRequest = ({ return { name: fileDetail?.name, - parentId: null, + parentId: parentId !== 'null' ? parentId : null, id: apiFileId }; }; diff --git a/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts b/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts index 407aa045b97f..539a3ee0185c 100644 --- a/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts +++ b/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts @@ -2,9 +2,6 @@ import axios from 'axios'; import { MongoDataset } from '../schema'; import { addLog } from '../../../common/system/log'; -const appId = global.feConfigs.feishu_auth_robot_client_id; -const appSecret = global.feConfigs.feishu_auth_robot_client_secret; - /** * refresh feishu token * refresh token before 10 minutes @@ -12,13 +9,22 @@ const appSecret = global.feConfigs.feishu_auth_robot_client_secret; export async function refreshFeishuToken() { try { const datasets = await MongoDataset.find({ - type: { $in: ['feishuPrivate'] } + type: { $in: ['feishuPrivate', 'feishuShare', 'feishuKnowledge'] } }); + const appId = global.feConfigs?.feishu_auth_robot_client_id; + const appSecret = global.feConfigs?.feishu_auth_robot_client_secret; + const refreshPromises = datasets - .filter((dataset) => dataset.feishuPrivateServer) + .filter( + (dataset) => + (dataset.type === 'feishuPrivate' && dataset.feishuPrivateServer) || + (dataset.type === 'feishuShare' && dataset.feishuShareServer) || + (dataset.type === 'feishuKnowledge' && dataset.feishuKnowledgeServer) + ) .map(async (dataset) => { try { + const serverKey = `${dataset.type}Server` as keyof typeof dataset; const response = await axios.post<{ access_token: string; refresh_token: string; @@ -29,11 +35,11 @@ export async function refreshFeishuToken() { client_id: appId, client_secret: appSecret, grant_type: 'refresh_token', - refresh_token: dataset.feishuPrivateServer?.refresh_token + refresh_token: dataset[serverKey]?.refresh_token }, { headers: { - 'Content-Type': 'application/json' + 'Content-Type': 'application/json; charset=utf-8' } } ); @@ -48,7 +54,7 @@ export async function refreshFeishuToken() { // update dataset await MongoDataset.findByIdAndUpdate(dataset._id, { $set: { - feishuPrivateServer: { + [serverKey]: { user_access_token: response.data.access_token, refresh_token: response.data.refresh_token, outdate_time: Date.now() + response.data.expires_in * 1000 @@ -61,8 +67,8 @@ export async function refreshFeishuToken() { }); } catch (error) { addLog.error('Refresh Feishu token error', { - error, - datasetId: dataset._id + datasetId: dataset._id, + error: JSON.stringify(error) }); } }); diff --git a/packages/service/core/dataset/feishuShareDataset/api.ts b/packages/service/core/dataset/feishuShareDataset/api.ts index 16ccf9aa10d2..6479e0944d81 100644 --- a/packages/service/core/dataset/feishuShareDataset/api.ts +++ b/packages/service/core/dataset/feishuShareDataset/api.ts @@ -24,6 +24,10 @@ type FeishuFileListResponse = { created_time: number; url: string; owner_id: string; + shortcut_info?: { + target_token: string; + target_type: string; + }; }[]; has_more: boolean; next_page_token: string; @@ -44,15 +48,7 @@ export const useFeishuShareDatasetRequest = ({ // 添加请求拦截器 instance.interceptors.request.use(async (config) => { if (!config.headers.Authorization) { - const { data } = await axios.post<{ tenant_access_token: string }>( - `${feishuBaseUrl}/open-apis/auth/v3/tenant_access_token/internal`, - { - app_id: feishuShareServer.appId, - app_secret: feishuShareServer.appSecret - } - ); - - config.headers['Authorization'] = `Bearer ${data.tenant_access_token}`; + config.headers['Authorization'] = `Bearer ${feishuShareServer.user_access_token}`; config.headers['Content-Type'] = 'application/json; charset=utf-8'; } return config; @@ -131,10 +127,18 @@ export const useFeishuShareDatasetRequest = ({ const allFiles = await fetchFiles(); return allFiles - .filter((file) => ['folder', 'docx'].includes(file.type)) + .filter((file) => { + if (file.type === 'shortcut') { + return ( + file.shortcut_info?.target_type === 'docx' || + file.shortcut_info?.target_type === 'folder' + ); + } + return file.type === 'folder' || file.type === 'docx'; + }) .map((file) => ({ - id: file.token, - parentId: file.parent_token, + id: file.type === 'shortcut' ? file.shortcut_info!.target_token : file.token, + parentId: parentId, name: file.name, type: file.type === 'folder' ? ('folder' as const) : ('file' as const), hasChild: file.type === 'folder', @@ -148,17 +152,10 @@ export const useFeishuShareDatasetRequest = ({ }: { apiFileId: string; }): Promise => { + const fileId = apiFileId.split('-')[1]; const [{ content }, { document }] = await Promise.all([ - request<{ content: string }>( - `/open-apis/docx/v1/documents/${apiFileId}/raw_content`, - {}, - 'GET' - ), - request<{ document: { title: string } }>( - `/open-apis/docx/v1/documents/${apiFileId}`, - {}, - 'GET' - ) + request<{ content: string }>(`/open-apis/docx/v1/documents/${fileId}/raw_content`, {}, 'GET'), + request<{ document: { title: string } }>(`/open-apis/docx/v1/documents/${fileId}`, {}, 'GET') ]); return { @@ -168,12 +165,13 @@ export const useFeishuShareDatasetRequest = ({ }; const getFilePreviewUrl = async ({ apiFileId }: { apiFileId: string }): Promise => { + const fileId = apiFileId.split('-')[1]; const { metas } = await request<{ metas: { url: string }[] }>( `/open-apis/drive/v1/metas/batch_query`, { request_docs: [ { - doc_token: apiFileId, + doc_token: fileId, doc_type: 'docx' } ], diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg index b4e0b7606eee..493b522f7790 100644 --- a/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetColor.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg index 85f267d495e1..ab86fd34a4bc 100644 --- a/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuKnowledgeDatasetOutline.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg index a40b9a1252b5..b38bd6228d7b 100644 --- a/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetColor.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg index 74e4ab0a21fb..70119e2246da 100644 --- a/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg +++ b/packages/web/components/common/Icon/icons/core/dataset/feishuPrivateDatasetOutline.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/packages/web/i18n/en/dataset.json b/packages/web/i18n/en/dataset.json index 916037facdf6..cdc2bc5a5ba2 100644 --- a/packages/web/i18n/en/dataset.json +++ b/packages/web/i18n/en/dataset.json @@ -79,9 +79,10 @@ "external_url": "File Access URL", "failedToLoadRootDirectories": "Failed to load root directories", "failedToLoadSubDirectories": "Failed to load subdirectories", - "feishu_auth_button": "Click Authorization", + "feishu_auth_button": "Authorization", "feishu_auth_description": "Please complete Feishu authorization first to use personal knowledge base functions", "feishu_auth_title": "Need to authorize Feishu", + "feishu_change_auth_button": "replace", "feishu_knowledge_dataset": "Feishu Knowledge Base", "feishu_knowledge_dataset_config": "Configure Feishu Knowledge Base", "feishu_knowledge_dataset_desc": "You can use Feishu Knowledge Base to build a knowledge base by configuring Feishu Knowledge Base. The knowledge base documents will not be stored secondaryly.", @@ -96,6 +97,8 @@ "filename": "Filename", "folder_dataset": "Folder", "getDirectoryFailed": "Get directory failed", + "have_auth": "Authorized", + "have_not_auth": "Unauthorized", "image_auto_parse": "Automatic image indexing", "image_auto_parse_tips": "Call VLM to automatically label the pictures in the document and generate additional search indexes", "image_training_queue": "Queue of image processing", @@ -122,6 +125,7 @@ "noSelectedFolder": "No selected folder", "noSelectedId": "No selected ID", "noValidId": "No valid ID", + "not_set": "Not configured", "open_auto_sync": "After scheduled synchronization is turned on, the system will try to synchronize the collection from time to time every day. During the collection synchronization period, the collection data will not be searched.", "other_dataset": "Third-party knowledge base", "paragraph_max_deep": "Maximum paragraph depth", diff --git a/packages/web/i18n/zh-CN/dataset.json b/packages/web/i18n/zh-CN/dataset.json index c3610aad767a..a059b2aa9397 100644 --- a/packages/web/i18n/zh-CN/dataset.json +++ b/packages/web/i18n/zh-CN/dataset.json @@ -79,23 +79,26 @@ "external_url": "文件访问 URL", "failedToLoadRootDirectories": "加载根目录失败", "failedToLoadSubDirectories": "加载子目录失败", - "feishu_auth_button": "点击授权", + "feishu_auth_button": "授权", "feishu_auth_description": "请先完成飞书授权以使用个人知识库功能", "feishu_auth_title": "需要飞书授权", + "feishu_change_auth_button": "更换", "feishu_knowledge_dataset": "飞书知识库", "feishu_knowledge_dataset_config": "配置飞书知识库", - "feishu_knowledge_dataset_desc": "可通过配置飞书知识库权限,使用飞书知识库构建知识库,知识库文档不会进行二次存储", + "feishu_knowledge_dataset_desc": "使用飞书知识库构建知识库,知识库文档不会进行二次存储", "feishu_private_dataset": "飞书个人知识库", "feishu_private_dataset_config": "配置飞书个人知识库", - "feishu_private_dataset_desc": "可通过配置飞书个人文件夹权限,使用飞书个人文件构建知识库,文件不会进行二次存储", + "feishu_private_dataset_desc": "使用飞书个人文件构建知识库,文件不会进行二次存储", "feishu_share_dataset": "飞书共享知识库", "feishu_share_dataset_config": "配置飞书共享知识库", - "feishu_share_dataset_desc": "可通过配置飞书共享文件夹权限,使用飞书共享文件构建知识库,文件不会进行二次存储", + "feishu_share_dataset_desc": "使用飞书共享文件构建知识库,文件不会进行二次存储", "file_list": "文件列表", "file_model_function_tip": "用于增强索引和 QA 生成", "filename": "文件名", "folder_dataset": "文件夹", "getDirectoryFailed": "获取目录失败", + "have_auth": "已授权", + "have_not_auth": "未授权", "image_auto_parse": "图片自动索引", "image_auto_parse_tips": "调用 VLM 自动标注文档里的图片,并生成额外的检索索引", "image_training_queue": "图片处理排队", @@ -122,6 +125,7 @@ "noSelectedFolder": "没有选择文件夹", "noSelectedId": "没有选择 ID", "noValidId": "没有有效的 ID", + "not_set": "未配置", "open_auto_sync": "开启定时同步后,系统将会每天不定时尝试同步集合,集合同步期间,会出现无法搜索到该集合数据现象。", "other_dataset": "第三方知识库", "paragraph_max_deep": "最大段落深度", diff --git a/packages/web/i18n/zh-Hant/dataset.json b/packages/web/i18n/zh-Hant/dataset.json index bc5f3c30c1da..18ff87527a84 100644 --- a/packages/web/i18n/zh-Hant/dataset.json +++ b/packages/web/i18n/zh-Hant/dataset.json @@ -77,9 +77,10 @@ "external_url": "檔案存取網址", "failedToLoadRootDirectories": "加載根目錄失敗", "failedToLoadSubDirectories": "加載子目錄失敗", - "feishu_auth_button": "點擊授權", + "feishu_auth_button": "授權", "feishu_auth_description": "請先完成飛書授權以使用個人知識庫功能", "feishu_auth_title": "需要飛書授權", + "feishu_change_auth_button": "更換", "feishu_knowledge_dataset": "飛書知識庫", "feishu_knowledge_dataset_config": "配置飛書知識庫", "feishu_knowledge_dataset_desc": "可通過配置飛書知識庫權限,使用飛書知識庫構建知識庫,知識庫文檔不會進行二次存儲", @@ -94,6 +95,8 @@ "filename": "檔案名稱", "folder_dataset": "資料夾", "getDirectoryFailed": "獲取目錄失敗", + "have_auth": "已授權", + "have_not_auth": "未授權", "image_auto_parse": "圖片自動索引", "image_auto_parse_tips": "呼叫 VLM 自動標註文件裡的圖片,並生成額外的檢索索引", "image_training_queue": "圖片處理排隊", @@ -120,6 +123,7 @@ "noSelectedFolder": "沒有選擇文件夾", "noSelectedId": "沒有選擇 ID", "noValidId": "沒有有效的 ID", + "not_set": "未配置", "open_auto_sync": "開啟定時同步後,系統將每天不定時嘗試同步集合,集合同步期間,會出現無法搜尋到該集合資料現象。", "other_dataset": "第三方知識庫", "paragraph_max_deep": "最大段落深度", diff --git a/projects/app/data/config.json b/projects/app/data/config.json index 1d0303370ce9..56c508908083 100644 --- a/projects/app/data/config.json +++ b/projects/app/data/config.json @@ -2,7 +2,9 @@ { "feConfigs": { "lafEnv": "https://laf.dev", // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。 - "mcpServerProxyEndpoint": "" // mcp server 代理地址,例如: http://localhost:3005 + "mcpServerProxyEndpoint": "", // mcp server 代理地址,例如: http://localhost:3005 + "feishu_auth_robot_client_id": "cli_a8a05c985558100c", // 飞书机器人客户端ID + "feishu_auth_robot_client_secret": "oC7PGQQRQBAzPF4DGHKrAcc5ch0ZTBGH" // 飞书机器人客户端密钥 }, "systemEnv": { "vectorMaxProcess": 10, // 向量处理线程数量 diff --git a/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx b/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx index 213693cd26b6..78c94253b97c 100644 --- a/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx +++ b/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx @@ -20,6 +20,7 @@ import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import type { GetApiDatasetCataLogProps } from '@/pages/api/core/dataset/apiDataset/getCatalog'; import MyBox from '@fastgpt/web/components/common/MyBox'; import { useBoolean, useMemoizedFn, useMount } from 'ahooks'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel'; import MyModal from '@fastgpt/web/components/common/MyModal'; import MyIcon from '@fastgpt/web/components/common/Icon'; @@ -58,20 +59,81 @@ const ApiDatasetForm = ({ { setTrue: openBaseurlSeletModal, setFalse: closeBaseurlSelectModal } ] = useBoolean(); + const { feConfigs } = useSystemStore(); + + const appid = feConfigs?.feishu_auth_robot_client_id; + const urlParams = new URLSearchParams(window.location.search); + const parentId = yuqueServer?.basePath || apiServer?.basePath || feishuKnowledgeServer?.basePath || feishuPrivateServer?.basePath; + const renderFeishuAuth = ( + server: FeishuShareServer | FeishuKnowledgeServer | FeishuPrivateServer | undefined + ) => { + if (urlParams.get('datasetId')) { + return ( + <> + + + Feishu Auth + + + {!server?.user_access_token ? t('dataset:have_not_auth') : t('dataset:have_auth')} + + + + {type === DatasetTypeEnum.feishuShare ? ( + + + Folder Token + + + + ) : ( + <> + {renderBaseUrlSelector()} + {renderDirectoryModal()} + + )} + + ); + } + return <>; + }; + const canSelectBaseUrl = useMemo(() => { switch (type) { case DatasetTypeEnum.yuque: return yuqueServer?.userId && yuqueServer?.token; case DatasetTypeEnum.feishuShare: - return feishuShareServer?.appId && feishuShareServer?.appSecret; + return feishuShareServer?.user_access_token; case DatasetTypeEnum.feishuKnowledge: - return feishuKnowledgeServer?.appId && feishuKnowledgeServer?.appSecret; + return feishuKnowledgeServer?.user_access_token; case DatasetTypeEnum.apiDataset: return !!apiServer?.baseUrl; case DatasetTypeEnum.feishuPrivate: @@ -83,10 +145,8 @@ const ApiDatasetForm = ({ type, yuqueServer?.userId, yuqueServer?.token, - feishuShareServer?.appId, - feishuShareServer?.appSecret, - feishuKnowledgeServer?.appId, - feishuKnowledgeServer?.appSecret, + feishuShareServer?.user_access_token, + feishuKnowledgeServer?.user_access_token, apiServer?.baseUrl, feishuPrivateServer?.user_access_token ]); @@ -98,8 +158,7 @@ const ApiDatasetForm = ({ !datasetId && ((yuqueServer && (!yuqueServer.userId || !yuqueServer?.token)) || (apiServer && !apiServer?.baseUrl) || - (feishuKnowledgeServer && - (!feishuKnowledgeServer?.appId || !feishuKnowledgeServer?.appSecret)) || + (feishuKnowledgeServer && !feishuKnowledgeServer?.user_access_token) || (feishuPrivateServer && !feishuPrivateServer?.user_access_token)) ) { return setPathNames(t('dataset:input_required_field_to_select_baseurl')); @@ -185,18 +244,19 @@ const ApiDatasetForm = ({ basePath: '' }; break; - // Currently, only Yuque is using it case DatasetTypeEnum.feishuShare: params.feishuShareServer = { - appId: feishuShareServer?.appId || '', - appSecret: feishuShareServer?.appSecret || '', + user_access_token: feishuShareServer?.user_access_token || '', + refresh_token: feishuShareServer?.refresh_token || '', + outdate_time: feishuShareServer?.outdate_time || 0, folderToken: feishuShareServer?.folderToken || '' }; break; case DatasetTypeEnum.feishuKnowledge: params.feishuKnowledgeServer = { - appId: feishuKnowledgeServer?.appId || '', - appSecret: feishuKnowledgeServer?.appSecret || '', + user_access_token: feishuKnowledgeServer?.user_access_token || '', + refresh_token: feishuKnowledgeServer?.refresh_token || '', + outdate_time: feishuKnowledgeServer?.outdate_time || 0, basePath: '' }; break; @@ -254,97 +314,9 @@ const ApiDatasetForm = ({ {renderDirectoryModal()} )} - {type === DatasetTypeEnum.feishuShare && ( - <> - - - App ID - - - - - - App Secret - - - - - - Folder Token - - - - {/* {renderBaseUrlSelector()} - {renderDirectoryModal()} */} - - )} - {type === DatasetTypeEnum.feishuKnowledge && ( - <> - - - App ID - - - - - - App Secret - - - - {renderBaseUrlSelector()} - {renderDirectoryModal()} - - )} - {type === DatasetTypeEnum.feishuPrivate && ( - <> - {/* {renderBaseUrlSelector()} - {renderDirectoryModal()} */} - - )} + {type === DatasetTypeEnum.feishuShare && <>{renderFeishuAuth(feishuShareServer)}} + {type === DatasetTypeEnum.feishuKnowledge && <>{renderFeishuAuth(feishuKnowledgeServer)}} + {type === DatasetTypeEnum.feishuPrivate && <>{renderFeishuAuth(feishuPrivateServer)}} {type === DatasetTypeEnum.yuque && ( <> diff --git a/projects/app/src/pageComponents/dataset/detail/Info/index.tsx b/projects/app/src/pageComponents/dataset/detail/Info/index.tsx index 17ad7a4863fa..a5e9dad65bce 100644 --- a/projects/app/src/pageComponents/dataset/detail/Info/index.tsx +++ b/projects/app/src/pageComponents/dataset/detail/Info/index.tsx @@ -109,6 +109,73 @@ const Info = ({ datasetId }: { datasetId: string }) => { reset(datasetDetail); }, [datasetDetail, datasetDetail._id, reset]); + useEffect(() => { + if (!datasetId) return; + + const serverConfig: any = { id: datasetDetail._id }; + + const needAuth = + (datasetDetail.type === DatasetTypeEnum.feishuPrivate && + !datasetDetail.feishuPrivateServer?.user_access_token) || + (datasetDetail.type === DatasetTypeEnum.feishuShare && + !datasetDetail.feishuShareServer?.user_access_token) || + (datasetDetail.type === DatasetTypeEnum.feishuKnowledge && + !datasetDetail.feishuKnowledgeServer?.user_access_token); + + let shouldSetDataset = false; + + if (needAuth) { + serverConfig.feishuPrivateServer = datasetDetail.feishuPrivateServer; + serverConfig.feishuShareServer = datasetDetail.feishuShareServer; + serverConfig.feishuKnowledgeServer = datasetDetail.feishuKnowledgeServer; + shouldSetDataset = true; + } + + if (typeof window !== 'undefined') { + const urlParams = new URLSearchParams(window.location.search); + const openConfigModal = urlParams.get('openConfigModal'); + if ( + openConfigModal === 'true' && + (datasetDetail.type === DatasetTypeEnum.feishuPrivate || + datasetDetail.type === DatasetTypeEnum.feishuShare || + datasetDetail.type === DatasetTypeEnum.feishuKnowledge) + ) { + switch (datasetDetail.type) { + case DatasetTypeEnum.feishuPrivate: + serverConfig.feishuPrivateServer = datasetDetail.feishuPrivateServer; + break; + case DatasetTypeEnum.feishuShare: + serverConfig.feishuShareServer = datasetDetail.feishuShareServer; + break; + case DatasetTypeEnum.feishuKnowledge: + serverConfig.feishuKnowledgeServer = datasetDetail.feishuKnowledgeServer; + break; + default: + break; + } + shouldSetDataset = true; + + const url = new URL(window.location.href); + url.searchParams.delete('openConfigModal'); + window.history.replaceState({}, document.title, url.toString()); + } + } + + if (shouldSetDataset) { + setEditedAPIDataset(serverConfig); + } + }, [ + datasetId, + datasetDetail._id, + datasetDetail.type, + datasetDetail.feishuPrivateServer, + datasetDetail.feishuPrivateServer?.user_access_token, + datasetDetail.feishuShareServer, + datasetDetail.feishuShareServer?.user_access_token, + datasetDetail.feishuKnowledgeServer, + datasetDetail.feishuKnowledgeServer?.user_access_token + ]); + const isTraining = rebuildingCount > 0 || trainingCount > 0; return ( @@ -365,7 +432,36 @@ const Info = ({ datasetId }: { datasetId: string }) => { } /> - {datasetDetail.feishuKnowledgeServer?.appId} + + {datasetDetail.feishuKnowledgeServer?.basePath || t('common:root_folder')} + + + + )} + + {datasetDetail.type === DatasetTypeEnum.feishuPrivate && ( + <> + + + + {t('dataset:feishu_private_dataset_config')} + + + setEditedAPIDataset({ + id: datasetDetail._id, + feishuPrivateServer: datasetDetail.feishuPrivateServer + }) + } + /> + + + {datasetDetail.feishuPrivateServer?.basePath || t('common:root_folder')} + )} @@ -390,7 +486,9 @@ const Info = ({ datasetId }: { datasetId: string }) => { } /> - {datasetDetail.feishuShareServer?.folderToken} + + {datasetDetail.feishuShareServer?.folderToken || t('dataset:not_set')} + )} diff --git a/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts b/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts index 2719dfd024ad..138e5786056c 100644 --- a/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts +++ b/projects/app/src/pages/api/core/dataset/apiDataset/getPathNames.ts @@ -72,7 +72,7 @@ async function handler( feishuShareServer: req.body.feishuShareServer ? { ...req.body.feishuShareServer, - appSecret: dataset.feishuShareServer?.appSecret ?? '' + user_access_token: dataset.feishuShareServer?.user_access_token ?? '' } : dataset.feishuShareServer, apiServer: req.body.apiServer @@ -84,7 +84,7 @@ async function handler( feishuKnowledgeServer: req.body.feishuKnowledgeServer ? { ...req.body.feishuKnowledgeServer, - appSecret: dataset.feishuKnowledgeServer?.appSecret ?? '' + user_access_token: dataset.feishuKnowledgeServer?.user_access_token ?? '' } : dataset.feishuKnowledgeServer, feishuPrivateServer: req.body.feishuPrivateServer @@ -107,15 +107,16 @@ async function handler( } })(); - if (feishuShareServer || feishuPrivateServer) { + if (feishuShareServer) { return ''; } - if (yuqueServer || apiServer || feishuKnowledgeServer) { + if (yuqueServer || apiServer || feishuKnowledgeServer || feishuPrivateServer) { const apiDataset = await getApiDatasetRequest({ yuqueServer, apiServer, - feishuKnowledgeServer + feishuKnowledgeServer, + feishuPrivateServer }); if (!apiDataset?.getFileDetail) { diff --git a/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts b/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts index bb388b46082d..968e1b0c1d41 100644 --- a/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts +++ b/projects/app/src/pages/api/core/dataset/collection/create/reTrainingCollection.ts @@ -62,6 +62,7 @@ async function handler( apiServer: collection.dataset.apiServer, feishuShareServer: collection.dataset.feishuShareServer, feishuKnowledgeServer: collection.dataset.feishuKnowledgeServer, + feishuPrivateServer: collection.dataset.feishuPrivateServer, yuqueServer: collection.dataset.yuqueServer }; } diff --git a/projects/app/src/pages/api/core/dataset/detail.ts b/projects/app/src/pages/api/core/dataset/detail.ts index 361ea029f21a..84131a22c853 100644 --- a/projects/app/src/pages/api/core/dataset/detail.ts +++ b/projects/app/src/pages/api/core/dataset/detail.ts @@ -61,15 +61,17 @@ async function handler(req: ApiRequestProps): Promise { : undefined, feishuShareServer: dataset.feishuShareServer ? { - appId: dataset.feishuShareServer.appId, - appSecret: '', + user_access_token: dataset.feishuShareServer.user_access_token, + refresh_token: dataset.feishuShareServer.refresh_token, + outdate_time: dataset.feishuShareServer.outdate_time, folderToken: dataset.feishuShareServer.folderToken } : undefined, feishuKnowledgeServer: dataset.feishuKnowledgeServer ? { - appId: dataset.feishuKnowledgeServer.appId, - appSecret: '', + user_access_token: dataset.feishuKnowledgeServer.user_access_token, + refresh_token: dataset.feishuKnowledgeServer.refresh_token, + outdate_time: dataset.feishuKnowledgeServer.outdate_time, basePath: dataset.feishuKnowledgeServer.basePath } : undefined, diff --git a/projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts b/projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts index 3acb3640fc04..75ddd15cfe53 100644 --- a/projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts +++ b/projects/app/src/pages/api/core/dataset/feishu/getUserAccessToken.ts @@ -1,6 +1,5 @@ import axios from 'axios'; import { MongoDataset } from '@fastgpt/service/core/dataset/schema'; -import { useSystemStore } from '@/web/common/system/useSystemStore'; import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; const appId = global.feConfigs.feishu_auth_robot_client_id; @@ -19,8 +18,12 @@ export async function getUserAccessToken(code: string, datasetId: string) { } // 检查数据集类型 - if (dataset.type !== DatasetTypeEnum.feishuPrivate) { - throw new Error('Dataset type is not feishu private'); + if ( + dataset.type !== DatasetTypeEnum.feishuPrivate && + dataset.type !== DatasetTypeEnum.feishuShare && + dataset.type !== DatasetTypeEnum.feishuKnowledge + ) { + throw new Error('Dataset type is not feishu]'); } try { @@ -51,7 +54,7 @@ export async function getUserAccessToken(code: string, datasetId: string) { await MongoDataset.findByIdAndUpdate(datasetId, { $set: { - [`feishuPrivateServer`]: { + [`${dataset.type}Server`]: { user_access_token: response.data.access_token, refresh_token: response.data.refresh_token, outdate_time: Date.now() + response.data.expires_in * 1000 diff --git a/projects/app/src/pages/api/core/dataset/feishu/oauth.ts b/projects/app/src/pages/api/core/dataset/feishu/oauth.ts index fe72a868dd37..0fdf3d3a2fdd 100644 --- a/projects/app/src/pages/api/core/dataset/feishu/oauth.ts +++ b/projects/app/src/pages/api/core/dataset/feishu/oauth.ts @@ -1,18 +1,31 @@ -import type { NextApiRequest, NextApiResponse } from 'next'; -import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next'; import { getUserAccessToken } from './getUserAccessToken'; -export default async function handler(req: NextApiRequest, res: NextApiResponse) { +export type FeishuOauthQuery = { + code: string; + state: string; +}; + +export type FeishuOauthResponse = { + error?: string; +}; + +export default async function handler( + req: ApiRequestProps, + res: ApiResponseType +) { try { const { code, state } = req.query; - - // await authCert({ req, authRoot: true }); + const stateData = JSON.parse(decodeURIComponent(state as string)); + const { returnUrl, datasetId } = stateData; if (!code || !state) { return res.status(400).json({ error: 'Missing code or state' }); } - const stateData = JSON.parse(decodeURIComponent(state as string)); - const { returnUrl, datasetId } = stateData; + + if (!datasetId) { + return res.status(400).json({ error: 'Missing datasetId in returnUrl' }); + } // get user_access_token const user_access_token = await getUserAccessToken(code as string, datasetId); @@ -20,6 +33,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) // redirect to original page const redirectUrl = new URL(returnUrl, 'http://localhost:3000'); + // add openConfigModal to redirectUrl + redirectUrl.searchParams.append('openConfigModal', 'true'); + res.redirect(redirectUrl.toString()); } catch (error) { console.error('Feishu OAuth Error:', error); diff --git a/projects/app/src/pages/api/core/dataset/update.ts b/projects/app/src/pages/api/core/dataset/update.ts index c556df176f44..b9ca6c49d0c2 100644 --- a/projects/app/src/pages/api/core/dataset/update.ts +++ b/projects/app/src/pages/api/core/dataset/update.ts @@ -178,19 +178,9 @@ async function handler( ...(!!yuqueServer?.basePath !== undefined && { 'yuqueServer.basePath': yuqueServer?.basePath }), - ...(!!feishuShareServer?.appId && { 'feishuShareServer.appId': feishuShareServer.appId }), - ...(!!feishuShareServer?.appSecret && { - 'feishuShareServer.appSecret': feishuShareServer.appSecret - }), ...(!!feishuShareServer?.folderToken && { 'feishuShareServer.folderToken': feishuShareServer.folderToken }), - ...(!!feishuKnowledgeServer?.appId && { - 'feishuKnowledgeServer.appId': feishuKnowledgeServer.appId - }), - ...(!!feishuKnowledgeServer?.appSecret && { - 'feishuKnowledgeServer.appSecret': feishuKnowledgeServer.appSecret - }), ...(!!feishuKnowledgeServer?.basePath !== undefined && { 'feishuKnowledgeServer.basePath': feishuKnowledgeServer?.basePath }), diff --git a/projects/app/src/pages/dataset/detail/index.tsx b/projects/app/src/pages/dataset/detail/index.tsx index bbb58ee19f0e..b41461c18dfa 100644 --- a/projects/app/src/pages/dataset/detail/index.tsx +++ b/projects/app/src/pages/dataset/detail/index.tsx @@ -31,9 +31,7 @@ import CollectionPageContextProvider from '@/pageComponents/dataset/detail/Colle import { useContextSelector } from 'use-context-selector'; import NextHead from '@/components/common/NextHead'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; -import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; -import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; const CollectionCard = dynamic( () => import('@/pageComponents/dataset/detail/CollectionCard/index') @@ -64,22 +62,9 @@ const Detail = ({ datasetId, currentTab }: Props) => { const { toast } = useToast(); const router = useRouter(); const { isPc } = useSystem(); - const { feConfigs } = useSystemStore(); const datasetDetail = useContextSelector(DatasetPageContext, (v) => v.datasetDetail); const loadDatasetDetail = useContextSelector(DatasetPageContext, (v) => v.loadDatasetDetail); - const { isOpen, onOpen, onClose } = useDisclosure(); - const appid = feConfigs?.feishu_auth_robot_client_id; - - // check feishu auth status - useEffect(() => { - if ( - datasetDetail?.type === DatasetTypeEnum.feishuPrivate && - !datasetDetail?.feishuPrivateServer?.user_access_token - ) { - onOpen(); - } - }, [datasetDetail?.type, datasetDetail?.feishuPrivateServer?.user_access_token, onOpen]); useRequest2(() => loadDatasetDetail(datasetId), { onError(err: any) { @@ -96,30 +81,6 @@ const Detail = ({ datasetId, currentTab }: Props) => { <> - {/* 飞书授权弹窗 */} - - - - {t('dataset:feishu_auth_title')} - {t('dataset:feishu_auth_description')} - - - {t('dataset:feishu_auth_button')} - - - - - - {isPc ? ( diff --git a/projects/app/src/web/core/dataset/constants.ts b/projects/app/src/web/core/dataset/constants.ts index 328f94fdf8f5..54f9738be64e 100644 --- a/projects/app/src/web/core/dataset/constants.ts +++ b/projects/app/src/web/core/dataset/constants.ts @@ -71,9 +71,9 @@ export const datasetTypeCourseMap: Record<`${DatasetTypeEnum}`, string> = { [DatasetTypeEnum.dataset]: '', [DatasetTypeEnum.apiDataset]: '/docs/guide/knowledge_base/api_dataset/', [DatasetTypeEnum.websiteDataset]: '/docs/guide/knowledge_base/websync/', - [DatasetTypeEnum.feishuShare]: '/docs/guide/knowledge_base/lark_share_dataset/', + [DatasetTypeEnum.feishuShare]: '/docs/guide/knowledge_base/lark_dataset/', [DatasetTypeEnum.feishuKnowledge]: '/docs/guide/knowledge_base/lark_dataset/', - [DatasetTypeEnum.feishuPrivate]: '/docs/guide/knowledge_base/lark_private_dataset/', + [DatasetTypeEnum.feishuPrivate]: '/docs/guide/knowledge_base/lark_dataset/', [DatasetTypeEnum.yuque]: '/docs/guide/knowledge_base/yuque_dataset/', [DatasetTypeEnum.externalFile]: '' }; diff --git a/projects/app/src/web/core/dataset/context/datasetPageContext.tsx b/projects/app/src/web/core/dataset/context/datasetPageContext.tsx index 34d670fada97..28676ea0688c 100644 --- a/projects/app/src/web/core/dataset/context/datasetPageContext.tsx +++ b/projects/app/src/web/core/dataset/context/datasetPageContext.tsx @@ -119,15 +119,17 @@ export const DatasetPageContextProvider = ({ : state.yuqueServer, feishuShareServer: data.feishuShareServer ? { - appId: data.feishuShareServer.appId, - appSecret: '', + user_access_token: data.feishuShareServer.user_access_token, + refresh_token: data.feishuShareServer.refresh_token, + outdate_time: data.feishuShareServer.outdate_time, folderToken: data.feishuShareServer.folderToken } : state.feishuShareServer, feishuKnowledgeServer: data.feishuKnowledgeServer ? { - appId: data.feishuKnowledgeServer.appId, - appSecret: '', + user_access_token: data.feishuKnowledgeServer.user_access_token, + refresh_token: data.feishuKnowledgeServer.refresh_token, + outdate_time: data.feishuKnowledgeServer.outdate_time, basePath: data.feishuKnowledgeServer.basePath } : state.feishuKnowledgeServer, From ab149391634b6ae6cb6387166543f24cd37741fa Mon Sep 17 00:00:00 2001 From: dreamer6680 <146868355@qq.com> Date: Fri, 30 May 2025 18:04:36 +0800 Subject: [PATCH 7/9] remove something unuse --- docSite/assets/imgs/feishuKnowledge-1.png | Bin 64802 -> 0 bytes docSite/assets/imgs/feishuKnowledge-2.png | Bin 68957 -> 0 bytes .../docs/guide/knowledge_base/lark_dataset.md | 28 ++++---- .../knowledge_base/lark_share_dataset.md | 61 ------------------ packages/web/i18n/en/dataset.json | 8 +-- packages/web/i18n/zh-CN/dataset.json | 2 - packages/web/i18n/zh-Hant/dataset.json | 8 +-- projects/app/data/config.json | 4 +- 8 files changed, 21 insertions(+), 90 deletions(-) delete mode 100644 docSite/assets/imgs/feishuKnowledge-1.png delete mode 100644 docSite/assets/imgs/feishuKnowledge-2.png delete mode 100644 docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md diff --git a/docSite/assets/imgs/feishuKnowledge-1.png b/docSite/assets/imgs/feishuKnowledge-1.png deleted file mode 100644 index 478f5c6d5c7b0ca39d2403b004d3b2a0446b9788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64802 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 diff --git a/docSite/assets/imgs/feishuKnowledge-2.png b/docSite/assets/imgs/feishuKnowledge-2.png deleted file mode 100644 index bace4b7b2337a69df0e8d1bdbf290470a3b9a554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68957 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�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 AQUCw| diff --git a/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md b/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md index 8bc5e29d2094..91e3e3a7f3ac 100644 --- a/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md +++ b/docSite/content/zh-cn/docs/guide/knowledge_base/lark_dataset.md @@ -9,11 +9,12 @@ weight: 405 | | | | --- | --- | -| ![alt text](/imgs/feishuKnowledge-2.png) | ![alt text](/imgs/image-40.png) | +| ![alt text](/imgs/image-39.png) | ![alt text](/imgs/image-40.png) | -目前,FastGPT用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret,来导入飞书知识库。目前处于测试阶段,部分交互有待优化。 + 目前,FastGPT用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret,并选中一个**文档空间的顶层文件夹**来导入飞书知识库。目前处于测试阶段,部分交互有待优化。 -由于飞书限制,无法在一个知识库中同时支持获取飞书云空间个人文件,飞书云空间共享文件和飞书知识库。目前仅可以获取飞书知识库和共享空间下文件目录的内容[点击这里](./lark_share_dataset.md),无法获取个人空间的内容。 +由于飞书限制,无法直接获取所有文档内容,目前仅可以获取共享空间下文件目录的内容,无法获取个人空间里的内容。 +如果需要获取知识库的内容,[点击这里](./lark_dataset.md) ## 1. 创建飞书应用 @@ -22,12 +23,11 @@ weight: 405 ## 2. 配置应用权限 -创建应用后,进入应用可以配置相关权限,这里需要增加**4个权限**: +创建应用后,进入应用可以配置相关权限,这里需要增加**3个权限**: -1. 查看、编辑和管理知识库 -2. 查看知识空间信息 +1. 获取云空间文件夹下的云文档清单 +2. 查看新版文档 3. 查看、评论、编辑和管理云空间中所有文件 -4. 获取企业信息 ![alt text](/imgs/image-41.png) @@ -44,20 +44,18 @@ weight: 405 1. 把刚刚创建的应用拉入一个群里 2. 给这个群增加目录权限 -如果你的目录已经给全员组增加权限了,则可以跳过上面步骤。 +如果你的目录已经给全员组增加权限了,则可以跳过上面步骤,直接获取 Folder Token。 ![alt text](/imgs/image-43.png) -## 5. 设置知识库路径 +## 5. 获取 Folder Token -考虑到部分用户的知识库文件层级过多,每次获取文件可能都要逐级打开。现在,知识库支持选择路径,填写好 appId 和 appSecret 后,用户可以点击选择,进入图形界面选择自己想要的路径。 +可以页面路径上获取 Folder Token,注意不要把问号复制进来。 -![alt text](/imgs/feishuKnowledge-1.png) - -例如,想这个知识库只获取 `/商业化部门/部门新人入职 `这里面的文件,那么可以选择到`部门新人入职`后,点击确认,这样创建好知识库后,就会只获取这个文件夹里的内容。 +![alt text](/imgs/image-44.png) ## 6. 创建知识库 -根据 3 获取到的 2 个参数,创建知识库,选择**飞书知识库**类型,然后填入对应的参数,点击创建。 +根据 3 和 5 获取到的 3 个参数,创建知识库,选择飞书文件库类型,然后填入对应的参数,点击创建。 -![alt text](/imgs/feishuKnowledge-2.png) \ No newline at end of file +![alt text](/imgs/image-39.png) \ No newline at end of file diff --git a/docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md b/docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md deleted file mode 100644 index 75c4db225231..000000000000 --- a/docSite/content/zh-cn/docs/guide/knowledge_base/lark_share_dataset.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: '飞书共享知识库' -description: 'FastGPT 飞书知识库功能介绍和使用方式' -icon: 'language' -draft: false -toc: true -weight: 405 ---- - -| | | -| --- | --- | -| ![alt text](/imgs/image-39.png) | ![alt text](/imgs/image-40.png) | - - 目前,FastGPT用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret,并选中一个**文档空间的顶层文件夹**来导入飞书共享知识库。目前处于测试阶段,部分交互有待优化。 - -由于飞书限制,无法直接获取所有文档内容,目前仅可以获取共享空间下文件目录的内容,无法获取个人空间里的内容。 -如果需要获取知识库的内容,[点击这里](./lark_dataset.md) - - -## 1. 创建飞书应用 - -打开 [飞书开放平台](https://open.feishu.cn/?lang=zh-CN),点击**创建应用**,选择**自建应用**,然后填写应用名称。 - -## 2. 配置应用权限 - -创建应用后,进入应用可以配置相关权限,这里需要增加**3个权限**: - -1. 获取云空间文件夹下的云文档清单 -2. 查看新版文档 -3. 查看、评论、编辑和管理云空间中所有文件 - -![alt text](/imgs/image-41.png) - -## 3. 获取 appId 和 appSecret - -![alt text](/imgs/image-42.png) - -## 4. 给 Folder 增加权限 - -可参考飞书教程: https://open.feishu.cn/document/server-docs/docs/drive-v1/faq#b02e5bfb - -大致总结为: - -1. 把刚刚创建的应用拉入一个群里 -2. 给这个群增加目录权限 - -如果你的目录已经给全员组增加权限了,则可以跳过上面步骤,直接获取 Folder Token。 - -![alt text](/imgs/image-43.png) - -## 5. 获取 Folder Token - -可以页面路径上获取 Folder Token,注意不要把问号复制进来。 - -![alt text](/imgs/image-44.png) - -## 6. 创建知识库 - -根据 3 和 5 获取到的 3 个参数,创建知识库,选择飞书文件库类型,然后填入对应的参数,点击创建。 - -![alt text](/imgs/image-39.png) \ No newline at end of file diff --git a/packages/web/i18n/en/dataset.json b/packages/web/i18n/en/dataset.json index cdc2bc5a5ba2..667e3d25c5cc 100644 --- a/packages/web/i18n/en/dataset.json +++ b/packages/web/i18n/en/dataset.json @@ -80,18 +80,16 @@ "failedToLoadRootDirectories": "Failed to load root directories", "failedToLoadSubDirectories": "Failed to load subdirectories", "feishu_auth_button": "Authorization", - "feishu_auth_description": "Please complete Feishu authorization first to use personal knowledge base functions", - "feishu_auth_title": "Need to authorize Feishu", "feishu_change_auth_button": "replace", "feishu_knowledge_dataset": "Feishu Knowledge Base", "feishu_knowledge_dataset_config": "Configure Feishu Knowledge Base", - "feishu_knowledge_dataset_desc": "You can use Feishu Knowledge Base to build a knowledge base by configuring Feishu Knowledge Base. The knowledge base documents will not be stored secondaryly.", + "feishu_knowledge_dataset_desc": "You can use Feishu Knowledge Base to build a knowledge base, and the knowledge base documents will not be stored secondaryly.", "feishu_private_dataset": "Feishu personal knowledge base", "feishu_private_dataset_config": "Configure Feishu's personal knowledge base", - "feishu_private_dataset_desc": "You can use Feishu personal files to build a knowledge base by configuring Feishu personal folder permissions, and the files will not be stored twice.", + "feishu_private_dataset_desc": "You can use Feishu personal files to build a knowledge base, and the files will not be stored twice.", "feishu_share_dataset": "Feishu Shared Knowledge Base", "feishu_share_dataset_config": "Configure Feishu Shared Knowledge Base", - "feishu_share_dataset_desc": "You can use Feishu Shared Folder permissions to build a knowledge base using Feishu Shared files, and the files will not be stored twice.", + "feishu_share_dataset_desc": "You can use Feishu Shared Folder permissions to build a knowledge base, and the files will not be stored twice.", "file_list": "File list", "file_model_function_tip": "Enhances indexing and QA generation", "filename": "Filename", diff --git a/packages/web/i18n/zh-CN/dataset.json b/packages/web/i18n/zh-CN/dataset.json index a059b2aa9397..c477651b9ee4 100644 --- a/packages/web/i18n/zh-CN/dataset.json +++ b/packages/web/i18n/zh-CN/dataset.json @@ -80,8 +80,6 @@ "failedToLoadRootDirectories": "加载根目录失败", "failedToLoadSubDirectories": "加载子目录失败", "feishu_auth_button": "授权", - "feishu_auth_description": "请先完成飞书授权以使用个人知识库功能", - "feishu_auth_title": "需要飞书授权", "feishu_change_auth_button": "更换", "feishu_knowledge_dataset": "飞书知识库", "feishu_knowledge_dataset_config": "配置飞书知识库", diff --git a/packages/web/i18n/zh-Hant/dataset.json b/packages/web/i18n/zh-Hant/dataset.json index 18ff87527a84..0b0d0f5e7210 100644 --- a/packages/web/i18n/zh-Hant/dataset.json +++ b/packages/web/i18n/zh-Hant/dataset.json @@ -78,18 +78,16 @@ "failedToLoadRootDirectories": "加載根目錄失敗", "failedToLoadSubDirectories": "加載子目錄失敗", "feishu_auth_button": "授權", - "feishu_auth_description": "請先完成飛書授權以使用個人知識庫功能", - "feishu_auth_title": "需要飛書授權", "feishu_change_auth_button": "更換", "feishu_knowledge_dataset": "飛書知識庫", "feishu_knowledge_dataset_config": "配置飛書知識庫", - "feishu_knowledge_dataset_desc": "可通過配置飛書知識庫權限,使用飛書知識庫構建知識庫,知識庫文檔不會進行二次存儲", + "feishu_knowledge_dataset_desc": "使用飛書知識庫構建知識庫,知識庫文檔不會進行二次存儲", "feishu_private_dataset": "飛書個人知識庫", "feishu_private_dataset_config": "配置飛書個人知識庫", - "feishu_private_dataset_desc": "可通過配置飛書個人文件夾權限,使用飛書個人文件構建知識庫,文件不會進行二次存儲", + "feishu_private_dataset_desc": "使用飛書個人文件構建知識庫,文件不會進行二次存儲", "feishu_share_dataset": "飛書共享知識庫", "feishu_share_dataset_config": "配置飛書共享知識庫", - "feishu_share_dataset_desc": "可通過配置飛書共享文件夾權限,使用飛書共享文件構建知識庫,文件不會進行二次存儲", + "feishu_share_dataset_desc": "使用飛書共享文件構建知識庫,文件不會進行二次存儲", "file_list": "文件列表", "file_model_function_tip": "用於增強索引和問答生成", "filename": "檔案名稱", diff --git a/projects/app/data/config.json b/projects/app/data/config.json index 56c508908083..01cc514b3172 100644 --- a/projects/app/data/config.json +++ b/projects/app/data/config.json @@ -3,8 +3,8 @@ "feConfigs": { "lafEnv": "https://laf.dev", // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。 "mcpServerProxyEndpoint": "", // mcp server 代理地址,例如: http://localhost:3005 - "feishu_auth_robot_client_id": "cli_a8a05c985558100c", // 飞书机器人客户端ID - "feishu_auth_robot_client_secret": "oC7PGQQRQBAzPF4DGHKrAcc5ch0ZTBGH" // 飞书机器人客户端密钥 + "feishu_auth_robot_client_id": "", // 飞书机器人客户端ID + "feishu_auth_robot_client_secret": "" // 飞书机器人客户端密钥 }, "systemEnv": { "vectorMaxProcess": 10, // 向量处理线程数量 From 35f1955be198e16bb3d74a932284d6f9448aec0c Mon Sep 17 00:00:00 2001 From: dreamer6680 <146868355@qq.com> Date: Tue, 3 Jun 2025 10:05:26 +0800 Subject: [PATCH 8/9] fix feishuprivatedataset.api --- packages/service/core/dataset/feishuPrivateDataset/api.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/service/core/dataset/feishuPrivateDataset/api.ts b/packages/service/core/dataset/feishuPrivateDataset/api.ts index 47adfb643391..b950c06050b6 100644 --- a/packages/service/core/dataset/feishuPrivateDataset/api.ts +++ b/packages/service/core/dataset/feishuPrivateDataset/api.ts @@ -7,7 +7,6 @@ import type { import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; import axios, { type Method } from 'axios'; import { addLog } from '../../../common/system/log'; -import { preLoadWorker } from 'worker/preload'; type ResponseDataType = { success: boolean; From 037f4d27dc3a1b71984c9e75896c80ae7ef24d98 Mon Sep 17 00:00:00 2001 From: dreamer6680 <146868355@qq.com> Date: Tue, 3 Jun 2025 15:34:35 +0800 Subject: [PATCH 9/9] move thirddataset to apidataset --- .../{ => apiDataset}/feishuKnowledgeDataset/api.ts | 2 +- .../dataset/{ => apiDataset}/feishuPrivateDataset/api.ts | 2 +- .../{ => apiDataset}/feishuPrivateDataset/refreshToken.ts | 4 ++-- .../dataset/{ => apiDataset}/feishuShareDataset/api.ts | 2 +- packages/service/core/dataset/apiDataset/index.ts | 8 ++++---- .../core/dataset/{ => apiDataset}/yuqueDataset/api.ts | 2 +- projects/app/src/service/common/system/cron.ts | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) rename packages/service/core/dataset/{ => apiDataset}/feishuKnowledgeDataset/api.ts (99%) rename packages/service/core/dataset/{ => apiDataset}/feishuPrivateDataset/api.ts (99%) rename packages/service/core/dataset/{ => apiDataset}/feishuPrivateDataset/refreshToken.ts (96%) rename packages/service/core/dataset/{ => apiDataset}/feishuShareDataset/api.ts (98%) rename packages/service/core/dataset/{ => apiDataset}/yuqueDataset/api.ts (99%) diff --git a/packages/service/core/dataset/feishuKnowledgeDataset/api.ts b/packages/service/core/dataset/apiDataset/feishuKnowledgeDataset/api.ts similarity index 99% rename from packages/service/core/dataset/feishuKnowledgeDataset/api.ts rename to packages/service/core/dataset/apiDataset/feishuKnowledgeDataset/api.ts index 13f2b9c23ca1..e141e6f7632d 100644 --- a/packages/service/core/dataset/feishuKnowledgeDataset/api.ts +++ b/packages/service/core/dataset/apiDataset/feishuKnowledgeDataset/api.ts @@ -6,7 +6,7 @@ import type { } from '@fastgpt/global/core/dataset/apiDataset'; import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; import axios, { type Method } from 'axios'; -import { addLog } from '../../../common/system/log'; +import { addLog } from '../../../../common/system/log'; type ResponseDataType = { success: boolean; diff --git a/packages/service/core/dataset/feishuPrivateDataset/api.ts b/packages/service/core/dataset/apiDataset/feishuPrivateDataset/api.ts similarity index 99% rename from packages/service/core/dataset/feishuPrivateDataset/api.ts rename to packages/service/core/dataset/apiDataset/feishuPrivateDataset/api.ts index b950c06050b6..7ebec9117323 100644 --- a/packages/service/core/dataset/feishuPrivateDataset/api.ts +++ b/packages/service/core/dataset/apiDataset/feishuPrivateDataset/api.ts @@ -6,7 +6,7 @@ import type { } from '@fastgpt/global/core/dataset/apiDataset'; import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; import axios, { type Method } from 'axios'; -import { addLog } from '../../../common/system/log'; +import { addLog } from '../../../../common/system/log'; type ResponseDataType = { success: boolean; diff --git a/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts b/packages/service/core/dataset/apiDataset/feishuPrivateDataset/refreshToken.ts similarity index 96% rename from packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts rename to packages/service/core/dataset/apiDataset/feishuPrivateDataset/refreshToken.ts index 539a3ee0185c..6383d2558b75 100644 --- a/packages/service/core/dataset/feishuPrivateDataset/refreshToken.ts +++ b/packages/service/core/dataset/apiDataset/feishuPrivateDataset/refreshToken.ts @@ -1,6 +1,6 @@ import axios from 'axios'; -import { MongoDataset } from '../schema'; -import { addLog } from '../../../common/system/log'; +import { MongoDataset } from '../../schema'; +import { addLog } from '../../../../common/system/log'; /** * refresh feishu token diff --git a/packages/service/core/dataset/feishuShareDataset/api.ts b/packages/service/core/dataset/apiDataset/feishuShareDataset/api.ts similarity index 98% rename from packages/service/core/dataset/feishuShareDataset/api.ts rename to packages/service/core/dataset/apiDataset/feishuShareDataset/api.ts index 6479e0944d81..2d1188eb0622 100644 --- a/packages/service/core/dataset/feishuShareDataset/api.ts +++ b/packages/service/core/dataset/apiDataset/feishuShareDataset/api.ts @@ -6,7 +6,7 @@ import type { } from '@fastgpt/global/core/dataset/apiDataset'; import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; import axios, { type Method } from 'axios'; -import { addLog } from '../../../common/system/log'; +import { addLog } from '../../../../common/system/log'; type ResponseDataType = { success: boolean; diff --git a/packages/service/core/dataset/apiDataset/index.ts b/packages/service/core/dataset/apiDataset/index.ts index b7f2a8fbc11d..c75b10aad066 100644 --- a/packages/service/core/dataset/apiDataset/index.ts +++ b/packages/service/core/dataset/apiDataset/index.ts @@ -6,10 +6,10 @@ import type { FeishuPrivateServer } from '@fastgpt/global/core/dataset/apiDataset'; import { useApiDatasetRequest } from './api'; -import { useYuqueDatasetRequest } from '../yuqueDataset/api'; -import { useFeishuShareDatasetRequest } from '../feishuShareDataset/api'; -import { useFeishuKnowledgeDatasetRequest } from '../feishuKnowledgeDataset/api'; -import { useFeishuPrivateDatasetRequest } from '../feishuPrivateDataset/api'; +import { useYuqueDatasetRequest } from './yuqueDataset/api'; +import { useFeishuShareDatasetRequest } from './feishuShareDataset/api'; +import { useFeishuKnowledgeDatasetRequest } from './feishuKnowledgeDataset/api'; +import { useFeishuPrivateDatasetRequest } from './feishuPrivateDataset/api'; export const getApiDatasetRequest = async (data: { apiServer?: APIFileServer; diff --git a/packages/service/core/dataset/yuqueDataset/api.ts b/packages/service/core/dataset/apiDataset/yuqueDataset/api.ts similarity index 99% rename from packages/service/core/dataset/yuqueDataset/api.ts rename to packages/service/core/dataset/apiDataset/yuqueDataset/api.ts index cafbd9700d2e..6ffa50e327e9 100644 --- a/packages/service/core/dataset/yuqueDataset/api.ts +++ b/packages/service/core/dataset/apiDataset/yuqueDataset/api.ts @@ -5,7 +5,7 @@ import type { ApiDatasetDetailResponse } from '@fastgpt/global/core/dataset/apiDataset'; import axios, { type Method } from 'axios'; -import { addLog } from '../../../common/system/log'; +import { addLog } from '../../../../common/system/log'; import { type ParentIdType } from '@fastgpt/global/common/parentFolder/type'; type ResponseDataType = { diff --git a/projects/app/src/service/common/system/cron.ts b/projects/app/src/service/common/system/cron.ts index c899d63671e2..0f627537c468 100644 --- a/projects/app/src/service/common/system/cron.ts +++ b/projects/app/src/service/common/system/cron.ts @@ -12,7 +12,7 @@ import { TimerIdEnum } from '@fastgpt/service/common/system/timerLock/constants' import { addHours } from 'date-fns'; import { getScheduleTriggerApp } from '@/service/core/app/utils'; import { clearExpiredRawTextBufferCron } from '@fastgpt/service/common/buffer/rawText/controller'; -import { refreshFeishuToken } from '@fastgpt/service/core/dataset/feishuPrivateDataset/refreshToken'; +import { refreshFeishuToken } from '@fastgpt/service/core/dataset/apiDataset/feishuPrivateDataset/refreshToken'; // Try to run train every minute const setTrainingQueueCron = () => {