VRAG深度解析:用强化学习重新定义多模态RAG,从原理到实战全攻略

快速摘要
VRAG 是通义实验室开源的多模态检索增强生成框架,首次将强化学习(RL)系统性地引入视觉 RAG 智能体训练,在多项基准测试中实现了 20%~30% 的性能飞跃。 它包含三个核心组件——VRAG-RL(强化学习训练框架)、VRAG(渐进式视觉感知智能体)和 VimRAG(基于记忆图的跨模态推理框架),分别解决了"怎么训"、"怎么看"和"怎么记"三大核心问题。 如果你正在构建涉及图片、PDF、视频等视觉信息的知识库或问答系统,这篇文章会从底层原理到动手部署全面拆解 VRAG 的技术细节,往下看有更详细的分析。

为什么传统 RAG 在视觉场景下"水土不服"

提到 RAG(Retrieval-Augmented Generation,检索增强生成),很多从业者的第一反应是:把外部知识检索出来,塞给大模型,让它结合上下文来回答问题。这套流程在纯文本场景下已经非常成熟,无论是企业知识库问答还是学术文献检索,都能取得不错的效果。

但现实世界的信息远不止文字这一种形态。打开一份技术白皮书,里面有大量的架构图和流程图;翻开一份财报,各种柱状图、饼图、表格密密麻麻;刷一段教学视频,关键信息藏在某一帧画面里。传统的文本 RAG 面对这些内容基本是"睁眼瞎"——它要么把图片 OCR 成文字后丢失大量视觉语义,要么干脆跳过图片只看文字,结果自然大打折扣。

目前业内主流的多模态 RAG 方案大多采用"固定流水线"架构:先用一个固定的检索器找出相关图片或文档页面,再把这些内容一股脑塞给多模态大模型去回答。这种做法存在几个根本性的问题。

第一个问题是流程僵化。人类在阅读复杂图表时,会根据问题动态调整注意力——先大致扫一眼全局,找到可能相关的区域,然后放大细看。但固定流水线没有这种灵活性,检索什么、怎么看、看多细,都是预先写死的。

第二个问题是视觉推理不足。现有方案在把图片喂给模型时,通常是把整张图片的所有视觉 Token 都塞进上下文。视觉数据的特点是信息密度低但 Token 数量巨大——一张高分辨率图片动辄几千个 Token,其中真正和问题相关的信息可能只占很小的一部分。这不仅浪费了宝贵的上下文窗口,还会引入大量噪声,干扰模型的推理。

第三个问题是状态盲区。在多轮检索推理的场景下,传统方案通常把所有历史交互记录线性拼接在一起。随着推理步数增加,上下文越来越长,模型很容易忘记自己之前检索过什么、推理到哪一步了,导致重复检索或者逻辑链条断裂。

VRAG 项目正是瞄准这些痛点,提出了一整套系统性的解决方案。


VRAG 项目全景:三大核心组件各司其职

VRAG 项目的 GitHub 仓库地址是 https://github.com/Alibaba-NLP/VRAG,整个项目由三个紧密协作的组件构成,分别对应不同的技术论文和功能定位。

VRAG——渐进式视觉感知智能体

VRAG 是整个项目中最核心的"感知引擎"。它的核心思想可以用一句话概括:让 AI 像人类一样,从粗到细地观察和理解视觉信息。

具体来说,当用户提出一个涉及视觉信息的问题时,VRAG 不会一次性把整张图片丢给模型。它会先让模型整体浏览图片,形成一个粗粒度的理解;然后根据问题,自主决定哪些区域需要进一步观察;接着通过裁剪和缩放等操作,把关键区域放大,获取更精细的信息。这个过程可以迭代多次,直到模型认为自己已经收集到足够的信息来回答问题。

这里的关键创新在于 VRAG 定义了一套视觉感知动作空间(Visual Perception Action Space),其中包括区域选择(Region Selection)、图像裁剪(Cropping)、局部缩放(Zooming)等多种操作。模型可以自主地在这些动作中进行选择和组合,就像一个有经验的分析师拿着放大镜在文档上反复查看一样。

VRAG-RL——强化学习训练框架

有了上面的感知能力设计,下一个问题是:怎么训练模型学会使用这些视觉感知动作?

这就是 VRAG-RL 要解决的问题。它是一个专门为多模态智能体设计的强化学习训练框架,采用了群组相对策略优化(GRPO)算法。GRPO 是 DeepSeek 团队最早提出的一种高效强化学习算法,其核心思路是:对同一个问题,让模型生成多个候选回答,然后在这一组回答内部进行相对比较——表现好的回答被强化,表现差的被抑制。相比传统的 PPO 算法需要维护一个庞大的价值网络,GRPO 完全摒弃了价值网络,通过组内归一化来估计优势函数,大幅降低了显存占用和计算开销。

