🧠 图解记忆:多模态 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%。"
