教程链接:https://www.bilibili.com/video/BV12sFjzgEAB/?vd_source=5b7a3eabd3d93827179ee8a9f09ebcedhttps://www.bilibili.com/video/BV12sFjzgEAB/?vd_source=5b7a3eabd3d93827179ee8a9f09ebced
代码链接见文末
一. 项目需求分析
本项目旨在开发一款基于多模态检索增强生成(RAG)技术的PDF问答系统,支持通过命令行(CLI)和Flask Web UI两种模式运行。系统核心能力为:批量处理指定目录下的PDF文件,将PDF页面转为图片并增量入库(基于文件Hash),结合多模态大模型、对话记忆管理,实现对PDF内容的精准检索与自然语言问答,同时支持检索结果(图片+文本)的可视化预览,满足本地PDF文档高效查询的需求。
找不到论文,如何解决?
二、功能需求
2.1 检索器
目录扫描:支持扫描指定本地目录下的所有PDF文件,自动识别可处理文件。
增量入库校验:基于文件级Hash值判断PDF是否已入库或内容是否修改,已入库且未修改的PDF跳过处理,已修改的PDF清理旧数据后重新处理,Hash计算失败的PDF提示并跳过(增量索引并将向量本地化存储,冷启动策略)。
向量库入库:将导出的PDF页面图片、页面摘要、文件路径、页码、文件Hash等信息批量存入Chroma向量库,用于后续检索。
按照页面摘要检索,按照页面图片重排。
2.2 多模态问答核心功能
对话记忆管理:通过mem0实现多轮对话记忆的存储、检索与清理,记忆条数可配置,支持关联用户ID,确保多轮对话上下文连贯。
查询策略适配:自动判断用户查询类型,适配三种查询策略——直接回答、查询重写(将模糊查询转为精准检索语句)、多步查询(复杂问题拆解为子问题,逐步检索汇总结果)。
返回综合的结果
采用ColPali方案,直接以「整页截图(image)」为单位,因而省去了多步文本抽取与工程化规则,减少维护成本。
逻辑简单→检索结果可观测性强
三.核心流程
建立PDF索引入库:
问答流程:
四.ColPali——无需解析的多模态RAG新范式
ColPali(ColBERT-PALM)提出了一种颠覆性思路:无需对文档进行拆分解析,直接将PDF等多模态文档作为“页级别单元”进行编码,实现端到端的多模态检索。
1 核心创新
页级别联合编码:基于ColBERT的上下文感知编码能力与PALM的多模态理解能力,将文档页面中的文本、图像、表格作为一个整体,生成“页向量”,保留模态间的空间与语义关联;
跨模态交互建模:通过自注意力机制捕捉页面内文本与图像的交互关系(如“文本指向图像某区域”“表格数据支撑文本结论”),避免拆分导致的关联断裂;
高效检索:检索时将用户查询与页向量直接匹配,无需多模态索引拆分与融合,简化系统架构。
2 适用场景
适用于文档结构复杂、模态关联紧密且无需精准提取单模态元素的场景(如学术论文全文检索、合同文档跨模态查询),目前相关研究已证实其在页级别检索任务中精度接近传统拆分方法,且工程效率提升40%以上。
3.MaxSim
在计算相似度时,ColPali不同于往常通过一个向量表示一个句子或一个段落的方式,而是利用嵌入列表,采用 "MaxSim "操作来计算两个文本之间的相似度。MaxSim 计算查询中的每个词与文档中一个页面对应的所有块之间的最大相似度,累加每个词与块的最大相似度得到该页面与查询的总相似度分数。对所有页面计算查询的总相似度分数,然后对页面按照总相似度分数降序排列,选择总相似度最高的页面作为与查询最匹配的页面。
具体公式如下,其中S为查询q和文档d之间的最终相似度得分,Eq表示查询q的嵌入,Ed表示图像块的嵌入:
五、依赖需求
5.1 核心依赖包
Web框架:Flask(用于Web UI启动与请求处理)。
向量库:chromadb、langchain-community(用于PDF页面向量存储与检索)。
模型调用:openai(用于多模态模型、文本模型调用)。
记忆管理:mem0(用于多轮对话记忆存储与检索)。
环境配置:python-dotenv(用于加载.env环境变量)。
嵌入模型:langchain-community[qwen-embedding](用于生成PDF页面向量)。
路径处理:pathlib(用于跨系统文件路径处理)。
5.2 可选依赖
PDF处理:根据docrag.py、utils.py实际实现,可能需要依赖PyPDF2、pdf2image等PDF处理包。
图片处理:可能需要依赖PIL、base64等包(用于图片转base64编码)。
代码地址:
通过网盘分享的文件:基于mem0和多模态RAG的本地文件问答系统
链接: https://pan.baidu.com/s/1GnBuj0sW7PfI9eKMbjytow?pwd=asds 提取码: asds
--来自百度网盘超级会员v6的分享