Act Wisely: Cultivating Meta-Cognitive Tool Use in Agentic Multimodal Models
Paper: arXiv:2604.08545 Code: Accio-Lab/Metis Code reference:
main@84fd45e7(2026-04-10)
1. Motivation (研究动机)
这篇论文关注的不是“模型会不会调用工具”,而是“模型知不知道什么时候不该调用工具”。作者把这个问题称为 agentic multimodal models 的 meta-cognitive deficit;HDPO 的核心机制也可概括为 conditional advantage over correct trajectories:模型虽然已经能调用 Python、image search、text search、crop/zoom 等外部环境,但缺少对自身能力、视觉上下文充分性、外部工具必要性的校准能力。因此它们常出现 blind tool invocation:即使答案可直接从原图、内部知识或简单视觉理解得到,也会反射式地调用工具。
Figure 1 解读:这张图对比了现有 tool-use agent 的“工具调用率”和任务性能。论文要强调的现象是:高工具调用率不等于高准确率;相反,过度调用工具会带来串行 API 延迟、额外环境噪声和错误观察,可能把原本可靠的推理轨迹带偏。Metis 的目标是在保持甚至提升准确率的同时,把冗余工具调用压到接近零。
当前方法的核心瓶颈有三层:
- 行为层面:许多 multimodal agent 把“有工具可用”误学成“默认调用工具”,没有判断 raw visual context 是否已经足够。
- 优化层面:常见做法把答案准确率和工具惩罚写成一个 scalarized reward,例如 。如果 太大,模型会过度保守,在真正需要工具的困难样本上也不调用;如果 太小,工具效率信号会在 GRPO 的 advantage normalization 中被准确率方差洗掉。
- 数据层面:已有 tool-augmented SFT 轨迹可能包含不可执行代码、幻觉工具反馈、或由弱模型标注导致的“过时工具依赖”。这些轨迹会把模型训练成依赖工具,而不是训练成会判断工具是否必要。
研究这个问题的价值在于:真实 agent 部署中,工具调用通常是串行、高延迟、可失败的外部交互;如果模型能学会 abstention,它不仅更快,也更鲁棒。论文的核心主张是:执行效率不是准确率的敌人;去掉噪声性、冗余性工具调用,反而能提升最终推理质量。
2. Idea (核心思想)
核心洞察:工具效率不应该作为一个和准确率抢梯度的标量惩罚,而应该是一个只在“答案已经正确”的轨迹内部比较的条件目标。 也就是说,先让模型学会答对,再在答对的轨迹之间学习谁更节省工具。
论文提出 Hierarchical Decoupled Policy Optimization (HDPO):把优化拆成两个正交通道。accuracy channel 对所有 rollout 做标准 GRPO,最大化答案正确性与格式合规;efficiency channel 只在正确 rollout 构成的 qualifying set 内做条件 advantage 估计,奖励更少工具调用。最后在 loss 层面组合两个 surrogate loss,而不是在 reward 层面先混合。
Figure 2 解读:上半部分表示 coupled reward:准确率和工具效率先被压成一个混合 reward,再归一化成一个 advantage,导致小的效率项被准确率方差淹没。下半部分表示 HDPO: 和 分别归一化,直到最终 loss 才通过 与 加权组合。因此“答对”和“少用工具”各自有清晰的 credit assignment。
和标准 GRPO 或带工具惩罚的 agent RL 相比,HDPO 的差异不是换一个惩罚权重,而是改变比较对象:标准 GRPO 比较所有 rollout 的混合分数;HDPO 的工具效率只比较同一 prompt 下已经答对的 rollout。这避免了一个错误但零工具调用的轨迹被奖励,也避免了不同问题之间工具需求不同导致的 cross-prompt baseline 污染。
3. Method (方法)
Overall framework: Metis agent + HDPO
Figure 3 解读:Metis 是一个多轮 multimodal reasoning agent。输入是图像与问题;模型先在 <reason> 中判断是否需要外部帮助,然后可以调用 Python code execution、text search、image search 等工具,也可以直接输出 <answer>。方法的关键不在“接入更多工具”,而在训练策略:通过 SFT 清理高质量工具轨迹,再用 HDPO 在 RL 阶段把正确性与工具节制分开优化。
直觉上,HDPO 有点像给 agent 设定一条学习顺序:早期模型经常答错,此时正确 rollout 很少,efficiency channel 基本不给梯度,训练主要推动“先答对”;当模型逐渐能答对同一 prompt 的多个 rollout 后,qualifying set 变大,efficiency channel 才开始比较这些正确解法中谁更少调用工具。这种 implicit curriculum 不需要手动调度 ,由条件 advantage 自动产生。
3.1 Coupled reward 为什么失败
设同一 prompt 下采样 个多轮轨迹 ,第 个轨迹包含 次工具交互。传统方式会把准确率和工具效率混成一个 reward: 再对同组 rollout 做标准化: 令 和 为 centered rewards,则混合 advantage 展开为: 当 很小时,一阶近似为: 这说明工具效率的梯度贡献会以 被压低,且 denominator 主要由 accuracy variance 主导。语义上也有歧义:一个错误但没调用工具的轨迹,可能和一个正确但调用很多工具的轨迹得到相近混合分数;这样 policy gradient 不知道到底该学“答对”还是“少动”。
3.2 Dual reward design
HDPO 先定义两个独立 reward,而不是先混合: 其中 来自 LLM judge 的答案正确性, 表示输出格式是否合规;论文和 released code 都使用 。accuracy advantage 对所有 个 rollout 标准化: 工具效率 reward 则明确条件化在正确答案上: 这里 时 reward 为 , 时为 ,随工具调用次数单调下降。关键是:错误轨迹无论是否少用工具,都不能获得效率奖励。
3.3 Conditional advantage estimation
HDPO 定义同一 prompt 内的正确轨迹集合: 工具 advantage 只在 内比较: 如果正确 rollout 少于 2 个,则没有有意义的“正确解法之间效率比较”,工具 advantage 设为 0。这样避免把不同 prompt 的工具需求强行放到同一个 baseline 下,也避免奖励错误但“动作少”的轨迹。
3.4 Hierarchical policy update
最终 loss 在 loss 层面组合两个 clipped surrogate:
Released code 中,examples/train/train_metis.sh 设置 algorithm.adv_estimator=hdpo、actor_rollout_ref.actor.w_acc=1.0、actor_rollout_ref.actor.w_tool=$W_TOOL,默认 W_TOOL=0.15。verl_tool/workers/hdpo_actor.py 分别用 advantages 和 tool_advantages 计算 loss_acc 与 loss_tool,再执行 pg_loss = w_acc * loss_acc + w_tool * loss_tool。
论文公式与 released code 实现差异:核心公式基本一致;但 verl_tool/trainer/ppo/hdpo_algos.py 的注释写着 qualifying sample 是 “correct answer AND used tools”,而实际实现是对 tool_reward_tensor.sum(dim=-1)>0 的样本建组。由于 MetisRewardManager 对正确且 的轨迹赋 ,实际代码仍会把“正确且零工具”的轨迹纳入工具效率比较,这与论文中 的定义一致;差异主要是代码注释表述不严谨。
3.5 Data curation and system prompt
SFT 数据来自 DeepEyesV2、V-Interaction、Thyme 等公开 tool-augmented multimodal trajectories,并额外加入 OpenMMReasoner 的 tool-free reasoning 数据以保留内部推理能力。清洗分三步:执行代码并删除非可执行/幻觉反馈轨迹;用 Qwen3-VL-8B direct reasoning 过滤 pass@8=1 的样本,避免把已经能直接答对的问题继续训练成“必须用工具”;用 Gemini-3.1-Pro 从 visual relevance、reasoning coherence、tool-use rationale 等维度过滤低质量轨迹,显式惩罚 blind tool invocation。
RL prompt set 来自 V-Interaction、Thyme、SenseNova-MARS、DeepEyesV2。作者用 rollout 做 difficulty calibration,只保留 的样本,保证同一 prompt 内既有成功也有失败,能产生非零方差 advantage。最终 RL 训练集约 5K prompts,类型比例为 perception 45%、search-oriented 36%、math/general reasoning 19%。
系统提示明确要求模型先在 <reason> 中判断,再选择直接回答或调用 <tool_call>;可用工具包括 Python code execution、text search、image search。提示中还强调 “Use tools ONLY when they provide clear value that reasoning alone cannot”,这与 HDPO 的训练目标一致:工具是精密仪器,不是默认反射。
3.6 Pseudocode grounded in released code
import torch
import torch.nn.functional as F
def compute_metis_rewards(answer_score, format_score, num_turns):
"""Based on verl_tool/workers/reward_manager/metis.py."""
accuracy_reward = 0.9 * answer_score + 0.1 * format_score
if answer_score > 0:
tool_reward = 1.0 / (num_turns + 1)
else:
tool_reward = 0.0
return accuracy_reward, tool_reward
def conditional_tool_advantage(tool_rewards, prompt_uid, response_mask, eps=1e-6):
"""Based on verl_tool/trainer/ppo/hdpo_algos.py."""
# tool_rewards: [batch], already 0 for incorrect trajectories
advantages = torch.zeros_like(tool_rewards)
for uid in torch.unique(prompt_uid):
group = (prompt_uid == uid)
qualifying = group & (tool_rewards > 0)
if qualifying.sum() >= 2:
scores = tool_rewards[qualifying]
normed = (scores - scores.mean()) / (scores.std() + eps)
advantages[qualifying] = normed
return advantages[:, None] * response_mask
def hdpo_advantages(acc_token_rewards, tool_token_rewards, prompt_uid, response_mask):
"""Accuracy GRPO over all samples; tool GRPO only over correct samples."""
acc_scores = acc_token_rewards.sum(dim=-1)
tool_scores = tool_token_rewards.sum(dim=-1)
acc_adv = torch.zeros_like(acc_scores)
for uid in torch.unique(prompt_uid):
group = (prompt_uid == uid)
scores = acc_scores[group]
acc_adv[group] = (scores - scores.mean()) / (scores.std() + 1e-6)
acc_adv = acc_adv[:, None] * response_mask
tool_adv = conditional_tool_advantage(tool_scores, prompt_uid, response_mask)
return {"acc_advantages": acc_adv, "tool_advantages": tool_adv}
def hdpo_policy_loss(policy_loss_fn, old_logp, logp, response_mask, acc_adv, tool_adv,
w_acc=1.0, w_tool=0.15):
"""Based on verl_tool/workers/hdpo_actor.py."""
loss_acc = policy_loss_fn(old_logp=old_logp, log_prob=logp,
advantages=acc_adv, response_mask=response_mask)
tool_has_signal = (tool_adv != 0).any(dim=-1, keepdim=True)
tool_mask = response_mask * tool_has_signal.float()
if tool_mask.sum() == 0:
tool_mask = response_mask
loss_tool = policy_loss_fn(old_logp=old_logp, log_prob=logp,
advantages=tool_adv, response_mask=tool_mask)
return w_acc * loss_acc + w_tool * loss_toolCode reference:
main@84fd45e7(2026-04-10) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Metis RL launch/config | examples/train/train_metis.sh | algorithm.adv_estimator=hdpo, W_TOOL, rollout/training hyperparameters |
| Accuracy/tool reward | verl_tool/workers/reward_manager/metis.py | format_reward, answer_reward, MetisRewardManager.__call__ |
| Conditional advantage | verl_tool/trainer/ppo/hdpo_algos.py | compute_grpo_conditional_advantage, compute_hdpo_advantage, hdpo_compute_advantage |
| Dual-loss update | verl_tool/workers/hdpo_actor.py | HDPODataParallelPPOActor.update_policy |
| HDPO worker wiring | verl_tool/workers/hdpo_fsdp_worker.py and verl_tool/trainer/main_ppo.py | HDPOActorRolloutRefWorker, HDPOAsyncActorRolloutRefWorker |
| Tool environment | verl_tool/servers/tools/metis.py, metis_code.py, examples/train/start_tool_server.sh | Python/text-search/image-search handlers and tool-server startup |
4. Experimental Setup (实验设置)
Training datasets and scale
- SFT:DeepEyesV2、V-Interaction、Thyme 的 tool-augmented multimodal trajectories;另加入 OpenMMReasoner 的 tool-free reasoning 数据。论文未详细说明 SFT 总样本数。
- RL:V-Interaction、Thyme、SenseNova-MARS、DeepEyesV2 的 prompts,经 image/question consistency 检查与 过滤后保留约 5K high-quality prompts;比例为 perception 45%、search-oriented 36%、math/general reasoning 19%。
- Evaluation:perception/document benchmarks 包括 V*Bench、HRBench-4K/8K、TreeBench、MME-RealWorld、SEEDBench2-Plus、CharXiv(DQ/RQ);math/logical benchmarks 包括 MathVista、MathVerse、WeMath、DynaMath、LogicVista。论文没有逐一列出这些 benchmark 的样本规模。
Baselines and metrics
基线分三类:open-source models without tool use(LLaVA-OneVision、InternVL3-8B、Qwen2.5-VL-7B/32B-Instruct、Qwen3-VL-8B-Instruct),text-only reasoning models(MM-Eureka、ThinkLite-VL、VL-Rethinker、VLAA-Thinker),agentic multimodal models(Pixel-Reasoner、DeepEyes、Thyme、DeepEyesV2、Mini-o3、SenseNova-MARS-8B、Skywork-R1V4-30B-A3B)。
主要指标是各 benchmark 的 accuracy/score(表中以百分数报告),以及 Figure 1 中用于刻画执行经济性的 tool invocation rate。tool invocation rate 越低表示 agent 越能在不需要外部帮助时直接回答。
Training config
论文报告使用 Qwen3-VL-8B-Instruct 作为 backbone,先 SFT 再 HDPO RL;实验硬件为 8 NVIDIA Blackwell B200 GPUs。SFT 阶段论文给出:2 epochs、AdamW、cosine LR decay、peak LR 、global batch size 128。released repo 未提供专门的 Metis SFT launch script,因此这些 SFT 数字按论文记录。
RL 阶段的 code-grounded 配置来自 examples/train/train_metis.sh:
- Parallelism / batch:
n_gpus_per_node=8,n=16rollouts per prompt;batch_size=16*num_nodes*n_gpus_per_node,单节点即 128;ppo_mini_batch_size=8*num_nodes*n_gpus_per_node,单节点即 64。 - Lengths / turns:
max_prompt_length=24576,max_response_length=16384,max_action_length=16384,max_obs_length=8192,actor_rollout_ref.agent.max_turns=10。 - Optimization:
actor_rollout_ref.actor.optim.lr=1e-6,algorithm.kl_ctrl.kl_coef=0,actor_rollout_ref.actor.kl_loss_coef=0.0,w_acc=1.0,defaultw_tool=0.15。 - Rollout/tool system:vLLM rollout,
temperature=1.0,top_p=1.0,top_k=-1,actor_rollout_ref.rollout.n=$n,max_concurrent_trajectories=256,tool server fromexamples/train/start_tool_server.sh。
5. Experimental Results (实验结果)
Main benchmark results
Perception/document understanding 上,Metis 的主要结果如下:
| Model | V* Bench | HR4K | HR8K | TreeBench | MME RealWorld | SEED2 PLUS | CharXiv(DQ) | CharXiv(RQ) |
|---|---|---|---|---|---|---|---|---|
| Qwen3-VL-8B-Instruct | 86.4 | 78.9 | 74.6 | 40.7 | 61.9 | 71.0 | 83.0 | 46.3 |
| DeepEyesV2 | 81.8 | 77.9 | 73.8 | 42.5 | 64.9 | 70.5 | 78.6 | 48.9 |
| SenseNova-MARS-8B | 92.2 | 83.1 | 78.4 | - | 67.9 | - | - | - |
| Skywork-R1V4-30B-A3B | 88.0 | 82.8 | 79.8 | - | 71.4 | - | - | - |
| Metis | 91.1 | 83.5 | 82.0 | 45.2 | 70.3 | 72.5 | 83.4 | 54.1 |
Math/logical reasoning 上,Metis 的结果如下:
| Model | MathVista | MathVerse | WeMath | DynaMath | LogicVista | Avg. |
|---|---|---|---|---|---|---|
| Qwen3-VL-8B-Instruct | 76.3 | 61.3 | 38.8 | 65.5 | 54.9 | 59.4 |
| DeepEyes | 70.1 | 47.3 | 38.9 | 55.0 | 47.7 | 51.8 |
| DeepEyesV2 | 71.9 | 52.7 | 38.1 | 57.2 | 48.7 | 53.7 |
| Metis | 78.0 | 65.9 | 65.2 | 69.2 | 56.2 | 66.9 |
最显著的是 WeMath:Metis 从 backbone 的 38.8 提升到 65.2,绝对提升 +26.4;这支持作者的论点:工具不是越多越好,但当任务确实需要计算或局部视觉放大时,策略性工具调用能显著提升复杂推理。
Ablation: decoupling and
| Method | V* Bench | HRBench4K | HRBench8K | CharXiv(RQ) | MathVista |
|---|---|---|---|---|---|
| Qwen3-VL-8B-Instruct | 86.4 | 78.9 | 74.6 | 46.3 | 76.3 |
| + standard GRPO () | 88.7 | 81.0 | 79.2 | 51.0 | 76.9 |
| + HDPO () | 88.0 | 83.5 | 81.0 | 52.7 | 77.4 |
| + HDPO () | 91.1 | 83.5 | 82.0 | 54.1 | 78.0 |
| + HDPO () | 87.4 | 82.5 | 80.5 | 51.5 | 77.2 |
相对 standard GRPO, 的 HDPO 在 V* Bench、HRBench8K、CharXiv(RQ) 上分别提升 +2.4、+2.8、+3.1。 说明效率信号偏弱; 则开始损害所有 benchmark,说明过度强调工具节制会抑制必要探索。最佳点呈 inverted-U,论文选择 0.15 作为默认。
Qualitative tool arbitration
Figure 4 解读:该例展示“直接从视觉上下文回答”。问题可以通过图像内容和常识直接解决,Metis 没有调用工具。这是 HDPO 希望学到的 abstention:当内部能力和原始视觉证据足够时,直接回答比调用工具更快、更少噪声。
Figure 5 解读:该例展示“目标明确的 code execution”。问题要求比较某个子图局部曲线,原图尺度下不易看清;Metis 调用 Python 对相关区域 crop/zoom,再据此回答。这里工具调用不是默认动作,而是因为原始视觉分辨率不足而被触发。
Figure 6 解读:附录的直接视觉阅读案例进一步说明,若屏幕文字在原图中已经清晰可读,Metis 会直接抽取答案,不调用 code/search。这验证了模型并非“不会用工具”,而是学会了在证据充分时不使用工具。
Figure 7 解读:该例需要识别艺术品并查询完成年份,视觉特征本身不足以可靠得出事实答案,因此 Metis 触发 image search。它体现的是 epistemic uncertainty calibration:模型知道“我需要外部视觉检索证据”。
Figure 8 解读:该例中地标/建筑物或许可以从图像识别出来,但询问的是 cella width 这类无法由图像直接推断的事实数值,因此 Metis 使用 text search。这和 Figure 7 构成互补:一个是视觉识别缺口,一个是事实知识缺口。
Limitations and conclusion
论文没有给出很长的 limitations 列表,只在结论中指出未来工作会把 meta-cognitive framework 扩展到更开放、长时域环境。结合方法本身,可以看到几个实际边界:HDPO 依赖可靠的 answer judge 与格式 reward;工具效率只在正确 rollout 内比较,因此需要足够的 rollout 数和合适难度样本;对于真正需要多步检索/长期规划的开放环境, 的简单倒数奖励可能不足以表达复杂成本结构。
总体结论是:Metis/HDPO 证明了“少调用工具”不是牺牲能力,而是在训练目标正确设计时可以成为提升准确率的催化剂。它把 tool-use agent 的目标从“会执行工具”推进到“知道何时 abstain”。