论文标题:Agent0-VL: Exploring Self-Evolving Agent for Tool-Integrated Vision-Language Reasoning
一、Motivation:自我奖励为什么在多模态上会翻车
现在的视觉语言智能体(LVLM Agent)基本靠两条腿走路:人工标注的偏好数据 ,或者外部环境给的奖励信号。问题在于这两条腿都有天花板------人工标注受限于标注者本身的偏好水平,环境反馈往往稀疏且不完整,模型能力的上界实际上被监督信号的上界锁死了。
于是自然的思路是 self-rewarding:让模型自己当 Critic、自己当 Reward Model,自己给自己发奖励,从而摆脱静态监督。这条路在纯文本 LLM 上已经跑通了不少(self-consistency、TTRL、置信度/熵作为内部信号等)。
但作者指出,把这套纯文本的自我评估直接搬到视觉推理任务上,会遇到两个绕不过去的坑:
1. 评估能力不足(limited evaluation capability)
当模型只能靠"文字反思"来检查自己时,它没有办法真正验证多步数值计算、空间关系推理、几何/物理量的精确求解。而这些恰恰是几何题、图表分析这类任务的核心。让一个模型"用嘴"去验算一道解析几何题,本质上和让它"用嘴"去做这道题没有区别------错误会原封不动地传递到评估环节。
2. 评估过程不可靠(unreliable evaluation process)
过多的文本推理会让模型走语言捷径 :它绕开细粒度的视觉理解,转而依赖语言先验和上下文偏置。结果就是 evaluation hallucination(评估幻觉):
- 一个"读起来很通顺、逻辑很自洽、但和图完全对不上"的答案,被打了高分;
- 一个"视觉上正确、但表述不符合模型语言期待"的答案,反而被扣分。
作者的解法很直接 :既然 Tool-Integrated Reasoning(TIR)已经证明"推理时调工具"能有效补足模型的计算和感知短板,那为什么不把工具也用到自我评估和自我修复里?
核心 idea 一句话:让模型不只是"用工具解题",更要"用工具批改自己的卷子"。
评估一旦被工具产生的可执行证据(代码运行结果、裁剪放大后的图像区域)锚定,它就从"模型的主观判断"变成了"有据可查的验证",闭环自我提升才有可能在零外部奖励下稳定进行。

二、Related Work
2.1 Self-Evolving Methods
LLM 侧的主流做法是从模型自身输出中提取伪奖励:
| 思路 | 代表工作 |
|---|---|
| 自洽性(多次采样取一致性作为学习信号) | Self-Consistency、TTRL、MM-UPT、SRT |
| 强模型作自动评估器 | Pang et al. 2024 |
| 内部线索:置信度 | Zhao et al. 2025、Li et al. 2025a |
| 内部线索:输出熵 | Zhang et al. 2025c、DeepConf |
其中 MM-UPT 还会主动生成合成几何题来强化空间推理。
VLM 侧也在快速跟进:
- ViPER:两阶段由粗到细的训练框架,把实例级 / 图像级重建与自我批判、预测结合起来;
- Vision-Zero :领域无关的博弈式自博弈策略,在 self-play 和可验证奖励 RL 之间交替,实现可扩展的持续提升。
这些工作共同说明:VLM 和 LLM 一样,可以通过结构化的反馈闭环(不确定性建模、任务生成、课程学习)实现自我进化。Agent0-VL 的差异化在于:把工具接地引入到"自我评估"这一环。
2.2 Tool-Integrated Reasoning
TIR 的目标是让模型调用外部工具(搜索引擎、计算器、代码解释器)突破自身知识与计算能力的边界。从 Toolformer、ReAct 到 ToolLLM、Gorilla、Search-R1、ToRL,LLM 的多工具协同、规划与执行能力被不断强化。
扩展到 VLM 上主要有两条路线:
- VLM 作为编排者(orchestrator):调用外部视觉专家模型或技能库------MM-REACT、Visual Sketchpad、LLaVA-Plus;
- "视觉层面"的动态推理:把图像探索本身当成工具,比如 ZoomEye 的树形缩放、Grounded CoT 的视觉查询。
近期则大量转向 RL 训练:GRIT 和 DeepEyes 用 RL 激励模型在推理链中主动引用图像区域(bounding box);WebWatcher 用 RL 提升多模态深度研究场景下工具使用的泛化性。
Agent0-VL 的定位 :在这条线的基础上,进一步把工具增强推理引入自我评估流程,从而产出 process-level(步骤级)的奖励信号。
三、Method
3.0 问题形式化:POMDP
多轮 TIR 本质上是部分可观测的,作者用 POMDP 建模 M=(S,A,O,T,R,γ)\mathcal{M} = (S, A, O, T, R, \gamma)M=(S,A,O,T,R,γ):
- 状态 sts_tst:潜在的多模态推理状态,编码文本上下文、视觉特征、历史工具输入输出;
- 动作 ata_tat :要么是文本推理步 at(text)a_t^{(\text{text})}at(text),要么是结构化工具调用 at(tool)a_t^{(\text{tool})}at(tool)(如执行 Python 代码),即 A=Atext∪AtoolA = A_{\text{text}} \cup A_{\text{tool}}A=Atext∪Atool;
- 观测 oto_tot:工具或环境返回的反馈(数值结果、文本检索结果);
- 轨迹 τ={(st,at,ot)}t=1T\tau = \{(s_t, a_t, o_t)\}_{t=1}^{T}τ={(st,at,ot)}t=1T:每个 transition 编码一次"推理---工具---反馈"交互。
3.1 统一的 Solver-Verifier 架构

