RAG系统文件导入流程图
总体流程概览
graph LR
A[1.前端上传] --> B[2.FastAPI接收]
B --> C[保存本地+MinIO]
C --> D[3.启动LangGraph]
D --> E{3.1文件类型}
E -->|PDF| F[3.2 PDF转MD<br/>MinerU API]
E -->|MD| G[直接处理]
F --> H[3.3 图片处理<br/>qwen3-vl-flash]
G --> H
H --> I[3.4 文档切分]
I --> J[3.5 商品识别<br/>qwen-flash]
J --> K[3.6 向量化<br/>BGE-M3本地]
K --> L[3.7 Milvus入库]
L --> M[4.状态监控]
详细流程说明
1. 前端上传阶段
- 前端页面:
import.html 提供拖拽/点击上传界面
- 支持格式: PDF和Markdown文件
- API调用: POST
/upload 接口
2. 后端接收处理 (file_import_service.py)
- 接收文件: FastAPI接收多文件上传
- 生成本地路径: 按日期创建目录
output/YYYYMMDD/
- 保存临时文件: 将上传文件保存到本地临时目录
- MinIO上传: 将文件上传至MinIO对象存储进行持久化
- 生成TaskID: 为每个文件生成唯一UUID作为任务标识
- 启动后台任务: 使用FastAPI BackgroundTasks异步执行LangGraph流程
3. LangGraph工作流执行 (main_graph.py)
3.1 入口节点 (node_entry)
- 参数校验: 验证文件路径和任务ID
- 文件类型识别: 根据扩展名判断PDF或Markdown
- 状态初始化: 设置相应的处理开关标志
3.2 PDF转Markdown节点 (node_pdf_to_md) - 仅PDF文件
- 路径校验: 验证PDF文件和输出目录
- MinerU上传: 调用MinerU API上传PDF进行解析
- 任务轮询: 等待MinerU解析完成
- 结果下载: 下载解析结果ZIP包并解压
- 提取MD文件: 从解压结果中提取Markdown文件
3.3 Markdown图片处理节点 (node_md_img)
- 图片扫描: 扫描Markdown引用的图片文件
- 图片摘要生成: 调用多模态大模型为图片生成内容摘要 (qwen3-vl-flash 视觉语言模型)
- MinIO上传: 将图片上传至MinIO对象存储
- 路径替换: 将本地图片路径替换为MinIO访问URL
- 摘要注入: 在Markdown中填充图片摘要信息
3.4 文档切分节点 (node_document_split)
- 标题切分: 按Markdown标题层级切分为独立章节
- 超长切分: 对超过2000字符的章节进行二次切分
- 短段合并: 合并同父标题下不足500字符的短段落
- 元数据补全: 为每个chunk添加parent_title等元信息
- 本地备份: 将切分结果备份为JSON文件
3.5 商品名称识别节点 (node_item_name_recognition)
- 上下文构建: 取前5个chunk构建大模型识别上下文
- LLM调用: 调用大模型识别文档主体商品名称 (qwen-flash 语言模型, JSON模式)
- 结果回填: 将识别出的商品名称写入所有chunk的元数据
- 向量生成: 为商品名称生成BGE-M3稠密+稀疏双向量 (BGE-M3 Embedding模型 - 本地)
- Milvus存储: 将商品名称向量存入ITEM_NAME_COLLECTION集合
3.6 BGE-M3向量化节点 (node_bge_embedding)
- 文本拼接: 将商品名称与chunk内容拼接增强特征
- 批量处理: 每5个chunk为一批次进行向量化
- 双向量生成: 生成1024维稠密向量和变长稀疏向量 (BGE-M3 Embedding模型 - 本地)
- 状态更新: 将向量数据绑定到对应的chunk上
3.7 Milvus入库节点 (node_import_milvus)
- 集合准备: 创建或连接CHUNKS_COLLECTION集合
- 旧数据清理: 删除同名商品的旧数据保证幂等性
- 批量插入: 将带向量的chunk数据批量插入Milvus
- 主键回填: 获取插入后的chunk_id并更新状态
4. 状态监控
- 任务状态: pending → processing → completed/failed
- 节点进度: 实时记录已完成和运行中的节点
- 前端轮询: 通过GET
/status/{task_id} 接口获取进度
数据流转示意
原始文件(PDF/MD)
↓
本地临时文件 + MinIO对象存储
↓
处理后的Markdown(含MinIO图片URL和摘要)
↓
文档切分结果(List[Chunk])
↓
带商品名称的Chunk列表
↓
带双向量的Chunk列表(dense_vector + sparse_vector)
↓
Milvus向量数据库(CHUNKS_COLLECTION + ITEM_NAME_COLLECTION)
技术栈说明
- Web框架: FastAPI
- 工作流引擎: LangGraph
- PDF解析: MinerU API
- 对象存储: MinIO
- 向量数据库: Milvus
- Embedding模型: BGE-M3 (1024维稠密 + 稀疏向量) - 本地部署
- 语言模型 (LLM): qwen-flash (阿里云通义千问) - 商品名称识别
- 视觉语言模型 (VLM): qwen3-vl-flash (阿里云通义千问视觉版) - 图片摘要生成
- 重排序模型: BGE-Reranker-Large - 本地部署 (用于查询阶段)
- 文本分割: LangChain RecursiveCharacterTextSplitter