公司动态

QMedia 多模态 RAG 检索管线源码解析:MultiModalVectorStoreIndex 如何融合文本与图像向量

📅 2026/8/22 15:37:11
QMedia 多模态 RAG 检索管线源码解析:MultiModalVectorStoreIndex 如何融合文本与图像向量
QMedia 多模态 RAG 检索管线源码解析MultiModalVectorStoreIndex 如何融合文本与图像向量【免费下载链接】QmediaAn open-source AI content search engine designed specifically for content creators. Supports extraction of text, images, and short videos. Allows full local deployment (web app, RAG server, LLM server). Supports multi-modal RAG content QA.项目地址: https://gitcode.com/gh_mirrors/qm/QmediaQMedia 是一款专为内容创作者设计的开源 AI 内容搜索引擎支持图文/短视频内容提取、全本地化部署并基于多模态 RAG 实现内容搜索问答。本文带你完整走读它的检索管线从素材入库、多模态 Reader 信息提取到 MultiModalVectorStoreIndex 如何同时融合文本与图像向量最终让一句问题同时搜到文案和图片。适合想看懂 LlamaIndex 多模态检索实现的开发者。 一张图看懂 QMedia 多模态 RAG 架构QMedia 由三组可分离部署的服务组成mm_server多模态模型服务OCR、CLIP 编码、BGE 文本编码、Whisper 语音转录mmrag_serverRAG 检索问答服务检索管线就在这里qmedia_web内容卡片展示前端整个管线入口是 mmrag_server/services/nodes.py 中的build_index()函数。 第一步把图文/短视频拆成多模态文档每一条内容NoteData由三部分构成图片image_data、视频video_data、文案info_data。管线会为每部分内容调用不同的 ReaderReader职责产出ImageReader登记图片素材ImageDocument留给 CLIP 编码ImageOcrReader调 mm_server 的 OCR 模型提取图中文字按字号分档排序文本 DocumentNoteInfoReader把标题、描述、标签拼成结构化文本文本 DocumentAudioTranscriptionReaderfaster-whisper 转录视频语音 LLM 生成总结文本 Document关键细节所有 Document 都在 metadata 里带上note_id这样检索命中后能回溯到原始内容卡片前端才能展示答案来自哪篇笔记。Reader 源码集中在 mmrag_server/services/readers/其中 OCR 的字号分档逻辑见 image_ocr.py。 第二步MultiModalVectorStoreIndex 如何融合文本与图像向量文本先经SentenceSplitter切分成节点然后由build_store_index()创建索引nodes.pyMultiModalVectorStoreIndex(nodes, image_embed_modelCLIP, embed_modelBGE)融合机制有 4 个关键点文本节点走 BGE 嵌入模型bge-small-en-v1.5擅长语义级文本匹配图像节点走 CLIPViT-B/32把图片编码进向量空间CLIP 的文本嵌入与图像嵌入处于同一向量空间——同一个查询文本可以转成 CLIP 文本向量去比对图像这就是连接文本与图像的桥梁实现真正的跨模态检索检索时查询双路并行文本路取 top 3similarity_top_k图像路取 top 4image_similarity_top_k两路结果合并交给 LLM 生成答案。两个编码模型都不在 RAG 服务里本地加载而是通过 HTTP 调用 mm_serverBGE 文本编码走/api/embeddingsCLIP 图像/文本编码走/api/clip-image-embeddings与/api/clip-text-embeddings封装在 mmrag_server/services/llm/remote_embedding.py 的RemoteClipEmbedding类中——模型与检索应用解耦方便随时换模型。 第三步索引三级缓存重启秒级加载build_index(modeauto)会按磁盘状态自动选择构建方式这是很实用的工程细节raw首次启动从原始素材完整走提取 → 切分 → 编码全流程docs_from_persist文档已存储跳过模型提取只重新切分编码nodes_from_persist向量已存储直接加载索引秒级重启持久化由 mmrag_server/services/storage.py 完成persist_index()把向量索引序列化到db/目录persist_documents()把文档存储为docstore.json索引 ID 与路径等配置都在 mmrag_server/config.py.local。 第四步检索与问答——从向量到答案mmrag_server/services/retriever/mm_retriver.py 的build_mm_rag_pipeline()把索引转成 retriever再组装RetrieverQueryEngine用户提问 → 文本嵌入 CLIP 文本嵌入双路检索命中的文本节点 图像节点按 QA 模板拼进 PromptLLM默认 llama3基于上下文生成回答前端根据note_id展示来源内容卡片如果想让模型看着图回答还可以切换build_mm_query()用 llava-llama3 视觉理解大模型做多模态问答。️ 源码阅读路线10 分钟上手这份多模态检索管线你想了解的环节去哪里看管线入口、索引构建与三级缓存mmrag_server/services/nodes.py图文/视频信息提取 Readermmrag_server/services/readers/向量索引与文档持久化mmrag_server/services/storage.py检索器与问答引擎组装mmrag_server/services/retriever/mm_retriver.pyCLIP / BGE 远程编码封装mmrag_server/services/llm/remote_embedding.py模型服务OCR、CLIP、Whispermm_server/一句话总结BGE 负责读懂文字CLIP 负责让文字和图片说同一种向量语言MultiModalVectorStoreIndex 把两路向量收进同一个索引——这正是 QMedia 多模态 RAG 能让一句话同时搜到图文与短视频素材的核心秘密。【免费下载链接】QmediaAn open-source AI content search engine designed specifically for content creators. Supports extraction of text, images, and short videos. Allows full local deployment (web app, RAG server, LLM server). Supports multi-modal RAG content QA.项目地址: https://gitcode.com/gh_mirrors/qm/Qmedia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考