Multimodal RAG
多模态 RAG 会在检索文本的同时检索图像、视频帧、音频和页面扫描件,然后让视觉语言模型根据检索结果作答。
多模态 RAG 是在包含图像、视频、音频、扫描文档或渲染文档以及文本的知识库上进行检索增强生成 (RAG)。提问后,系统会从任意模态中检索最相关的内容,再由视觉语言模型 (VLM)根据这些内容生成答案。这样一来,系统就能直接检索并读取接线图、产品照片或 PDF 中的图表,而不必只依赖他人事先撰写的文本描述。
非文本数据的索引方式#
最简单的方法是将所有内容转换为文本。图像字幕生成、光学字符识别 (OCR)、语音转文本转录,以及目标检测生成的标签,都会用文字描述各个项目,供普通文本索引搜索。这种方法可以原样复用文本 RAG 流程,但描述未涵盖的信息也会随之丢失。
第二种方法是在同一个共享空间中嵌入图像和文本。使用对比学习训练的模型,例如 OpenAI 的 CLIP和 Google 的 SigLIP,会将照片及其描述句映射到彼此接近的嵌入,因此文本问题可以直接从向量数据库检索图像。对于文档,ColPali(2024)会将每页截图嵌入为由图像块向量组成的网格,并通过类似 ColBERT的后期交互方式,根据问题中的 Token 为其评分;对于充满表格和图表的 PDF,这种方法无需 OCR 和布局解析。
接下来,系统会将检索到的内容(通常包含图像和文本段落)与问题一起传递给 VLM。基于检索图像进行依据校准可以减少模型对训练期间从未见过的视觉细节产生幻觉,例如某家公司控制面板的布局。
共享嵌入空间中的检索#
此示例使用 CLIP ViT-B/32 检查点,从包含两张图像的知识库中选出回答每个问题的图像:
import requests
from PIL import Image
from transformers import CLIPModel, CLIPProcessor
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Image knowledge base: CLIP embeds images and text into one shared vector space
urls = ["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]
images = [Image.open(requests.get(url, stream=True, timeout=10).raw) for url in urls]
questions = ["What color is the man's tie?", "How many people are standing next to the bus?"]
# Retrieve: score each question against every image and keep the best match for the VLM
inputs = processor(text=questions, images=images, return_tensors="pt", padding=True)
scores = model(**inputs).logits_per_text
for question, row in zip(questions, scores):
print(f"{question} -> {urls[row.argmax()].split('/')[-1]}")询问领带的问题会检索到 zidane.jpg,询问巴士的问题则会检索到 bus.jpg,因为 CLIP 会将每个问题的文本嵌入与其描述的照片匹配得最近。Ultralytics LLM 接口负责后续的生成步骤:llm(question, image=...) 会在一次调用中将问题和检索到的图像发送给任何兼容 OpenAI 的视觉语言模型,并返回服务提供方的响应。
多模态 RAG 与相关术语的比较#
- 视觉问答 (VQA):回答用户提供的图像相关问题。多模态 RAG 则会先从成千上万张图像、页面或视频片段中找到要查看的内容。
- 多模态模型:这类生成模型(例如 OpenAI 的 GPT 或 Google 的 Gemini 模型)可以同时读取图像和文本。多模态 RAG 是决定这些模型能看到什么内容的检索系统。
- 语义搜索:单独使用检索环节,将排序后的结果返回给人,而不是返回给模型。
实际应用#
- 制造业维护:技术人员拍下故障部件的照片,系统会检索包含对应爆炸图的手册页面,以及同一组件以往维修时拍摄的照片。
- 零售搜索与支持:购物者上传的照片可以检索视觉上相似的商品目录项目,助手则根据产品资料回答适配性或兼容性问题。
- 文档问答:年度报告、科学论文和幻灯片中的关键数字常以图表形式呈现,而通过页面图像检索即可找到这些内容,无需单独使用表格解析器。
- 视频理解:通过嵌入对采样帧或短片段建立索引后,诸如“送货车什么时候到的?”这样的问题就能检索到相应的几分钟视频,让 VLM 读取少量帧,而不是数小时的视频。
设计权衡#
图像会大量占用上下文:VLM 会将每张图像转换为数百或数千个 Token,因此处理流程通常只传递排名靠前的少数几张检索图像,并用较短的文本段落补充上下文。共享嵌入检索器也会受到训练方式的限制。CLIP 的文本编码器最多读取 77 个 Token,因此较长的问题会在匹配前被截断;整张图像的嵌入比起标签上的序列号等小细节,更擅长捕捉整体场景内容。只要 OCR 能识别细节,文本转换就能让这些细节保持可搜索状态,因此许多系统会同时为 OCR 文本和图像嵌入建立索引,并通过混合搜索合并两份结果列表。