最关键的设计:Solver 和 Verifier 是同一个 LVLM、共享同一套参数 θ\thetaθ ,通过角色指示符 m∈{S,V}m \in \{S, V\}m∈{S,V} 切换模式:
πθ(at∣st,m)={πθS(at∣st),m=SolverπθV(at∣st,at,ot),m=Verifier \pi_\theta(a_t | s_t, m) = \begin{cases} \pi_\theta^{S}(a_t | s_t), & m = \text{Solver} \\ \pi_\theta^{V}(a_t | s_t, a_t, o_t), & m = \text{Verifier} \end{cases} πθ(at∣st,m)={πθS(at∣st),πθV(at∣st,at,ot),m=Solverm=Verifier
Solver(m=Sm = Sm=S):多轮推理 + 按需调工具,观测被并入上下文,用带证据的信息迭代精化推理:
at∼πθS(at∣st),bt+1=f(bt,ot)a_t \sim \pi_\theta^S(a_t|s_t), \quad b_{t+1} = f(b_t, o_t)at∼πθS(at∣st),bt+1=f(bt,ot)
其中 btb_tbt 是累积推理上下文与多模态信息的隐信念状态。
Verifier(m=Vm = Vm=V) :切换到生成式验证模式 ,对三元组 (st,at,ot)(s_t, a_t, o_t)(st,at,ot) 输出反馈元组:
Vt=(scoret, conft, critiquet)V_t = (\text{score}_t,\ \text{conf}_t,\ \text{critique}_t)Vt=(scoret, conft, critiquet)
- scoret∈−1,1\text{score}_t \in -1, 1scoret∈−1,1:事实正确性打分
- conft∈0,1\text{conf}_t \in 0, 1conft∈0,1:认知确定性(epistemic certainty)
- critiquet\text{critique}_tcritiquet:自然语言反思,描述潜在推理缺陷
Verifier 可以再次调用工具做交叉验证------这是全文最核心的一点,它把验证从"静态的正确性检查"变成了"动态的证据裁决过程"。
3.2 工具接地的验证与自修复
过程级奖励整合了语义可靠性、工具验证和跨角色正则:
rproc(t)=λtool⋅r(toolt)+scoret⋅conft⏟语义可靠性−βdiv⋅DKL(πθV∥πθE) r_{\text{proc}}^{(t)} = \lambda_{\text{tool}} \cdot r(\text{tool}t) + \underbrace{\text{score}t \cdot \text{conf}t}{\text{语义可靠性}} - \beta{\text{div}} \cdot D{\text{KL}}\left(\pi_\theta^{V} \| \pi_\theta^{E}\right) rproc(t)=λtool⋅r(toolt)+语义可靠性 scoret⋅conft−βdiv⋅DKL(πθV∥πθE)
- λtool\lambda_{\text{tool}}λtool 缩放工具验证正确性的权重;
- scoret⋅conft\text{score}_t \cdot \text{conf}_tscoret⋅conft 让"高分但没把握"的评估不至于被过度采信;
- βdiv\beta_{\text{div}}βdiv 稳定双角色的分布对齐,防止 Solver 和 Verifier 分布漂移过大。
置信度门控的自修复(confidence-gated self-repair) :设置信度阈值 τc\tau_cτc,修复门为
gt=σ(κ(τc−conft))g_t = \sigma\left(\kappa(\tau_c - \text{conf}_t)\right)gt=σ(κ(τc−conft))
σ(⋅)\sigma(\cdot)σ(⋅) 是 sigmoid,κ\kappaκ 控制门控温度。当 gtg_tgt 被激活时,Verifier 发出局部修复指令 Δt=fθ(st,at,Vt)\Delta_t = f_\theta(s_t, a_t, V_t)Δt=fθ(st,at,Vt),Solver 只重新生成被修正的那一段 at′∼πθ(⋅∣st,Δt,m=S)a't \sim \pi\theta(\cdot | s_t, \Delta_t, m=S)at′∼πθ(⋅∣st,Δt,m=S)------注意是局部 patch,不是整条重写。
最终步骤级奖励:
rt=rproc(t)−gt⋅Crepair(t)r_t = r_{\text{proc}}^{(t)} - g_t \cdot C_{\text{repair}}^{(t)}rt=rproc(t)−gt⋅Crepair(t)
Crepair(t)C_{\text{repair}}^{(t)}Crepair(t) 惩罚不必要的修复,避免模型学会"疯狂返工刷奖励"。
3.3 Self-Evolving Reasoning Cycle (SERC)
训练分两个阶段:SFT 冷启动 (学会工具调用格式和自评格式)+ RL 自演化循环。SERC 本身是嵌套双循环:
内循环(数据生成)
- Solver 生成完整轨迹 τ\tauτ,按需调工具;
- Verifier 逐步重评每一步,产出 VtV_tVt 和 rproc(t)r_{\text{proc}}^{(t)}rproc(t);
- 若 conft<τc\text{conf}t < \tau_cconft<τc,触发选择性修复,并施加代价 CrepairC{\text{repair}}Crepair;
- 聚合总回报:
g(τ)=αoutrout+∑t=1Tγt−1rtg(\tau) = \alpha_{\text{out}} r_{\text{out}} + \sum_{t=1}^{T} \gamma^{t-1} r_tg(τ)=αoutrout+t=1∑Tγt−1rt
外循环(策略更新)
用 GRPO 更新共享策略。对一组 GGG 条轨迹计算组内归一化优势:
A^i=g(τi)−mean(g1,...,gG)std(g1,...,gG)+ε\hat{A}_i = \frac{g(\tau_i) - \text{mean}(g_1, \dots, g_G)}{\text{std}(g_1, \dots, g_G) + \varepsilon}A^i=std(g1,...,gG)+εg(τi)−mean(g1,...,gG)
优化目标(带 KL 正则):
L=−Eimin(ρiA\^i, clip(ρi,1−ϵ,1+ϵ)A\^i)+βKLDKL(πθ∥πθold) \mathcal{L} = -\mathbb{E}i\left\\min\\left(\\rho_i \\hat{A}_i,\\ \\text{clip}(\\rho_i, 1-\\epsilon, 1+\\epsilon)\\hat{A}_i\\right)\\right + \beta{\text{KL}} D_{\text{KL}}\left(\pi_\theta \| \pi_{\theta_{\text{old}}}\right) L=−Eimin(ρiA\^i, clip(ρi,1−ϵ,1+ϵ)A\^i)+βKLDKL(πθ∥πθold)
作者对这个设计的哲学表述我觉得挺到位:学习目标从"静态的奖励最大化"变成了"分布自洽(distributional self-consistency)"的过程------推理分布和评估分布被联合对齐、持续优化。
3.4 实现细节(Appendix B,实际复现时的关键信息)
| 项目 | 配置 |
|---|---|
| Base Model | Qwen2.5-VL-7B-Instruct / Qwen3-VL-8B |
| SFT 数据 | ~200k 工具增强推理轨迹(GPT-5 + Qwen2.5-VL-72B 作 teacher 生成) |
| RL 数据 | ~40k |
| SFT 超参 | lr 1e-5,batch 128,3 epochs,warmup ratio 0.05 |
| 外部奖励预热 | 自演化前先用常规 RL(外部正确性信号)训 2 epochs,防止早期坍缩/熵退化 |
| 自演化 RL | lr 5e-7,1 epoch,batch 256 |
| GRPO | group size N=8N=8N=8,βKL=0.001\beta_{\text{KL}}=0.001βKL=0.001,每任务 4 rollouts,重复惩罚 1.05 |
| 其他 | βent=0.01\beta_{\text{ent}}=0.01βent=0.01,τc=0.7\tau_c = 0.7τc=0.7,修复惩罚 η=0.05\eta = 0.05η=0.05 |
| 硬件 | 8 × NVIDIA H200,bf16 |
数据构建走的是三层课程:直接推理数据 → 工具增强数据 → 多轮推理数据,并配了沙箱执行验证、语义一致性检查、embedding 去重、约 10k 人工抽检。
四、Experiments
4.1 主结果
Benchmark:MathVerse、MathVision、MathVista、WeMath、MMMU(数学/科学)+ HallusionBench、ChartQA(感知/幻觉)共 7 个。
| Model | MathVerse | MathVision | MathVista | WeMath | HallBench | ChartQA | MMMU | Avg. |
|---|---|---|---|---|---|---|---|---|
| GPT-4o | 50.8 | 30.4 | 63.8 | 68.8 | 55.0 | 85.7 | 69.1 | 60.5 |
| Claude-3.7-Sonnet | 52.0 | 41.3 | 66.8 | 72.6 | 55.4 | 56.5 | 75.0 | 59.9 |
| Qwen2.5-VL-7B (base) | 46.3 | 25.1 | 67.8 | 62.1 | 65.0 | 83.5 | 58.6 | 58.3 |
| Qwen2.5-VL-7B-TIR | 47.2 | 26.3 | 68.1 | 63.7 | 67.2 | 84.1 | 59.6 | 59.5 |
| ThinkLite-VL-7B | 52.1 | 32.9 | 75.1 | 69.3 | 70.9 | 84.8 | 55.5 | 62.9 |
| Agent0-VL-7B | 53.1 | 37.3 | 75.6 | 71.7 | 72.9 | 87.3 | 61.1 | 65.6 |
| Qwen3-VL-8B (base) | 62.1 | 53.9 | 77.2 | 72.5 | 72.1 | 84.6 | 69.6 | 70.3 |
| Agent0-VL-8B | 65.5 | 56.2 | 83.7 | 79.6 | 74.3 | 89.7 | 73.4 | 74.6 |
关键数字:
- 相对 base Qwen2.5-VL-7B +12.5%(58.3 → 65.6,绝对 7.3 个点);
- 相对其 TIR 变体 +10.3% ,说明收益不只是"加了工具";
- 相对同规模最强开源 ThinkLite-VL-7B +4.29%;
- 换成更强 base(Qwen3-VL-8B)仍有 +6.1%,说明方法有一定的 base 无关性;
- Agent0-VL-8B 在 MathVista、HallBench、ChartQA 上超过 GPT-4o。
分域看:数学类提升最大(7B/8B 分别 +18.1% / +7.4%),因为工具接地的符号计算和验证在这里价值最高;感知类 HallBench +12.2%、ChartQA +3.1%,说明 Verifier 的事实接地确实压住了视觉幻觉。
4.2 迭代自演化(最值得关注的一张表)
| Model | MathVerse | MathVision | MathVista | WeMath | HallBench | ChartQA | MME-Real | MMMU | Avg. |
|---|---|---|---|---|---|---|---|---|---|
| Base | 46.3 | 25.1 | 67.8 | 62.1 | 65.0 | 83.5 | 58.3 | 50.6 | 57.3 |
| Iter 1 | 48.4 | 29.6 | 69.2 | 66.8 | 67.9 | 84.7 | 63.9 | 53.7 | 60.5 |
| Iter 2 | 51.1 | 35.3 | 72.8 | 70.1 | 70.3 | 86.1 | 64.7 | 58.3 | 63.6 |
| Iter 3 | 53.1 | 37.3 | 75.6 | 71.7 | 72.9 | 87.3 | 65.3 | 61.1 | 65.5 |
三轮迭代单调提升 ,增益分别约 +5.2% / +4.0% / +2.8%。没有崩,这是自演化方法最重要的及格线------但增益在明显衰减。
4.3 消融实验
| Setting | Math Avg. | HallBench | ChartQA | MME-Real | MMMU |
|---|---|---|---|---|---|
| Agent0-VL-7B | 59.4 | 72.9 | 87.3 | 65.3 | 61.1 |
| w/o Self Repair | 57.5 | 71.6 | 86.1 | 64.1 | 57.9 |
| w/o Tool Use | 53.1 | 67.5 | 86.2 | 61.9 | 54.7 |
| w/o SERC (SFT only) | 51.8 | 65.8 | 85.4 | 60.5 | 52.5 |
| Qwen2.5-VL-7B (base) | 50.3 | 65.0 | 83.5 | 58.3 | 50.6 |
贡献排序:SERC(−8.7%)> Tool Use(−6.5%)> Self Repair(−2.5%)。
作者据此论证"推理与评估之间的双向交互是长期自演化的必要条件"。自修复的收益相对温和,但在数学任务上尤其有效------因为选择性重执行等于提供了额外的重采样与纠错机会。
4.4 作为 Process Reward Model 的泛化性
把 Verifier 单独拆出来,给别的 VLM 的推理轨迹打分做 Best-of-8:
| Model | Overall (Pass@1) | +Ours (BoN) |
|---|---|---|
| Qwen2.5-VL-3B | 50.0 | 53.6 |
| Qwen2.5-VL-7B | 58.3 | 62.8 |
| InternVL2.5-8B | 53.0 | 57.2 |
| Qwen2.5-VL-32B | 64.4 | 69.1 |
平均 +7.3% ,且从 3B 到 32B 全尺度有效,甚至能提升比自己大得多的 32B 模型。我认为这是全文最硬的一组实验(理由见第六节)。
4.5 Case Study
论文用一道"海岸警卫队瞭望塔盲区"的解析几何题贯穿全流程(Fig. 4 / Fig. 8):
- Phase 1:Solver 把"盲区"误判为 Q2 象限,算出答案 0.00(错);
- Phase 2 :Verifier 给 step 1 打 score=−1.0, conf=1.0\text{score}=-1.0,\ \text{conf}=1.0score=−1.0, conf=1.0,critique 指出盲区定义错误,真正的盲区应是 Q4;
- Phase 3 :高置信度错误触发修复门,Self-Repair 发出
PATCH,只改 step 1 的前提; - Phase 4 :Solver 基于修正前提重跑,两次调用
calc_intersection_and_distance工具,得 1.01015 + 7.11601 = 8.13(对)。
五、Conclusion
Agent0-VL 用单个模型统一了**推理(Solver)、验证(Verifier)、修复(Self-Repair)**三种能力,通过 Self-Evolving Reasoning Cycle 把"工具接地验证 + 置信度门控修复 + GRPO"串成闭环,在零外部奖励(自演化阶段)下实现了多轮稳定的自我提升,并且 Verifier 可以解耦出来作为通用的多模态 PRM 使用。
方法层面我认为真正的贡献是两点:
- 把 TIR 从"推理阶段"扩展到"评估阶段",用可执行证据去对抗评估幻觉;
- 用 confidence gate 实现局部 patch 式的修复,而不是整条轨迹重写------这在工程上大幅降低了自我纠错的成本。