惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
The Cloudflare Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Martin Fowler
Martin Fowler
小众软件
小众软件
量子位
月光博客
月光博客
P
Proofpoint News Feed
IT之家
IT之家
腾讯CDC
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
雷峰网
雷峰网
V
Visual Studio Blog

博客园 - work hard work smart

Java 面试1 Java 常见面试问题 手撕java常用代码 WebStorm 创建react工程 构建企业级 Text-to-SQL Agent:基于 LangGraph 的智能数据查询系统设计 Harness 工程:驾驭 AI Agent 的工程化艺术 DeepAgents 多智能体架构实战:从设计模式到后端选型 Vue 自定义组件完全指南:从零构建待办事项应用 使用 LangChain + Hugging Face 构建文本向量化服务 SQLAlchemy 使用详解 Python 中使用 Elasticsearch 的完整指南 Qdrant 向量数据库使用指南 OpenEvals 快速入门:LLM 评估指南 DeepEval 快速入门:LLM 应用评估指南 LangSmith 批量评估完全指南 Qwen-Agent 入门指南:快速构建智能体应用 LangSmith 集成实战:从追踪到评估的完整指南 初识 go-zero:一款让你写后端更规范、更高效的 Go 微服务框架 RAG 中为什么需要 Rerank,以及如何使用 Rerank LangChain4j RAG 核心组件与组合方式 如何使用 Elasticsearch 进行全文检索和向量检索 MinerU Docker 部署指南 5 分钟上手:为 Cline 配置一个免费的 MCP 天气服务 Neo4j 图数据库安装与 Spring Boot 集成实战指南 LangFuse 实战指南:用 @observe 三行代码给 LLM 应用加上全链路追踪 Function Call 深度解析:让大模型从"嘴炮"到"实干"的技术革命 Spring AI 提示词模板实战:告别硬编码,实现提示词工程化管理 LangChain4j 实战指南:用 Java 轻松构建 AI 应用 Spring AI 对话短期记忆实战:让大模型拥有"记忆力" Spring AI 提示词工程实战:让大模型更懂你的意图
RAG学习笔记1--系统文件导入流程
work hard work smart · 2026-05-04 · via 博客园 - work hard work smart

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