支持的文件格式
每种格式都有 fallback 策略 — 如果专用 Loader 失败或未安装依赖,会自动降级到通用 Loader。Excel 文档以 elements 模式加载并标记表格内容,PowerPoint 按幻灯片编号标记。
处理管线
详细步骤
- 上传文件:保存到本地
data/documents/{user_id}/{kb_id}/{uuid}_{filename},生成唯一文件名防冲突 - 创建记录:通过 Next.js API 创建文档元数据(fileName、filePath、fileType、fileSize)
- 触发处理:调用
POST /{kb_id}/documents/{doc_id}/process,加入BackgroundTasks异步执行 - 加载文档:根据文件扩展名选择对应的 LangChain Loader
- 智能分块:优先使用 SmartChunker,fallback 到 RecursiveCharacterTextSplitter
- 生成向量:使用用户配置的 Embedding 模型(
create_embeddings(user_id)) - 存储到 pgvector:每个 chunk 附带元数据 —
user_id、knowledge_base_id、document_id、chunk_index、source、page、created_at - 使 BM25 失效:通知 BM25Store 该知识库的索引需要重建(下次检索时自动构建)
- 更新状态:通过 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 获取:
如果获取配置失败,自动使用默认配置。
分块预览
提供客户端预览接口,可在配置分块参数时实时查看效果:index、content 和 length。