多模态 RAG 与跨模态检索 本节摘要:视觉原生文档 RAG 只是一片。生产级多模态 RAG 走得更宽——跨文本、图像、音频、视频检索,服务于行程规划(「给我找家安静、纯素、自然光的早午餐」)、医学分诊(「什么伤匹配这张照片 + 这些笔记」)、电商(「与这张自拍相似的穿搭,我的尺码」)、现场服务(「诊断这个引擎声 + 零件照片」)。2025 年的三篇综述——Abootorabi 等人、Mei 等人、Zhao 等人——把子问题形式化:跨模态检索、检索融合、生成落地、多模态评估。本节读这些综述并设计生产流水线。 学习目标 阅读完本节,你应当能够: 设计跨模态检索:文本 → 图像、图像 → 文本、音频 → 视频等。 对比三种融合策略:分数融合、注意力融合、MoE 融合。
本节摘要:视觉原生文档 RAG 只是一片。生产级多模态 RAG 走得更宽——跨文本、图像、音频、视频检索,服务于行程规划(「给我找家安静、纯素、自然光的早午餐」)、医学分诊(「什么伤匹配这张照片 + 这些笔记」)、电商(「与这张自拍相似的穿搭,我的尺码」)、现场服务(「诊断这个引擎声 + 零件照片」)。2025 年的三篇综述——Abootorabi 等人、Mei 等人、Zhao 等人——把子问题形式化:跨模态检索、检索融合、生成落地、多模态评估。本节读这些综述并设计生产流水线。
阅读完本节,你应当能够:
单模态 RAG 是已解决的模式:嵌查询、嵌块、检索、塞进 LLM。多模态 RAG 需要:
2025 年的综述都收敛到同一套分类法。
给定模态 A 的查询,检索模态 B 的文档。三种模式:
选择:文本+图用 CLIP/SigLIP 2;文本+音频用 CLAP;前沿质量的跨模态用 VLM 隐藏状态。
你检索到 10 条结果:5 张图、3 段文本、2 段音频。怎么合并?
生产默认:分数融合,对查询的主导模态略偏置;若 A/B 显示 MoE 在你的域上明显胜出,再升级。
LLM 应引用哪条检索项驱动了每个声明。多模态时:
[1]。[img 3] 配简短 caption。[audio 2 at 0:34]。用落地感知数据训练生成器:训练目标里每个声明都标注来源索引。推理时模型自然发出引用。
读完三篇就掌握了 2025 年春的技术状态,大部分子问题仍开放。
MuRAG(Chen 等人,2022)是第一个多模态 RAG,从多模态知识库检索图像+文本、生成答案,在 VLM 浪潮前证明了可行性。现代系统(REACT、VisRAG、M3DocRAG)建立在它之上。
查询:「给我找家安静、纯素、自然光的早午餐。」
流水线:
这远超文本 RAG,每模态都加上文本单独遗漏的信号。
💡 跨模态融合的本质:不同模态捕获不同信号——文本说「安静」,音频证实分贝,图像确认光线。融合不是简单平均,而是让每模态在自己擅长的维度投票,这正是多模态 RAG 胜过单模态的根源。
多跳:若首次检索没返回高置信答案,LLM 重写再检索。第 14 章的 agent RAG 模式在此适用。例:
增加复杂度,但能处理单跳检索搞不定的查询。
跨模态评估仍不成熟,常见代理:
没有跨全模态的标准基准,大多数论文在域专属任务上评估。
code/main.py:
def cross_modal_retrieve(query, k=10): # 文本/图像/音频各自检索, 共享或翻译空间 text_hits = text_retriever(query.text) # CLIP/SigLIP image_hits = image_retriever(query.image or query.text) audio_hits = audio_retriever(query.audio or query.text) # CLAP return {"text": text_hits, "image": image_hits, "audio": audio_hits}
def fuse_scores(retrieval, weights=None): # 模态内归一化后加权求和 weights = weights or {"text": 0.4, "image": 0.4, "audio": 0.2} scores = {} for modality, hits in retrieval.items(): normed = minmax_normalize([h.score for h in hits]) for h, s in zip(hits, normed): scores[h.doc_id] = scores.get(h.doc_id, 0) + weights[modality] * s return sorted(scores.items(), key=lambda x: -x[1])
def grounded_generate(query, top_k_docs, vlm): # 每条证据带模态标签与索引 evidence = format_with_citations(top_k_docs) # [1] 文本评论, [img 2] 餐厅照片, [audio 3] 环境声 0:34 answer = vlm.answer(query, evidence) return answer # 每个声明自然带引用, 跨模态可追溯
💡 分数融合的失败模式:它对各模态一视同仁,但视觉问题本应给图更高权重——这正是 MoE 融合(门控按查询类型路由到模态专家)胜出之处,代价是需要训练门控网络。
工程取舍:文本+图用 CLIP/SigLIP;文本+音频用 CLAP;前沿跨模态用 VLM 隐藏状态;融合默认分数,域内 A/B 胜出升级 MoE;多跳用 agent 模式。
本节产出 outputs/skill-multimodal-rag-designer.md。给定带多模态查询流的产品规格,它设计检索器、融合、生成器与评估。
医学分诊:提出一个医学分诊多模态 RAG:查询 = 伤处照片 + 文字症状。哪些模态从哪些 KB 检索?
分数融合失败:分数融合是简单加权和。它有什么 MoE 融合能避免的失败模式?
读分类法:读 Abootorabi 等人的分类法(第 3 节),三个经典子问题是什么,如何映射到你选的产品?
评估规格:为行程规划多模态 RAG 设计评估规格。哪些指标覆盖图像召回、音频召回、组合正确性?
多跳延迟:agent 多跳 RAG 每轮有延迟税。在什么查询难度下,精度增益才配得上延迟?
[1]、图像 [img 3]、音频 [audio 2 at 0:34],跨模态可追溯。下一节,我们将进入毕业项目——多模态 Agent 与 Computer-Use,把本章所有概念综合成一个能看屏幕、点击鼠标、填表单、完成真实任务的 agent,这是 Phase 12 的收官与通向第 14 章 agent 体系的桥梁。