Zing 论坛

正文

VisionRAG:完全本地运行的多模态RAG系统,让图像也能被语义检索

基于FastAPI和Next.js的本地多模态RAG系统,支持Ollama和PaliGemma视觉模型,通过两阶段检索(向量搜索+CrossEncoder重排序)实现图像语义搜索和自然语言问答。

VisionRAG多模态RAG视觉模型OllamaPaliGemma本地部署ChromaDB
发布时间 2026/05/24 14:50最近活动 2026/05/24 15:28预计阅读 4 分钟
VisionRAG:完全本地运行的多模态RAG系统,让图像也能被语义检索
1

章节 01

导读 / 主楼:VisionRAG:完全本地运行的多模态RAG系统,让图像也能被语义检索

基于FastAPI和Next.js的本地多模态RAG系统,支持Ollama和PaliGemma视觉模型,通过两阶段检索(向量搜索+CrossEncoder重排序)实现图像语义搜索和自然语言问答。

3

章节 03

项目概述:图像的语义检索革命

在RAG(检索增强生成)领域,绝大多数方案专注于文本。但现实世界中的大量信息以图像形式存在——图表、截图、照片、设计稿。如何让这些视觉内容也能被语义检索?

VisionRAG提供了一个优雅的解决方案:一个完全本地运行的多模态RAG系统。它允许你上传图像(PNG/JPG/WEBP),通过视觉模型生成语义描述,存储在本地向量数据库中,然后回答关于这些图像的自然语言问题——答案会引用原始图像并在UI中以内联缩略图形式展示。

4

章节 04

核心特性

  • 图像摄取:上传图像,视觉模型生成描述,描述成为可搜索的语义块
  • 双视觉后端:支持Ollama(完全本地)或PaliGemma(HuggingFace)
  • 两阶段检索:SentenceTransformer向量搜索 + CrossEncoder重排序
  • 内联来源:答案引用源图像,以缩略图形式渲染在UI中
  • 实时进度:摄取任务报告完成状态
  • 零外部依赖:完全在本地机器上运行

5

章节 05

技术栈

层级 技术
后端 FastAPI + Uvicorn (Python 3.11+)
向量存储 ChromaDB(持久化、本地)
嵌入模型 all-MiniLM-L6-v2 (SentenceTransformers)
文本LLM Ollama (llama3.2) via langchain-ollama
视觉模型 Ollama / PaliGemma 2
重排序器 cross-encoder/ms-marco-MiniLM-L-6-v2
前端 Next.js 14 App Router + TypeScript + Tailwind CSS

6

章节 06

数据流

上传图像 (PNG/JPG/WEBP)
    │
    └──► 视觉模型
            └──► 描述 + figure_type + 标题
                    │
                    └──► ChromaDB 存储 (all-MiniLM-L6-v2 嵌入)
                         图像保存到 static/figures/

查询
    │
    ├──► ChromaDB 向量搜索 (top_k × 4 候选)
    ├──► CrossEncoder 重排序 (top_k 最终结果)
    └──► Ollama LLM (基于图像描述生成答案)
            └──► 答案 + 来源 (带内联图像缩略图)
7

章节 07

关键设计决策

两阶段检索策略

  1. 第一阶段 - 向量搜索:使用轻量级SentenceTransformer快速召回4倍于最终需求的候选
  2. 第二阶段 - 重排序:使用CrossEncoder对候选进行精确排序,返回最终结果

这种设计平衡了效率(快速召回)和准确性(精确排序)。

视觉描述生成

视觉模型不仅生成图像的文本描述,还提取:

  • description:详细语义描述
  • figure_type:图像类型(如图表、照片、截图)
  • caption:简短标题

这些元数据共同构成可搜索的语义块。


8

章节 08

本地运行

前置条件

  • Python 3.11+
  • Node.js 18+
  • Ollama已安装并运行
# 拉取Ollama模型
ollama pull llama3.2

# 后端
cd backend
cp .env.example .env
pip install -r requirements.txt
uvicorn app.main:app --reload

# 前端
cd frontend
npm install
npm run dev