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

推荐订阅源

Forbes - Security
Forbes - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
量子位
GbyAI
GbyAI
B
Blog RSS Feed
月光博客
月光博客
人人都是产品经理
人人都是产品经理
腾讯CDC
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
The Cloudflare Blog
D
Docker
Cyberwarzone
Cyberwarzone
U
Unit 42
NISL@THU
NISL@THU
C
Check Point Blog
B
Blog
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
Recorded Future
Recorded Future
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
P
Proofpoint News Feed
F
Fortinet All Blogs
V
V2EX
T
Threat Research - Cisco Blogs
T
Threatpost
S
SegmentFault 最新的问题
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 司徒正美
P
Privacy & Cybersecurity Law Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
TaoSecurity Blog
TaoSecurity Blog
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Y
Y Combinator Blog
P
Privacy International News Feed
L
Lohrmann on Cybersecurity
AWS News Blog
AWS News Blog
G
Google Developers Blog
美团技术团队

博客园 - work hard work smart

使用 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 提示词工程实战:让大模型更懂你的意图 Spring AI ChatClient 深度解析:优雅构建大模型应用的利器 Spring AI Alibaba DashScopeChatModel 实战 Spring 中 SSE 流式输出的多种实现方式详解 OpenSandbox 实战指南:为 AI Agent 构建安全的代码执行沙箱 在本机启动 LangGraph 开发服务器:完整指南 DeepAgents中Backend的奥秘:让AI Agent拥有文件操作能力 为什么选择 Go 开发 Web 接口?从入门到实践 智能搜索DeepAgent笔记 RAG学习笔记2--系统查询流程 百炼 WebSearch 快速入门指南 Python 连接 MongoDB 完整指南:从连接配置到增删改查实战 一行命令搞定 MongoDB 开发环境:Docker Compose 部署 + 可视化管理 使用 Attu 可视化管理 Milvus 向量数据库 在 Windows Docker 中快速安装 Milvus 2.5.6 minio使用 Spark 集群搭建 hadoop集群安装 Spring AI Alibaba 入门实战 Windows 安装 OpenClaw 实战指南 MyBatis 核心流程和原理 Idea中安装Claude code插件 Spark 编程 使用Matplotlib 绘制直方图 Flink安装部署 Flume安装 查找导致cpu过高的代码方法 JVisualVM监控远程Java进程 jmap jacoco多模块生成java单元测试报告实践 arthas 使用demo LockSupport Exchanger CyclicBarrier CountDownLatch 手把手教你用python开始第一个机器学习项目
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