Skip to main content
DocumentService 负责文档的完整处理流程:从上传到解析、分块、向量化、存储。

支持的文件格式

每种格式都有 fallback 策略 — 如果专用 Loader 失败或未安装依赖,会自动降级到通用 Loader。Excel 文档以 elements 模式加载并标记表格内容,PowerPoint 按幻灯片编号标记。

处理管线

详细步骤

  1. 上传文件:保存到本地 data/documents/{user_id}/{kb_id}/{uuid}_{filename},生成唯一文件名防冲突
  2. 创建记录:通过 Next.js API 创建文档元数据(fileName、filePath、fileType、fileSize)
  3. 触发处理:调用 POST /{kb_id}/documents/{doc_id}/process,加入 BackgroundTasks 异步执行
  4. 加载文档:根据文件扩展名选择对应的 LangChain Loader
  5. 智能分块:优先使用 SmartChunker,fallback 到 RecursiveCharacterTextSplitter
  6. 生成向量:使用用户配置的 Embedding 模型(create_embeddings(user_id)
  7. 存储到 pgvector:每个 chunk 附带元数据 — user_idknowledge_base_iddocument_idchunk_indexsourcepagecreated_at
  8. 使 BM25 失效:通知 BM25Store 该知识库的索引需要重建(下次检索时自动构建)
  9. 更新状态:通过 Next.js API 更新文档状态为 completed,记录 chunkCount

文档状态


SmartChunker 智能分块

SmartChunker 借鉴 RAGFlow 的 DeepDoc 设计,根据文档类型选择最优分块策略,实现语义感知分块而非固定大小切分。

分块策略

支持的代码语言

Python、JavaScript/TypeScript、Java、Go、C/C++、C#、Ruby、PHP、Rust、Scala、Swift、Kotlin 等。

处理配置

处理配置可以在知识库级别自定义,通过 GET /api/knowledge-base/{id}/config 获取: 如果获取配置失败,自动使用默认配置。

分块预览

提供客户端预览接口,可在配置分块参数时实时查看效果:
返回分块结果,包含每个分块的 indexcontentlength