深度复盘:如何构建一个“能看懂图”的 RAG Agent ?
既然要做,就不能只是个“玩具”。从 PDF 乱码到精准还原图文上下文,从简单的关键词匹配到 HyDE + Rerank 混合检索,这篇文章记录了我在构建 Multimodal Agent RAG过程中的技术选型与踩坑实录。
前言:为什么传统的 RAG 像个“盲人”?
在做这个项目之前,我测试过市面上很多 RAG 系统。它们处理纯文本很溜,但一旦扔进去一份图文混排的研报或技术手册,体验就断崖式下跌。
最典型的场景:
用户:“这款芯片的架构图是怎样的?”
RAG:“根据文档第 12 页,该芯片采用 4nm 工艺,包含 8 个核心…”
用户:“图呢?我要看图!”
RAG:“(沉默或胡说八道)”
这种“上下文割裂”的痛点,让我决定自己动手写一个Multimodal Agent RAG。
我的目标很明确:它不仅要能读懂文字,还要能“看见”图片,并且理解图片在文档中的位置和含义。
一、 为什么要搞多模态 Agent?
其实理由特别简单 —— 为了 “偷懒” 嘛!
你想啊,如果每次都要手动把图片里的信息提取出来告诉 AI,那得多累啊?咱们的目标是让 AI 自己去“看”。而且现在的 AI Agent 这么火,如果一个 Agent 只能看文字,那它就像缺了一只眼睛,能力大打折扣。
所以这个项目的核心亮点就在于:
- 多模态 RAG:不仅索引文字,连图片也一起向量化,问图也能答。
- 全流程 Agent:不仅仅是搜索,还引入了 LangGraph 构建的智能工作流。Agent 会先识别意图(是闲聊还是查资料?),如果查资料,它还会自动进行查询改写 (Query Rewrite) 和任务拆解,让检索更精准。
- HyDE 假设性文档嵌入:针对用户问题太短(如 “推荐几款”)导致语义缺失,或多跳问题(需跨文档推理)导致检索断层的痛点,Agent 会先“脑补”一个包含完整逻辑链条的虚拟答案。用这个虚拟答案去检索,不仅能填补语义鸿沟,还能把分散在不同文档中的线索“串联”起来,极大提升了召回的全面性。
- 精准图文还原:这可不是简单的 OCR,而是保留了文档原本的排版逻辑,哪段文字配哪张图,清清楚楚。
二、 灵魂拷问:Embedding 模型选对了没?
很多人在做 RAG 时,把精力全放在了 Prompt Engineering 上,却忽视了最基础的向量模型。对于多模态 RAG 来说,Embedding 模型就是系统的“眼睛”。
如果用传统的 BERT 类或者文本embeding模型,它们只能看懂文本。图片怎么办?只能把图片转成文字(OCR)再向量化。但这样做会丢失大量的视觉信息(颜色、布局、风格)。
2.1 豆包多模态 Embedding 的降维打击
在这个项目中,我果断选择了 豆包 (Doubao) 多模态 Embedding 模型。
为什么是它?因为它是真正的 Native Multimodal。 它能把文本和图片映射到同一个高维向量空间。也就是说,在它的“脑子”里,“一只柯基的照片”和“柯基犬”这三个字的向量距离是非常近的。
这意味着什么?
- 以文搜图:搜“可爱的狗”,直接召回柯基的照片。
- 以图搜图:丢进去一张猫的照片,它能找到相关的文档。
- 跨模态对齐:它真正理解了图文之间的语义关联,而不是生硬的拼接。
没有这个多模态底座,多模态 Agent 流程也只是空中楼阁。
三、 深度解析:Agent 模式 vs 普通 RAG 模式
很多朋友可能会问:“Agent RAG 和普通的 RAG 到底有啥区别?”咱们来打个比方:
3.1 普通模式 (Traditional RAG)
就像一个 “只会查字典的实习生”。
- 流程:用户问什么 -> 直接拿去数据库搜 -> 搜到什么给大模型 -> 大模型总结回答。
- 缺点:如果你问得不清楚(比如只问 “它多少钱?”),或者问题很复杂,它就傻眼了,搜出来的东西往往风马牛不相及。
3.2 Agent 模式 (Agentic RAG)
这是一个 “有经验的研究员”。
- **思考 (Reasoning)**:它收到问题后,不会急着去搜。
- 意图识别:它会先想:“老板这是在跟我闲聊,还是在问正经事?”
- **查询改写 (Rewrite)**:如果你问 “它多少钱?”,它会结合上下文自动补全为 “iPhone 15 Pro 多少钱?”。
- HyDE 增强:如果你问得很简略,它会先写一篇 “假设性的标准答案”,用这个答案去库里比对。
- **规划 (Planning)**:面对复杂问题,它会将任务拆解成多个子任务,分头行动。
- **精准筛选 (Filtering)**:检索回来后,它还会调用 Cross-Encoder 进行 Rerank (重排序),像漏斗一样把不相关的结果踢出去,确保喂给大模型的都是精华。
在这个项目中,我通过 LangGraph 实现了这套完整的思考回路,让系统真的“活”了起来。
四、 揭秘:Agent 的完整思考链路 (Workflow)
在做这个项目的时候,我一直在想:如果只是用户搜什么,我就查什么,那不就只是个 “高级搜索引擎” 吗?这哪行啊?
真正的 Agent,应该是有 思考能力 的。 所以,我给它装上了一个 “大脑”,让它学会了 自主规划。下面就是它处理一个复杂问题时的完整心路历程:
4.1 用户输入
用户发来一条消息,比如:“帮我查一下 A 产品的价格,并对比一下 B 产品。”
4.2 意图识别 (Intent Recognition)
Agent 首先会判断:“这是在闲聊,还是在查资料?”
- 闲聊模式:如果用户只是说 “你好”,直接调用大模型回复,不浪费资源。
- RAG 模式:如果涉及知识库内容,则进入下一步。
4.3 任务拆解 (Decomposition)
面对复杂问题,Agent 不会一股脑去搜。它会把问题拆解成多个子问题:
- 子问题 1:A 产品的价格是多少?
- 子问题 2:B 产品的价格是多少?
4.4 假设性回答 (HyDE)
这是最关键的一步!对于每个子问题,Agent 会先 “脑补” 一个 假设性的标准答案。
为什么要这么做?
因为用户的提问可能很短(比如 “价格”),但文档里的答案是很长的句子。用 “生成的答案” 去匹配 “文档里的答案”,相似度会比直接用 “问题” 去匹配高得多!
4.5 混合检索策略 (Hybrid Search)
在召回阶段,我没有单纯依赖一种方式,而是采用了 “广撒网 + 精筛选” 的策略。
- **向量检索 (Dense Retrieval)**:擅长捕捉语义。比如搜“苹果”,它知道你想找的是“水果”还是“手机”,而不仅仅是匹配关键词。我使用了 Embedding 模型将文本和图片映射到同一个高维向量空间,计算余弦相似度。
- **关键词检索 (Sparse Retrieval)**:虽然语义很重要,但有时候精确匹配更关键(比如专有名词、产品型号)。如果用户搜具体的报错代码或型号 ID,向量检索可能会“跑偏”,这时候关键词检索就是最好的补充。
Agent 会同时执行这两路召回,取长补短,初步召回 Top-K 个相关文档片段。
4.6 精准筛选 (Filtering & Rerank)
所有子问题召回回来的文档片段(可能有几十个)会被汇总在一起。Agent 会调用 Cross-Encoder 模型,对它们进行精细打分,把不相关的杂质剔除,只保留最精准的几条。
4.7 最终生成
最后,大模型结合这些经过层层筛选的高质量素材,生成最终的回答,图文并茂地呈现在你面前。
流程图总结:
用户输入 -> 意图识别 -> (如果是 RAG) 子问题拆解 -> HyDE 生成 -> Embedding 召回 -> 精准筛选 (Rerank) -> 最终回答
Agent 思考过程可视化
五、 “上下文”的救赎:重写 PDF 解析器
很多人做 RAG 第一步就挂在了数据清洗上。我也一样,起初我直接用了 langchain 自带的 PDF loader,结果解析出来的东西惨不忍睹:图片全丢了,或者图片堆在文件末尾,完全失去了上下文关联。
5.1 真正的图文混排
我需要的不是“提取图片”,而是“在文字流中保留图片位置”。
经过反复查阅 PyMuPDF (fitz) 的文档,我发现了一个关键参数 sort=True。它可以强制解析器按照人类阅读顺序(从上到下、从左到右)返回内容块(Block)。
我重写了解析逻辑,核心思路就像是在“织布”:
# backend/app/services/parser.py 核心逻辑复盘def _parse_pdf(self, file_path: str) -> List[ParsedChunk]: # ... for page in doc: # 关键点:sort=True 保证了 blocks 是按阅读顺序排列的 blocks = page.get_text("dict", sort=True)["blocks"] for block in blocks: if block["type"] == 0: # 文本块 # 遇到文字,先暂存到 buffer,不急着切片 current_text_buffer += extract_text(block) elif block["type"] == 1: # 图片块 # 遇到图片,说明之前的文字段落结束了 # 1. 先结算(Flush)之前的文字 buffer if current_text_buffer: save_text_chunk(current_text_buffer) current_text_buffer = "" # 2. 插入图片占位符,保持上下文位置! # [图片: images/kb_id/uuid.png] save_image_chunk(block)这几十行代码看似简单,却解决了 RAG 中最头疼的多模态对齐问题。现在的 Agent 在读取数据时,能清晰地知道:“这段文字下面,紧接着就是这张图。”
5.2 “黑图”的诅咒
跑通解析后,向量库里突然多了几千张“垃圾图”。排查发现,PDF 里的分割线、背景色块、甚至页眉的小图标,在底层都是 Image 对象。
为了不让这些噪点污染向量空间,我不得不加了一层“安检”:
# 过滤掉 99% 的无效图片if img_size < 3072: continue # 忽略小于 3KB 的图标if width / height > 20: continue # 忽略分割线做工程就是这样,80% 的时间都在处理这 20% 的脏数据。
六、 最后一公里的精度:Rerank
向量检索(Bi-Encoder)很快,但它对精确匹配往往不够敏感。为了提升 Top-k 的准确率,我在系统中预留了 Cross-Encoder Rerank 的位置。
在 backend/app/services/rerank.py 中,我设计了一个有趣的混合模式:
- 本地模式:加载本地的 BGE-Reranker 模型,推理速度快,数据不出域。
- 云端模式:利用 LLM 的推理能力进行打分。
这种设计保证了系统的灵活性:在显存充足的服务器上跑本地模型,在轻量级部署时切到云端 API。
七、 成果展示与总结
这个项目 multimodal-agent-rag 目前已经实现了:
- 精准的 PDF 图文解析与对齐
- 基于 LangGraph 的动态工作流
- 多模态向量检索(文字+图片)
- 基于豆包多模态 Embedding 的跨模态召回
现在,它不再是一个只会瞎编的“盲人”了。当你问它关于图片的问题时,它能真切地把那张图找出来,摆在你面前。
这大概就是工程师最幸福的时刻吧。
Agent 精准回答问题
召回详情展示
系统整体界面
后端架构设计
完整对话测试结果
致谢
作者:知乎用户Q.
原文:https://zhuanlan.zhihu.com/p/1986887816366548563
欢迎你的加入学习群
关注公众号:「关于NLP那些你不知道的事」,添加小编[yzyykm666],备注**【昵称-学校-想加入的学习群名称】,加入「AIGC面试宝典」群聊**,一起交流讨论,涉及RAG学习群、LLMs九层妖塔、NLP&推荐系统学习群、KBQA学习群、AiGC面试准备群、对话系统学习群、知识图谱学习群 、多模态学习群、文生图学习群、animate动作迁移学习群
《大模型面试宝典》欢迎你的加入
「大模型面试宝典」星球主要是作者的一些学习成果和资料分享。
- 2025年
Stable Diffusion 面经
deepseek r1 面试宝典
deepseek r1 实战帖
ms-swift 学习帖
- 2024年
- 十月 AIGC面经 (准备发稿)
- 八-九月 AiGC 实践教程 —AiGC摩天大楼(争取把所有AiGC任务都刷一遍)
- 七月 大模型推理加速教程
- 六月 Agent实战教程— Agent千机变
- 六月 大模型训练系列
- 五月 RAG实战教程— RAG潘多拉宝盒
- 四月 AiGC实战训练营—非一般程序猿
- 2023年
- NLP实践教程 —NLP菜鸟逆袭
- LLMs实践教程—LLMs九层妖塔
- LLMs面经— LLMs千面郎君
- NLP面经— NLP面无不过
- 推荐系统入门—推荐系统入门
- 推荐系统面经—推荐系统百面百搭
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2025 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》,下方扫码获取~
① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
以上资料如何领取?
为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!
不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。