Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 29 additions & 7 deletions ui/src/api/API_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,16 @@ v3 编辑表单提交 `{ name, description }`,标题上限 64、更新说明
`/system/shared/model` 查询共享模型,为每项标记 `source: 'shared'`;不查询工作空间模型。
共享工作流、代码生成和默认模型设置统一调用此方法,模型管理继续使用 `getModelList`。

### 资源选择弹窗查询

三个资源选择弹窗按 Workspace、System 资源管理和 System 共享资源选择接口,不配置
Workspace 共享页面来源分支,不调用 Workspace Shared API。仅普通工作空间显示文件夹,不显示共享目录;其他范围不显示或查询文件夹。
System 资源管理智能体提供 `getAllApplication`(`/system/resource/application`),System 共享
不提供智能体选择。System 共享知识库提供 `getAllKnowledge`(`/system/shared/knowledge`),
与 System 资源管理知识库的同名方法均直接返回全量列表。工具选择统一调用对应范围的
`getAllTool`:System 资源管理请求 `/system/resource/tool`,System 共享请求 `/system/shared/tool`,
返回 `ToolItem[]`,不附带工作空间文件夹筛选。`getToolListWithShared` 保留用于其他包含共享工具的选项查询。

### 工具列表查询

`workspace/tool/tool.ts` 的 `getAllTool(query)` 查询支持 `folder_id` 筛选的工作空间工具
Expand Down Expand Up @@ -629,7 +639,7 @@ Workspace、System 资源管理及 System 共享资源的 `knowledge.ts` 提供
`DocumentItem`。名称上限 128 字符;共享文档仍只提供查询。

`workspace/knowledge/document.ts` 同时维护文档启停、删除、召回设置、向量化、分词索引、
任务取消、生成问题、迁移、同步、导出、原文件下载/替换及标签关联。
任务取消、生成问题、迁移、同步、导出、原文件下载/替换。
批量任务沿用 v2 的 `id_list` / `state_list`;生成问题使用 `document_id_list`,
添加标签使用 `document_ids` / `tag_ids`,迁移和批量导出直接提交文档 ID 数组。
文档导出分别提供四个接口,不以单元素批量请求代替单项接口:
Expand All @@ -654,6 +664,15 @@ Workspace、System 资源管理及 System 共享资源的 `knowledge.ts` 提供
全部使用 PUT;单项不传请求体,批量提交 `{ id_list }`。飞书接口需部署环境支持。
共享文档 API 继续仅提供查询,不增加写入方法。

`system/resource-management/knowledge/document.ts` 与 `system/shared-resources/knowledge/document.ts`
提供与 `workspace/knowledge/document.ts` 相同的完整文档接口集合,方法名、参数、请求体和返回类型保持一致。
普通文档前缀分别为 `/system/resource/knowledge/<knowledgeId>/document` 和
`/system/shared/knowledge/<knowledgeId>/document`,不读取工作空间 ID。
飞书接口在各自的知识库资源前缀后追加 `/lark/<knowledgeId>`;模板下载使用各自前缀下的
`/document/table_template/export` 和 `/document/template/export`,不包含知识库 ID。
系统路径组织沿用 v2,新增的 v3 文件 ID 导入和策略协议需对应部署环境支持,尚未联调。
文档标签关联接口统一维护在各范围的 `tags.ts`。四套现有 Document API 由知识库详情 context 按范围装配。

`workspace/knowledge/document.ts` 维护文档分页查询,路径为
`/workspace/<workspaceId>/knowledge/<knowledgeId>/document/<currentPage>/<pageSize>`。
`putBatchCreateDocuments(knowledgeId, documents)` 统一通过 PUT `document/batch_create` 批量创建文档,
Expand Down Expand Up @@ -698,13 +717,16 @@ Workspace、System 资源管理及 System 共享资源的 `knowledge.ts` 提供
不声明多行编辑接口,也不组合旧接口模拟多行保存。

