/** * @description Dify 文档分段管理 API * @author AI Assistant * @since 2025-11-04 */ import { api } from '@/apis/index'; import type { ResultDomain } from '@/types'; import type { DifySegmentListResponse, DifyChildChunkListResponse, DifyChildChunkResponse, SegmentUpdateRequest, SegmentCreateRequest } from '@/types/ai'; /** * 文档分段管理 API */ export const documentSegmentApi = { /** * 获取文档的所有分段(父级) * @param datasetId Dify数据集ID * @param documentId Dify文档ID * @returns Promise> */ async getDocumentSegments( datasetId: string, documentId: string ): Promise> { const response = await api.get( `/ai/dify/datasets/${datasetId}/documents/${documentId}/segments` ); return response.data; }, /** * 获取分段的子块列表 * @param datasetId Dify数据集ID * @param documentId Dify文档ID * @param segmentId 分段ID * @returns Promise> */ async getChildChunks( datasetId: string, documentId: string, segmentId: string ): Promise> { const response = await api.get( `/ai/dify/datasets/${datasetId}/documents/${documentId}/segments/${segmentId}/child_chunks` ); return response.data; }, /** * 更新子块内容 * @param datasetId Dify数据集ID * @param documentId Dify文档ID * @param segmentId 分段ID * @param childChunkId 子块ID * @param content 新内容 * @returns Promise> */ async updateChildChunk( datasetId: string, documentId: string, segmentId: string, childChunkId: string, content: string ): Promise> { const requestBody: SegmentUpdateRequest = { content }; const response = await api.patch( `/ai/dify/datasets/${datasetId}/documents/${documentId}/segments/${segmentId}/child_chunks/${childChunkId}`, requestBody ); return response.data; }, /** * 创建新的子块 * @param datasetId Dify数据集ID * @param documentId Dify文档ID * @param segmentId 分段ID * @param content 分段内容 * @returns Promise> */ async createChildChunk( datasetId: string, documentId: string, segmentId: string, content: string ): Promise> { const requestBody: SegmentCreateRequest = { content }; const response = await api.post( `/ai/dify/datasets/${datasetId}/documents/${documentId}/segments/${segmentId}/child_chunks`, requestBody ); return response.data; }, /** * 删除子块 * @param datasetId Dify数据集ID * @param documentId Dify文档ID * @param segmentId 分段ID * @param childChunkId 子块ID * @returns Promise> */ async deleteChildChunk( datasetId: string, documentId: string, segmentId: string, childChunkId: string ): Promise> { const response = await api.delete( `/ai/dify/datasets/${datasetId}/documents/${documentId}/segments/${segmentId}/child_chunks/${childChunkId}` ); return response.data; }, /** * 批量获取所有分段和子块 * @param datasetId Dify数据集ID * @param documentId Dify文档ID * @returns Promise 所有子块的扁平列表 */ async getAllSegmentsWithChunks( datasetId: string, documentId: string ): Promise { // 1. 获取所有父级分段 const segmentsResult = await this.getDocumentSegments(datasetId, documentId); if (!segmentsResult.success || !segmentsResult.data?.data) { throw new Error('获取分段列表失败'); } // 2. 对每个父级分段,获取其子块 const allChunks: any[] = []; for (const segment of segmentsResult.data.data) { try { const chunksResult = await this.getChildChunks( datasetId, documentId, segment.id ); if (chunksResult.success && chunksResult.data?.data) { // 为每个子块添加父级分段信息(用于显示) const chunksWithSegmentInfo = chunksResult.data.data.map(chunk => ({ ...chunk, parentSegmentId: segment.id, parentPosition: segment.position, parentKeywords: segment.keywords })); allChunks.push(...chunksWithSegmentInfo); } } catch (error) { console.error(`获取分段 ${segment.id} 的子块失败:`, error); // 继续处理其他分段 } } return allChunks; } };