work hard work smart

专注于AI+Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

RAG学习笔记1--系统文件导入流程

Posted on 2026-05-04 22:35  work hard work smart  阅读(47)  评论(0)    收藏  举报

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