在 VRAG-RL 的训练过程中,模型需要与一个本地部署的搜索引擎进行多轮交互。每一轮交互中,模型需要自主决定:是继续搜索新的信息,还是对已有的图片进行裁剪缩放以获取更多细节,亦或是已经掌握足够信息可以直接回答问题。强化学习的奖励信号来自多个方面,包括最终答案的正确性、查询重写的质量、以及检索结果的相关性。

我之前在黑龙江节点云计算科技公司考人工智能训练师的时候,深刻体会到强化学习在智能体训练中的重要性——它能让模型在与环境的反复交互中不断优化自己的决策策略,这种"做中学"的范式和人类的学习过程有很多相似之处。VRAG-RL 把这种范式成功应用到了多模态 RAG 场景中,让模型在检索和推理的循环中越来越"聪明"。

VimRAG——基于记忆图的跨模态推理框架

VimRAG 是整个项目中最新也是最前沿的组件,其对应的论文发表于 2026 年 2 月。它要解决的是前面提到的"状态盲区"问题——在复杂的多步推理任务中,如何让模型有效地管理和利用已经检索到的信息。

VimRAG 提出了两个核心概念:多模态记忆图(Multimodal Memory Graph)和图引导策略优化(Graph-Guided Policy Optimization,简称 GGPO)


深入原理:多模态记忆图是怎么工作的

传统的 ReAct(Reasoning + Acting)范式下,智能体的交互历史被组织成一个线性序列:思考→动作→观察→思考→动作→观察……随着推理步数增加,这个序列会变得越来越长。对于视觉数据来说,这个问题尤其严重,因为每一步检索到的图片都会带来大量的视觉 Token。

VimRAG 把这种线性的交互历史升级为一个动态有向无环图(DAG)。在这个图中,每个节点代表推理过程中的一个步骤,存储了该步骤的子查询(Sub-query)、推理摘要(Summary)以及经过压缩的多模态观测数据(Episodic Visual Memory)。节点之间的有向边表示推理步骤之间的逻辑依赖关系。

举个具体的例子来理解这个设计。假设用户问:"2023 年全球新能源汽车销量前三的国家分别是哪些?它们各自的市场份额如何?"

在线性推理模式下,智能体可能会这样做:先搜索"2023 全球新能源汽车销量",看到一张柱状图但没完全看清数据,于是再搜索一遍类似的内容——这就是重复检索。而在 VimRAG 的记忆图模式下,第一次检索的结果会被记录为一个节点,即使这次检索没有完全回答问题,图中也清楚地标记了"已经获取到部分信息"。后续的推理步骤可以沿着不同的分支展开——比如一个分支去查各国具体销量,另一个分支去查市场份额计算方式——而不会重复之前的查询路径。

图调制的视觉记忆编码

在记忆图中管理视觉数据还有一个关键挑战:视觉 Token 的预算分配。VimRAG 提出了图调制的视觉记忆编码(Graph-Modulated Visual Memory Encoding)机制来解决这个问题。

这个机制的核心思路是:不是所有检索到的图片都同等重要。节点在记忆图中的拓扑位置(是否位于关键推理路径上)、时间因素(最近检索到的信息通常更相关)以及语义相关性(与当前子问题的匹配程度),三者共同决定了每个节点中视觉数据应该获得多少 Token 预算。

具体来说,VimRAG 使用一个能量函数来综合评估这三个维度。对于处在关键推理路径上、最近刚检索到、且与当前问题高度相关的图片,系统会分配更多的 Token 预算,保留高分辨率的视觉信息;反之,那些在推理图中处于边缘位置、时间较久远、或者语义不太相关的图片,则会被大幅压缩甚至丢弃。

论文中的先导实验数据很能说明问题:使用这种"语义相关的视觉记忆"策略,在图像任务上仅用 2.7K 个 Token 就达到了 58.2% 的准确率,而直接存储原始视觉 Token 需要 15.8K 个 Token 却只达到了 45.6% 的准确率。少花了 83% 的 Token 预算,效果反而提升了近 13 个百分点。

GGPO:精准的信用分配

传统的强化学习在训练 RAG 智能体时有一个根本性的缺陷:它通常采用结果级别的奖励——如果最终答案对了,整个推理轨迹中的所有步骤都会被正向强化;如果答案错了,所有步骤都会被惩罚。但现实是,一次成功的推理中可能包含一些冗余的检索步骤(比如重复搜索),而一次失败的推理中也可能包含一些有价值的检索操作(比如找到了关键证据但推理环节出了错)。

