
QMedia 三大服务架构深度剖析mm_server、mmrag_server、qmedia_web 如何协作实现多模态搜索【免费下载链接】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 检索与智能问答能力支持完全本地化部署可针对私有数据离线检索。它由 mm_server多模态模型服务、mmrag_serverRAG 搜索问答服务、qmedia_webWeb 前端三大服务组成本文带你一次性看懂它们的分工、协作链路与部署方式。一、三大服务分工全景一张表看懂 QMedia 架构很多多模态搜索项目把模型、检索、界面写死在同一个进程里换模型、换界面都要大动干戈。QMedia 的思路是把模型能力和应用逻辑彻底拆开各司其职服务核心职责技术栈默认端口mm_server多模态模型部署与调用OCR、视频转录、图像/文本向量编码、LLM 代理Python / FastAPI50110mmrag_server内容卡片查询、图文短视频信息提取与存储、多模态 RAG 检索问答Python / FastAPI / LlamaIndex50111qmedia_web内容卡片式 Web 界面发起搜索与问答请求TypeScript / Next.js / TailwindCSS / shadcn-ui50112这种拆分带来一个关键好处三个服务可以任意组合、单独部署。想换向量模型只动mm_server想嵌入自己的业务系统直接调mmrag_server的 API 即可前端完全不用改。二、mm_server多模态模型服务的中枢大脑 mm_server是整套系统的模型底座对外暴露一组 REST API入口见mm_server/main.py覆盖内容创作者最需要的四类能力️图片 OCR 识别提取图文卡片里的文案内容接口定义在mm_server/api/image_service.py视频文案转录基于 Faster Whisper 快速提取短视频口播文案CPU 即可运行接口定义在mm_server/api/video_service.py向量编码CLIP 负责图片→特征向量BGE 负责文本→特征向量统一在mm_server/api/embed_service.py中提供LLM 代理对接本地 Ollama 的 Llama3 系列模型8B 轻量版或 70B 高配版值得一提的是模型生命周期管理mm_server/api/cached_service.py支持对 CLIP、OCR、Whisper 等模型配置自动释放空闲超时后卸载再访问时自动加载大幅降低显存与内存压力。本地 Ollama 模型同样支持keep_alive参数控制常驻或卸载。三、mmrag_server多模态 RAG 检索与内容问答引擎 mmrag_server是大脑与素材之间的调度层基于 LlamaIndex 构建多模态 RAG 流水线核心工作分三步1. 启动即建库从素材到结构化节点服务启动时mmrag_server/main.py中的on_startup钩子会自动读取素材数据assets/medias图片/视频素材文件assets/mm_pseudo_data.json内容卡片结构化数据随后通过 HTTP 调用mm_server的能力对每个素材做深度拆解——图片做 OCR 与 CLIP 编码、短视频用mmrag_server/services/readers/video.py提取音频并转录、再结合 LLM 生成视频总结——最终结构化为 RAG 节点node写入本地db存储。检索问答全部基于这份结构化数据因此完全离线、数据不出本机。2. 检索多模态向量召回核心接口在mmrag_server/api/mm_rag_search.py/mm-rag-search接收用户 query先用文本向量 图像向量双路召回 Top-K 节点再去重、映射回完整的内容卡片数据返回。召回管道构建逻辑位于mmrag_server/services/retriever/mm_retriver.py向量编码通过mmrag_server/services/llm/remote_embedding.py远程调用mm_server完成。3. 问答LLM 基于召回内容生成回答/mm-rag-query接口把上一步召回的节点交给 LLM 合成答案返回高质量回答及内容来源拆解真正做到回答有据可依、来源清晰可溯。四、qmedia_web内容卡片式多模态搜索前端 ️qmedia_web借鉴了小红书 Web 版的交互体验用卡片流的方式展示图文与短视频内容技术栈TypeScript Next.js TailwindCSS shadcn/ui代码组织在qmedia_web/app/页面、qmedia_web/components/组件、qmedia_web/lib/工具库通信方式通过环境变量SERVICE_ENDPOINT指向mmrag_server默认 50111 端口用户的所有搜索、问答请求都由前端转发给 RAG 服务媒体资源图片/视频由mmrag_server挂载的/medias静态目录统一托管前端无需关心文件存储细节替换自己的内容非常简单把assets/medias换成你自己的图片/视频替换assets/mm_pseudo_data.json卡片数据删除旧的db文件重启即可模型会自动重新提取入库。五、一次多模态搜索请求的完整协作链路 以搜一下最近适合露营的短视频为例三大服务的协作过程是qmedia_web接收用户输入将 query 请求发往mmrag_server50111mmrag_server调用mm_server的文本向量接口把 query 编码为特征向量mm_server返回向量后RAG 服务在db中做多模态相似度召回并去重排序mmrag_server把召回节点交给 LLM 合成回答同时映射出对应的内容卡片qmedia_web渲染回答 卡片流用户可点击卡片查看原文与视频整条链路中模型只在mm_server里跑一次检索与生成逻辑全部收敛在mmrag_server前端零模型依赖——这就是三大服务拆分的核心价值。六、三种部署方式Docker 一键组合与独立部署 项目根目录的docker-compose.yml已定义好三个容器的依赖关系与端口映射克隆仓库后一条命令即可启动全套git clone https://gitcode.com/gh_mirrors/qm/Qmedia cd Qmedia docker compose up -d除了三件套组合部署还有两种灵活的独立用法独立模型服务只启动mm_serverpython main.py端口 50110即可作为通用的图片编码、文本编码、视频转录、图片 OCR 的 API 服务嵌入任意业务系统纯 Python RAG 服务mm_servermmrag_server组合通过 API 完成内容提取与多模态 RAG 检索问答无需前端七、总结QMedia 多模态搜索适合谁内容创作者管理自己的图文/短视频素材库用自然语言问内容快速找灵感、拆爆款AI 应用开发者需要一个可嵌入的、带模型能力的内容提取与多模态 RAG 检索 API注重数据隐私的团队全栈本地部署素材数据不出内网模型可自由替换CLIP、BGE、Whisper、Llama3 均可配置一句话概括mm_server 管模型、mmrag_server 管检索与生成、qmedia_web 管体验三者通过 HTTP API 解耦协作共同构成了一个可拆可合、完全本地化的多模态 AI 内容搜索解决方案。【免费下载链接】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),仅供参考