`system/resource-management/knowledge/tags.ts` 与 `system/shared-resources/knowledge/tags.ts`
提供与普通 Workspace 相同的七个标签接口,参数、请求体和返回类型保持一致,仅资源前缀分别为
`/system/resource/knowledge/<knowledgeId>/tags` 和 `/system/shared/knowledge/<knowledgeId>/tags`,不读取工作空间 ID。
两套系统标签 API 暂未接入知识库详情 context;Workspace 共享标签 API 保持现有只读查询,不补写入方法。

文档与标签的关联由 `workspace/knowledge/document.ts` 维护,不使用标签删除接口代替取消关联。
提供与普通 Workspace 相同的七个标签接口及四个文档标签关联接口,参数、请求体和返回类型保持一致。
公共前缀分别为 `/system/resource/knowledge/<knowledgeId>` 和 `/system/shared/knowledge/<knowledgeId>`,
不读取工作空间 ID;各接口追加对应的 `tags`、`document` 或 `tag` 路径。
具体接口需部署环境支持。四套现有标签 API 由知识库详情 context 按范围装配;
Workspace 共享标签 API 保持现有只读查询,不补写入方法。

文档与标签的关联由 `workspace/knowledge/tags.ts` 维护,不使用标签删除接口代替取消关联。
该模块公共前缀为知识库路径,各接口按后端协议追加 `tags`、`document` 或 `tag`,不因文件归属改变请求地址。
`getDocumentTags(knowledgeId, documentId, query?)` 查询 `document/<documentId>/tags`,返回分组标签,支持 `query.name` 搜索;
`postAddDocumentTags` POST 到 `document/batch_add_tag`,提交 `{ document_ids, tag_ids }`;
`postBatchAddDocumentTags` POST 到 `document/batch_add_tag`,提交 `{ document_ids, tag_ids }`;
`putDeleteDocumentTags` PUT 到 `document/<documentId>/tags/batch_delete`,直接提交标签 ID 数组。
`putUnlinkTagDocuments` PUT 到知识库下的 `tag/<tagId>/docs_delete`,提交 `{ id_list: documentIds }`,
用于取消同一标签与单个或多个文档的关联。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@ import type { ApplicationDetail, Dict } from '@/api/types'

const prefix = '/system/resource/application'

/** 获取 System 资源管理不分页的智能体列表。 */
const getAllApplication = (query?: Dict<unknown>) => get<ApplicationDetail[]>(prefix, query)

/** 获取 System 资源管理智能体分页列表。 */
const getApplicationPage = (page: ParamsPage, query?: Dict<unknown>) => {
return get<ResponsePage<ApplicationDetail>>(`${prefix}/${page.currentPage}/${page.pageSize}`, query)
}