GGPO 正是要解决这种"信用分配不精确"的问题。它利用记忆图的结构来区分每一步操作的实际贡献:通过剪枝记忆图中与冗余动作关联的节点,GGPO 可以在步骤级别上进行更精细的奖励分配。那些确实检索到了关键证据的步骤会被正向强化,而那些只是做了无用功的步骤则不会获得不当的奖励。

论文中的消融实验表明,相比没有剪枝机制的基线方法 GSPO,GGPO 在训练过程中表现出更好的稳定性和鲁棒性,模型更快地收敛到更优的策略。


GRPO 算法原理拆解

由于 VRAG-RL 采用了 GRPO 算法作为训练基础,理解 GRPO 的工作原理对于深入理解整个框架至关重要。

在传统的 PPO(近端策略优化)算法中,需要维护一个与策略模型规模相当的"价值网络"来估计每个状态的期望回报。对于参数量动辄数十亿的大语言模型来说,这意味着训练时的显存需求几乎翻倍,这在实际操作中是一个巨大的瓶颈。

GRPO 的解决思路非常巧妙。它的核心流程可以概括为四个步骤:

第一步,组采样(Group Sampling)。对于同一个输入问题,让当前策略模型生成多个候选回答(通常是一组,比如 8 个或 16 个)。

第二步,奖励评估(Reward Evaluation)。使用预定义的奖励函数对每个候选回答进行评分。在 VRAG-RL 中,奖励函数综合考虑了答案正确性、查询重写质量和检索相关性。

第三步,组内归一化(Group Normalization)。在这一组回答内部,对奖励值进行归一化——减去组内均值,除以组内标准差。归一化后的值就是每个回答的"优势":正值表示该回答优于组内平均水平,负值则表示低于平均水平。

第四步,策略更新(Policy Update)。用归一化后的优势值作为梯度系数来更新模型参数——强化那些高于平均水平的回答策略,抑制那些低于平均水平的回答策略。同时通过 KL 散度约束防止策略更新幅度过大。

通过这种"组内比较"的方式,GRPO 完全不需要单独的价值网络,就能有效地估计出每个回答的优势函数。这使得显存需求大幅降低,训练效率显著提升。


性能表现与基准测试

根据论文披露的实验数据,VRAG 框架在多项基准测试中取得了显著的性能提升。

在 VRAG-RL 的实验中,基于 Qwen2.5-VL-7B 模型的版本相比现有方法整体提升了约 20%,而基于更小的 Qwen2.5-VL-3B 模型的版本提升幅度更大,达到了约 30%。这意味着即使使用参数量更小的基础模型,通过 VRAG-RL 的强化学习训练,也能获得非常显著的效果提升。

VimRAG 的实验结果同样令人印象深刻。在包括 SlideVQA、MMLongBench、LVBench 等在内的九个跨模态基准测试中,VimRAG 在约 20 万条混合文本、图片和视频的统一语料库上,以 Qwen3-VL-8B-Instruct 为基座模型取得了 50.1 的综合得分,超越了此前最优方案 Mem1 的 43.6 分。而且,VimRAG 在提升精度的同时还减少了总推理轨迹长度,这意味着它不仅更准确,推理效率也更高。


从零开始动手部署:保姆级教程

讲完了原理,接下来进入实操环节。VRAG 项目提供了非常友好的部署方式,即使没有本地 GPU 也能快速体验。

环境准备

首先,创建一个 Python 3.10 的 Conda 环境并安装依赖:

# 创建虚拟环境
conda create -n vrag python=3.10
conda activate vrag

# 克隆项目仓库
git clone https://github.com/Alibaba-NLP/VRAG.git
cd VRAG

# 安装依赖
pip install -r requirements.txt

方式一:一键启动 Demo(推荐新手)

项目提供了一个 run_demo.sh 脚本,支持三种启动模式,根据自己的硬件条件选择即可。

VimRAG 模式(推荐,无需本地 GPU): 这种模式通过 API 调用云端模型,对本地硬件几乎没有要求。你只需要一个 DashScope 的 API Key。

export DASHSCOPE_API_KEY=你的API_Key
./run_demo.sh vimrag

VRAG 模式(需要本地 GPU,建议 A100 80G): 这种模式会在本地加载 Qwen2.5-VL-7B 模型,推理全部在本地完成。

./run_demo.sh vrag

仅启动搜索引擎: 如果你只想用搜索引擎组件,可以单独启动。

./run_demo.sh search

方式二:手动启动各个组件

如果你需要更灵活的控制(比如指定端口、调试某个组件),可以手动逐个启动。

