Skip to content
🔗 分享本题
查看我的学习进度 →

27 模块 Q7 教学图:你如何设计一个多模态RAG系统(图文检索)?

🧠 图解记忆:多模态 RAG 要统一检索语义,同时保留可定位的原始证据;点击图片可查看原图。

💡 答案要点

多模态RAG架构:

用户上传图片 + 文字问题

┌──────────────────────────────────────────┐
│  多模态 Encoder:                        │
│  - 图片 → CLIP 视觉编码 → 向量          │
│  - 文字 → CLIP 文本编码 → 向量          │
│  - 图+文 → 融合向量                     │
└──────────────────┬─────────────────────┘

┌──────────────────────────────────────────┐
│  跨模态检索:                            │
│  用户图 vs 文档图:相似度匹配            │
│  用户问题 vs 文档图:图文跨模态匹配      │
└──────────────────┬─────────────────────┘

┌──────────────────────────────────────────┐
│  多模态生成:                            │
│  LLaVA 等 VLM 基于图片 + 检索结果生成   │
└──────────────────────────────────────────┘

关键实现代码:

展开 Python 代码示例(33 行)
python
from sentence_transformers import CLIPModel
import torch

class MultimodalRAG:
    def __init__(self):
        self.model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
    
    def encode_image(self, image):
        with torch.no_grad():
            image_features = self.model.get_image_features(image)
        return image_features.numpy()
    
    def encode_text(self, text):
        with torch.no_grad():
            text_features = self.model.get_text_features(text)
        return text_features.numpy()
    
    def crossmodal_search(self, query_image, query_text, doc_images, top_k=5):
        # 编码
        img_emb = self.encode_image(query_image)
        text_emb = self.encode_text(query_text)
        
        # 融合:图片和文字各50%
        fused_query = 0.5 * img_emb + 0.5 * text_emb
        
        # 在文档图片中检索
        similarities = []
        for doc_img in doc_images:
            doc_emb = self.encode_image(doc_img)
            sim = cosine_similarity(fused_query, doc_emb)
            similarities.append(sim)
        
        return sorted(zip(doc_images, similarities), key=lambda x: -x[1])[:top_k]

面试话术:

示例表达(仅在能用本人经历或可复现实验佐证时使用): "多模态RAG的核心是跨模态对齐。我用CLIP做图片和文字的联合编码空间,用户的图片和文字问题都映射到同一个向量空间,直接做相似度匹配。文档端也用CLIP处理产品图片,建立图片向量库。检索时,用户的图+文query和文档图片做跨模态检索,精准找到相关图片。生成阶段用LLaVA读图回答。实测图文混合查询的准确率比纯文字检索提升了35%。"