/** 删除系统资源管理智能体。 */
const deleteApplication = (applicationId: string) => {
return del<undefined, boolean>(`${prefix}/${applicationId}`)
Expand All @@ -21,6 +23,7 @@ const exportApplication = (applicationId: string, applicationName: string) => {
}

export default {
getAllApplication,
getApplicationPage,
deleteApplication,
exportApplication,
Expand Down
204 changes: 204 additions & 0 deletions ui/src/api/admin/system/resource-management/knowledge/document.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
import { del, downloadRequest, get, getExportFile, post, postExportExcel, put } from '@/api/admin/core/request'
import type { ParamsPage, ResponsePage } from '@/api/admin/core/types'
import type {
Dict,
DocumentGeneratePayload,
DocumentFileImportPayload,
DocumentImportPayload,
DocumentSplitResult,
DocumentStrategy,
DocumentItem,
DocumentQuickCreatePayload,
DocumentSettingPayload,
DocumentTaskState,
DocumentTaskType,
DocumentUpdatePayload,
WebDocumentImportPayload,
LarkDocumentList,
LarkDocumentImportPayload,
} from '@/api/types'

const getPrefix = (knowledgeId: string) => `/system/resource/knowledge/${knowledgeId}/document`

/** 获取知识库不分页的文档选项。 */
const getAllDocuments = (knowledgeId: string) => get<DocumentItem[]>(getPrefix(knowledgeId))

/** 获取文档分页列表,支持名称和创建者筛选。 */
const getDocumentPage = (knowledgeId: string, page: ParamsPage, query?: Dict<unknown>) =>
get<ResponsePage<DocumentItem>>(`${getPrefix(knowledgeId)}/${page.currentPage}/${page.pageSize}`, query)

/** 获取单个文档详情,支持直接访问分段页。 */
const getDocumentDetail = (knowledgeId: string, documentId: string) => get<DocumentItem>(`${getPrefix(knowledgeId)}/${documentId}`)

/** 批量创建空白文档或导入text文档。 */
const putBatchCreateDocuments = (knowledgeId: string, documents: DocumentQuickCreatePayload[] | DocumentImportPayload[]) =>
put<DocumentQuickCreatePayload[] | DocumentImportPayload[], DocumentItem[]>(`${getPrefix(knowledgeId)}/batch_create`, documents)

/** 分段预览 */
const postSplitDocuments = (knowledgeId: string, files: File[], strategy: DocumentStrategy) => {
const data = new FormData()
files.forEach((file) => data.append('file', file))
data.append('doc_strategy', JSON.stringify(strategy))
return post<FormData, DocumentSplitResult[]>(`${getPrefix(knowledgeId)}/split`, data)
}

/** 复用已上传文件,按处理策略直接解析并写入知识库。 */
const postImportTextDocuments = (knowledgeId: string, fileIds: string[], strategy: DocumentStrategy) =>
post<DocumentFileImportPayload, DocumentItem[]>(`${getPrefix(knowledgeId)}/import`, { file_id_list: fileIds, doc_strategy: strategy })

/** 从已上传表格创建文档,每个 sheet 由服务端创建独立文档。 */
const postImportTableDocumentsByFileIds = (knowledgeId: string, fileIds: string[]) =>
post<DocumentFileImportPayload, DocumentItem[]>(`${getPrefix(knowledgeId)}/table_by_file_ids`, { file_id_list: fileIds })

/** 从已上传文件创建 QA 问答对文档。 */
const postImportQADocumentsByFileIds = (knowledgeId: string, fileIds: string[]) =>
post<DocumentFileImportPayload, DocumentItem[]>(`${getPrefix(knowledgeId)}/qa_by_file_ids`, { file_id_list: fileIds })

/** 按地址导入 Web 文档并应用文档处理策略。 */
const postWebDocument = (knowledgeId: string, payload: WebDocumentImportPayload) =>
post<WebDocumentImportPayload, boolean>(`${getPrefix(knowledgeId)}/web`, payload)

/** 查询飞书文件夹中的文件,支持分页加载。 */
const getLarkDocumentList = (knowledgeId: string, folderToken: string, query: { page_token?: string } = {}) =>
post<{ page_token?: string }, LarkDocumentList>(`/system/resource/knowledge/lark/${knowledgeId}/${folderToken}/doc_list`, query)

/** 导入所选飞书文档,沿用飞书扩展接口。 */
const postImportLarkDocuments = (knowledgeId: string, documents: LarkDocumentImportPayload[]) =>
post<LarkDocumentImportPayload[], boolean>(`/system/resource/knowledge/lark/${knowledgeId}/import`, documents)

/** 下载表格模板。 */
const exportTableDocumentTemplate = (format: 'excel' | 'csv') =>
getExportFile(`${format}-template.${format === 'excel' ? 'xlsx' : 'csv'}`, '/system/resource/knowledge/document/table_template/export', {
type: format,
})

/** 下载 QA 模板。 */
const exportQADocumentTemplate = (format: 'excel' | 'csv') =>
getExportFile(`${format}-template.${format === 'excel' ? 'xlsx' : 'csv'}`, '/system/resource/knowledge/document/template/export', { type: format })

/** 更新文档名称、启用状态或设置,返回保存后的文档。 */
const putDocument = (knowledgeId: string, documentId: string, data: DocumentUpdatePayload) =>
put<DocumentUpdatePayload, DocumentItem>(`${getPrefix(knowledgeId)}/${documentId}`, data)

/** 删除单个文档。 */
const deleteDocument = (knowledgeId: string, documentId: string) => del(`${getPrefix(knowledgeId)}/${documentId}`)

/** 批量删除文档。 */
const putBatchDeleteDocuments = (knowledgeId: string, documentIds: string[]) =>
put(`${getPrefix(knowledgeId)}/batch_delete`, { id_list: documentIds })

/** 单个文档向量化。 */
const putDocumentRefresh = (knowledgeId: string, documentId: string, stateList: DocumentTaskState[]) =>
put(`${getPrefix(knowledgeId)}/${documentId}/refresh`, { state_list: stateList })

/** 批量文档向量化。 */
const putBatchRefreshDocuments = (knowledgeId: string, documentIds: string[], stateList: DocumentTaskState[]) =>
put(`${getPrefix(knowledgeId)}/batch_refresh`, { id_list: documentIds, state_list: stateList })

/** 单个文档分词索引。 */
const putDocumentTokenize = (knowledgeId: string, documentId: string, stateList: DocumentTaskState[]) =>
put(`${getPrefix(knowledgeId)}/${documentId}/tokenize`, { state_list: stateList })

/** 批量文档分词索引。 */
const putBatchTokenizeDocuments = (knowledgeId: string, documentIds: string[], stateList: DocumentTaskState[]) =>
put(`${getPrefix(knowledgeId)}/batch_tokenize`, { id_list: documentIds, state_list: stateList })

/** 单个/批量生成关联问题。 */
const putGenerateDocumentQuestions = (knowledgeId: string, data: DocumentGeneratePayload) =>
put(`${getPrefix(knowledgeId)}/batch_generate_related`, data)

/** 单个取消文档任务。 */
const putCancelTask = (knowledgeId: string, documentId: string, taskType: DocumentTaskType) =>
put(`${getPrefix(knowledgeId)}/${documentId}/cancel_task`, { type: taskType })

/** 批量取消指定文档任务。 */
const putBatchCancelDocumentTask = (knowledgeId: string, documentIds: string[], taskType: DocumentTaskType) =>
put(`${getPrefix(knowledgeId)}/batch_cancel_task`, { id_list: documentIds, type: taskType })

/** 同步单个 Web 文档。 */
const putDocumentSync = (knowledgeId: string, documentId: string) => put(`${getPrefix(knowledgeId)}/${documentId}/sync`)

/** 批量同步 Web 文档。 */
const putMulSyncDocument = (knowledgeId: string, documentIds: string[]) =>
put<{ id_list: string[] }, boolean>(`${getPrefix(knowledgeId)}/batch_sync`, { id_list: documentIds })

/** 同步单个飞书文档。 */
const putLarkDocumentSync = (knowledgeId: string, documentId: string) =>
put(`/system/resource/knowledge/lark/${knowledgeId}/document/${documentId}/sync`)

/** 批量同步飞书文档。 */
const putMulLarkSyncDocument = (knowledgeId: string, documentIds: string[]) =>
put<{ id_list: string[] }, boolean>(`/system/resource/knowledge/lark/${knowledgeId}/_batch`, { id_list: documentIds })

/** 批量文档设置。 */
const putBatchDocumentSetting = (knowledgeId: string, documentIds: string[], data: DocumentSettingPayload) =>
put(`${getPrefix(knowledgeId)}/batch_hit_handling`, { ...data, id_list: documentIds })

/** 批量/单个迁移至目标知识库。 */
const putMigrateDocuments = (knowledgeId: string, targetKnowledgeId: string, documentIds: string[]) =>
put(`${getPrefix(knowledgeId)}/migrate/${targetKnowledgeId}`, documentIds)

/** 将单个文档导出为 Excel。 */
const exportDocument = (knowledgeId: string, documentId: string, documentName: string) =>
getExportFile(`${documentName.trim()}.xlsx`, `${getPrefix(knowledgeId)}/${documentId}/export`)

/** 将选中文档批量导出为 Excel。 */
const exportMulDocument = (knowledgeId: string, documentIds: string[], knowledgeName: string) =>
postExportExcel(`${knowledgeName.trim()}.xlsx`, `${getPrefix(knowledgeId)}/batch_export`, undefined, documentIds)

/** 将单个文档及图片导出为 ZIP。 */
const exportDocumentZip = (knowledgeId: string, documentId: string, documentName: string) =>
getExportFile(`${documentName.trim()}.zip`, `${getPrefix(knowledgeId)}/${documentId}/export_zip`)

/** 将选中文档及图片批量导出为 ZIP。 */
const exportMulDocumentZip = (knowledgeId: string, documentIds: string[], knowledgeName: string) =>
downloadRequest(`${getPrefix(knowledgeId)}/batch_export_zip`, 'POST', documentIds, undefined, `${knowledgeName.trim()}.zip`)

/** 下载文档原文件。 */
const downloadDocumentSource = (knowledgeId: string, document: DocumentItem) =>
getExportFile(document.name, `${getPrefix(knowledgeId)}/${document.id}/download_source_file`)

/** 替换文档原文件。 */
const postReplaceDocumentSource = (knowledgeId: string, documentId: string, file: File) => {
const data = new FormData()
data.append('file', file)
return post(`${getPrefix(knowledgeId)}/${documentId}/replace_source_file`, data)
}

export default {
getAllDocuments,
getDocumentDetail,
getDocumentPage,
putBatchCreateDocuments,
postSplitDocuments,
postImportTextDocuments,
postImportTableDocumentsByFileIds,
postImportQADocumentsByFileIds,
postWebDocument,
getLarkDocumentList,
postImportLarkDocuments,
exportTableDocumentTemplate,
exportQADocumentTemplate,
putDocument,
deleteDocument,
putBatchDeleteDocuments,
putDocumentRefresh,
putBatchRefreshDocuments,
putDocumentTokenize,
putBatchTokenizeDocuments,
putCancelTask,
putBatchCancelDocumentTask,
putBatchDocumentSetting,
putGenerateDocumentQuestions,
putMigrateDocuments,
putDocumentSync,
putMulSyncDocument,
putLarkDocumentSync,
putMulLarkSyncDocument,
exportDocument,
exportMulDocument,
exportDocumentZip,
exportMulDocumentZip,
downloadDocumentSource,
postReplaceDocumentSource,
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ const putKnowledge = (knowledgeId: string, payload: Partial<KnowledgeItem>) => {
return put<Partial<KnowledgeItem>, KnowledgeItem>(`${prefix}/${knowledgeId}`, payload)
}

/** 更新飞书知识库信息。 */
const putLarkKnowledge = (knowledgeId: string, payload: Partial<KnowledgeItem>) => {
return put<Partial<KnowledgeItem>, KnowledgeItem>(`${prefix}/lark/${knowledgeId}`, payload)
}

/** 根据知识库中的分段生成关联问题。 */
const putGenerateKnowledgeQuestions = (knowledgeId: string, payload: KnowledgeGeneratePayload) => {
return put(`${prefix}/${knowledgeId}/generate_related`, payload)
Expand Down Expand Up @@ -83,6 +88,7 @@ export default {
getKnowledgeDetail,
getKnowledgePage,
putKnowledge,
putLarkKnowledge,
putReEmbeddingKnowledge,
putGenerateKnowledgeQuestions,
getKnowledgeMcpConfig,
Expand Down
Loading
Loading