Skip to content

多模态 RAG 检索增强生成

多模态 RAG 将检索增强生成从纯文本扩展到图像、表格、文档等多模态知识源,使 LLM 能够利用视觉信息回答问题,是构建企业级知识问答系统的关键技术。

多模态RAG架构

架构设计

多模态 RAG 系统的核心组件:

  1. 多模态文档解析:将 PDF/图片/表格等解析为结构化内容
  2. 多模态嵌入:将文本和图像编码到共享语义空间
  3. 混合检索:结合向量检索和关键词检索
  4. 多模态重排序:对检索结果进行相关性重排
  5. 多模态生成:将检索到的文本和图像输入 VLM 生成回答
python
from langchain.vectorstores import FAISS
from langchain.embeddings import CLIPEmbeddings

class MultimodalRAG:
    """多模态 RAG 系统"""
    def __init__(self, clip_model, vlm, vector_store):
        self.clip = clip_model
        self.vlm = vlm
        self.vector_store = vector_store

    def index_document(self, document):
        """索引多模态文档"""
        # 解析文档为文本块和图像
        text_chunks = self.parse_text(document)
        images = self.extract_images(document)

        # 生成多模态嵌入
        for chunk in text_chunks:
            embed = self.clip.encode_text(chunk)
            self.vector_store.add(embed, metadata={"type": "text", "content": chunk})

        for img in images:
            embed = self.clip.encode_image(img)
            self.vector_store.add(embed, metadata={"type": "image", "content": img})

    def query(self, question, top_k=5):
        """多模态检索与生成"""
        # 编码查询
        query_embed = self.clip.encode_text(question)

        # 检索相关内容
        results = self.vector_store.similarity_search(query_embed, k=top_k)

        # 构建多模态上下文
        context_text = [r for r in results if r["type"] == "text"]
        context_images = [r for r in results if r["type"] == "image"]

        # VLM 生成回答
        answer = self.vlm.generate(question, context_text, context_images)
        return answer

文档解析策略

多模态 RAG 的文档解析是关键环节:

PDF 解析方案

方案文本表格图像布局
PyMuPDF
Unstructured
Marker
Docling

多模态 RAG 的三种范式

  1. 文本嵌入检索 + 文本生成:将图像描述为文本,使用文本 RAG
  2. 多模态嵌入检索 + 文本生成:用 CLIP 等多模态嵌入检索,但仅用文本生成
  3. 多模态嵌入检索 + 多模态生成:检索和生成均使用多模态模型

范式选择建议

  • 纯文本文档 → 传统文本 RAG
  • 含图表的文档 → 范式 2(多模态检索 + 文本生成)
  • 需要视觉理解的问题 → 范式 3(全多模态)

混合检索策略

单一向量检索可能遗漏关键词精确匹配的内容,混合检索结合两者优势:

  • 向量检索:语义相似度,擅长模糊匹配
  • BM25 检索:关键词匹配,擅长精确查找
  • 互易排名融合(RRF):合并两种检索的排名结果

挑战与优化

  • 模态对齐:文本和图像的语义空间对齐质量影响检索精度
  • 长文档处理:长 PDF 需要合理的分块策略
  • 表格理解:表格的语义表示比纯文本更复杂
  • 检索延迟:大规模知识库的检索延迟优化

相关资源

最近更新