Skip to content

feat: 支持知识库文件批量上传与状态跟踪 - #56

Merged
Snailclimb merged 3 commits into
Snailclimb:masterfrom
Lancasteerr:feat/issue-52-batch-upload
Sep 16, 2026
Merged

Snailclimb merged 3 commits into
Snailclimb:masterfrom
Lancasteerr:feat/issue-52-batch-upload

Conversation

@Lancasteerr

Copy link
Copy Markdown
Contributor

概要

为知识库上传页面增加批量上传能力,支持多文件选择和拖拽、前端队列调度、逐文件状态跟踪及失败重试。

本 PR 仅修改前端,继续复用现有的单文件上传、知识库查询和重新向量化接口,不新增后端批量接口,也不调整数据库、Redis Stream 或服务端限流配置。

变更内容

批量选择与文件校验

  • 支持一次选择或拖拽多个文件,单批最多添加 10 个
  • 支持 PDF、DOCX、DOC、TXT 和 MD,单个文件最大 50MB
  • 校验空文件、不支持的格式、文件大小及重复选择
  • 支持为每个文件单独填写可选的知识库名称
  • 上传期间仍可继续添加文件,并与已有文件共用同一个队列

上传队列与请求节奏

  • 使用共享上传队列,最多同时上传 2 个文件
  • 控制上传请求的启动间隔,避免小文件连续上传触发后端限流
  • 支持在队列运行期间继续追加任务,并避免同一文件重复入队
  • 单个文件上传失败不会中断队列中的其他任务

状态跟踪与失败恢复

  • 分别展示待提交、等待上传、上传中、等待向量化、向量化中、已完成和失败状态
  • 上传成功后根据返回的知识库 ID 轮询向量化状态
  • 上传失败时保留错误原因,并在短暂冷却后允许单独重新上传
  • 文件已保存但向量化失败时,调用现有 revectorize 接口重新处理
  • 展示后端返回的重复知识库结果和向量化失败原因
  • 在页面卸载时清理上传队列、轮询任务和重试计时器

代码组织与测试

  • 将文件选择区域、上传列表和批量上传状态编排拆分为独立组件与 Hook
  • 将文件校验、状态映射和限速队列提取为可独立测试的纯逻辑
  • 增加跨批次去重、文件数量上限、并发限制、请求节奏、动态追加和失败隔离测试

范围说明

  • 没有新增或修改后端接口
  • 不修改数据库结构和 Redis Stream
  • 不调整后端上传限流配置
  • 不修改简历上传使用的共享组件
  • 不包含上传取消、字节级进度条和批量删除功能

验证

  • node --test src/pages/knowledgeBaseBatchUpload.test.ts:5 个测试全部通过
  • npm run build:前端生产构建通过

关联 Issue

Closes #52

- 拆分文件选择、上传列表和批量上传 Hook,支持单批最多 10 个文件及自定义知识库名称
- 校验文件格式、大小和重复选择,以双并发和请求间隔批量提交
- 轮询向量化进度并展示各阶段状态,支持上传失败重试和重新向量化
- 增加文件校验、队列并发和状态映射测试
- 引入共享限速队列,限制并发与启动间隔,并允许上传期间继续追加文件
- 隔离单项失败并区分待提交、排队、上传和向量化状态,避免任务重复入队
- 增加上传重试冷却、逐项状态轮询和组件卸载资源清理
- 覆盖跨批次去重、文件数量上限、动态追加和失败不中断场景

@Snailclimb Snailclimb left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这版实现符合 #52 里约定的范围,本轮审查未发现阻塞性的功能问题,代码审查通过。共享队列限制并发和发送节奏,上传与向量化分别重试,也没有扩大后端改动范围。

已验证:

  • 新增批量上传测试 5/5 通过,现有四组前端测试 13/13 通过。
  • pnpm run build 通过。
  • 使用真实 Chrome、模拟 API 响应验证了多文件选择/拖拽、上传期间追加文件、并发上限 2、请求启动间隔、自定义名称、单文件失败不影响后续文件、上传重试、向量化重试和重复文件提示;未发现浏览器运行时异常。这部分没有连接真实对象存储和向量化服务。
  • 已批准运行此前等待维护者授权的 GitHub Actions;前端 CI 已通过,后端 CI 仍在运行,合并前需要确认全部检查通过。

有一项非阻塞建议:把新增的 pnpm run test:knowledge-base-upload 接入 .github/workflows/ci.yml 的前端测试步骤。目前 CI 只执行原有四组测试,构建也不会运行这 5 个测试,后续队列逻辑回归可能漏检。

PR 先保持 Draft。你确认这一轮完成后可以转为 Ready for review,等 CI 全绿再合并。感谢贡献!

@Lancasteerr

Copy link
Copy Markdown
Contributor Author

已按建议将 pnpm run test:knowledge-base-upload 接入 .github/workflows/ci.yml 的前端测试步骤。本地已验证五组前端测试全部通过,前端构建成功。
本轮修改已完成,现将 PR 标记为 Ready for review。感谢 review!

@Lancasteerr
Lancasteerr marked this pull request as ready for review September 16, 2026 13:55
@Snailclimb
Snailclimb merged commit d2ac217 into Snailclimb:master Sep 16, 2026
2 checks passed
@Lancasteerr
Lancasteerr deleted the feat/issue-52-batch-upload branch September 16, 2026 14:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

知识库是不是做个批量上传更好一点

2 participants