手动启动 VimRAG 需要两个终端窗口:

# 终端 1:启动多模态搜索引擎
python search_engine/search_engine_api.py

# 终端 2:启动 Streamlit 交互界面
streamlit run demo/vimrag_app.py

手动启动 VRAG 需要三个终端窗口:

# 终端 1:启动搜索引擎(默认端口 8001)
python search_engine/search_engine_api.py

# 终端 2:通过 vLLM 加载本地模型(端口 8002)
vllm serve autumncc/Qwen2.5-VL-7B-VRAG \
    --port 8002 \
    --host 0.0.0.0 \
    --limit-mm-per-prompt image=10 \
    --served-model-name Qwen/Qwen2.5-VL-7B-Instruct

# 终端 3:启动 Streamlit 交互界面
streamlit run demo/app.py

方式三:通过 Python 代码调用

对于想要把 VRAG 集成到自己项目中的开发者,可以直接通过 Python API 调用:

import os
from demo.vimrag_agent import VimRAG

# 初始化 VimRAG 智能体
agent = VimRAG(
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    search_url="http://localhost:8001/search",
    model_name="qwen3.5-plus",
    api_key=os.environ.get("DASHSCOPE_API_KEY"),
    enable_thinking=True  # 开启扩展思考模式
)

# 流式获取回答
for event in agent.run({"query": "你的问题"}):
    if event["event"] == "answer":
        print(event["content"])

如果使用本地部署的 VRAG 模型,调用方式略有不同:

from demo.vrag_agent import VRAG

vrag = VRAG(
    base_url="http://0.0.0.0:8002/v1",
    search_url="http://0.0.0.0:8001/search",
    generator=False,
    api_key="EMPTY"
)

answer = vrag.run("你的问题")

构建自定义知识库:三种语料类型详解

VRAG 的搜索引擎支持三种类型的多模态语料,你可以根据自己的实际需求来选择。

图片语料是最简单的一种,直接把图片文件(JPG、PNG 等格式)放到 search_engine/corpus/ 目录下即可。搜索引擎会自动提取图片的视觉特征并建立索引。

PDF 文档需要先进行预处理——把每一页 PDF 转换成图片。这样做的好处是保留了文档的完整视觉布局信息,包括图表、表格、公式等在转成纯文本时容易丢失的内容。项目内置了转换脚本,可以批量处理:

# 项目内提供了 PDF 转图片的工具脚本
# 转换完成后将图片放入 corpus 目录

视频语料的处理稍微复杂一些。由于搜索引擎无法直接检索一整段长视频,需要先把视频切分成短片段。项目同样提供了切分脚本,支持按时间间隔或按场景切换来分割。切分后的视频片段会被当作独立的检索单元来建立索引。

索引构建过程支持断点续传,如果中途中断了(比如机器重启),重新运行会从上次的检查点继续,不需要从头开始。对于大规模语料库来说,这个特性非常实用。


训练自己的 VRAG-RL 模型

如果你不满足于使用预训练好的模型,想要在自己的数据集上训练一个定制化的 VRAG-RL 模型,项目也提供了完整的训练代码。

# 进入训练代码目录
cd VRAG-RL

# 安装训练框架
pip install -e .
pip install -r requirements_train.txt

# 启动 GRPO 训练(以 Qwen2.5-VL-7B 为基座模型)
./train_grpo_qwen2_5_vl_7b.sh

训练框架基于 verl(一个高性能的强化学习训练基础设施)构建,支持多卡分布式训练。训练过程中,模型会与本地搜索引擎进行多轮交互,通过 GRPO 算法不断优化检索和推理策略。

需要注意的是,强化学习训练对 GPU 显存和算力的要求较高。如果使用 7B 参数的基座模型,建议至少准备 4 张 A100 80G 显卡。训练的详细配置和参数说明可以参考项目中 VRAG-RL/README.md 文件。

目前 VimRAG 部分的训练代码(基于 Qwen3-VL)还在审核中,后续会开源发布。


项目架构一览

为了帮助读者更好地理解项目的整体结构,这里梳理一下代码仓库的目录布局:

VRAG/
├── demo/                        # 演示应用
│   ├── app.py                   # VRAG 的 Streamlit 界面
│   ├── vimrag_app.py            # VimRAG 的 Streamlit 界面
│   ├── vrag_agent.py            # VRAG 智能体实现
│   └── vimrag_agent.py          # VimRAG 智能体实现
├── search_engine/               # 多模态检索引擎
│   ├── models/                  # 嵌入模型(GVE, Qwen3-VL)
│   ├── corpus/                  # 语料和索引存储
│   ├── search_engine.py         # 检索引擎核心逻辑
│   └── search_engine_api.py     # FastAPI 服务接口
├── VRAG-RL/                     # 强化学习训练框架
│   ├── verl/                    # 训练基础设施
│   ├── vrag_agent/              # 训练用智能体
│   └── train_grpo_qwen2_5_vl_7b.sh  # 训练脚本
├── requirements.txt             # 项目依赖
└── run_demo.sh                  # 一键启动脚本

搜索引擎部分使用了 GVE-7B(一个通用视觉嵌入模型)来生成多模态嵌入向量,支持对文本、图片、视频片段进行统一的向量化表示和相似度检索。整个检索服务通过 FastAPI 暴露 HTTP 接口,与上层的智能体组件通过 API 调用进行通信。


关键技术特性总结

在实际使用过程中,以下几个技术特性是 VRAG 区别于其他多模态 RAG 方案的核心卖点:

实时 DAG 可视化。VimRAG 支持在 Demo 界面中实时展示推理过程中的记忆图变化,每一步检索和推理都以节点和边的形式呈现出来。这种可视化能力对于理解模型的决策过程、排查推理中的问题非常有帮助。

扩展思考模式(Extended Thinking)。在初始化 VimRAG 智能体时,可以通过 enable_thinking=True 参数开启扩展思考模式。开启后,模型在每个推理步骤之前会进行更深层次的内部推理,类似于人类在做复杂决策前的"深思熟虑",能够显著提升回答质量。

流式输出。VRAG 的 Python API 支持流式返回结果,用户不需要等到整个推理过程完成才能看到输出。在 Streamlit Demo 中,可以实时看到模型的推理过程和逐步生成的回答。

多源语料融合。搜索引擎在同一个索引空间中统一管理图片、PDF 页面和视频片段,用户的一次查询可以同时命中不同类型的语料。这种跨模态的统一检索能力,使得 VRAG 可以应用于信息来源多样化的复杂场景。


适用场景与落地建议

基于 VRAG 的技术特点,以下几类场景特别适合使用这个框架:

技术文档问答系统。企业内部往往积累了大量的技术文档,其中包含大量的架构图、流程图和数据表格。VRAG 的渐进式视觉感知能力可以精准地从这些图表中提取关键信息来回答技术问题。

学术论文辅助阅读。学术论文中的实验数据图表、算法流程图、模型架构图等视觉信息,对于理解论文至关重要。VRAG 可以帮助研究人员快速定位和理解这些视觉内容。

视频内容检索与问答。对于培训视频、监控视频、会议录像等长视频内容,VRAG 可以先将视频切分成片段建立索引,然后通过多模态检索快速定位到与问题相关的视频片段,并从中提取答案。

金融报告分析。财务报表、行业研报中充斥着各种图表和数据可视化。VRAG 的从粗到细感知机制特别适合处理这类信息密集的视觉文档。

在实际落地时,建议先从 VimRAG 的 API 模式开始,用云端模型快速验证效果,确认满足需求后再考虑是否需要本地部署和定制化训练。


与相关项目的关系

VRAG 并不是凭空产生的,它建立在通义实验室此前一系列研究工作的基础之上。其中最直接的前序工作是 ViDoRAG(Visual Document Retrieval-Augmented Generation via Dynamic Iterative Reasoning Agents),这是一个面向视觉丰富文档的多智能体 RAG 框架,已被 EMNLP 2025 接收。VRAG 在 ViDoRAG 的基础上进一步引入了强化学习训练和记忆图机制,使得整个框架的能力得到了质的飞跃。

在训练框架方面,VRAG-RL 参考了 Search-R1(一个将强化学习应用于搜索增强推理的先驱工作)和 verl(一个高性能的大模型强化学习训练框架)的设计思路。在数据处理和模型微调方面,则借鉴了 LLaMA-Factory 的工程实践。


写在最后

多模态 RAG 是当前 AI 应用开发中的一个热点方向,而 VRAG 项目在这个方向上提出了一套相当完整和系统的解决方案。从渐进式视觉感知、到基于记忆图的结构化推理、再到强化学习驱动的端到端训练,每一个环节都有扎实的技术创新。

对于想要深入了解多模态 AI 技术的开发者和研究者来说,VRAG 不仅是一个可以直接使用的工具,更是一份优秀的学习材料。无论是它的记忆图设计思路、GGPO 训练策略,还是整个项目的工程架构,都值得仔细研读。

项目地址:https://github.com/Alibaba-NLP/VRAG

VRAG-RL 论文:arXiv:2505.22019

VimRAG 论文:arXiv:2602.12735

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