MiroThinker-1.7 & H1: Towards Heavy-Duty Research Agents via Verification

Paper: arXiv:2603.15726 Code: MiroMindAI/MiroThinker Code reference: main @ 370f9836 (2026-04-13)

1. Motivation (研究动机)

现有 deep research agent 的核心瓶颈不是单次 forward 的语言能力,而是长链路交互中的“每一步是否可靠”。研究型任务通常需要多轮检索、阅读网页、调用代码执行、汇总证据并反复校验;如果每一步的 query formulation、tool call、observation digestion 或 final-answer formatting 有噪声,简单增加 turn 数或 token budget 只会把错误积累到更长轨迹中。

本文要解决的具体问题是:如何让 research agent 在 open-web / professional-domain / long-report 任务上进行更可靠的 long-horizon reasoning。作者把问题拆成两层:第一层是 MiroThinker-1.7,通过 agentic mid-training、SFT、DPO、online GRPO 提高单步 planning / reasoning / tool-use / summarization 的原子能力;第二层是 MiroThinker-H1,在推理时加入 Local Verifier 和 Global Verifier,把 verification 显式放进 step-level 与 trajectory-level 决策。

这个问题值得研究的原因在于:research agent 的真实上限往往由“能否持续找到、验证、整合证据”决定,而不仅是模型参数量或上下文长度。若 interaction scaling 可以稳定,agent 就能在 BrowseComp、GAIA、DeepSearchQA、FinSearchComp、MedBrowseComp 这类需要外部证据与多跳推理的任务上,把更多 compute 转化为更高准确率,而不是转化为更多无效搜索。

2. Idea (核心思想)

核心洞察:heavy-duty research agent 应该同时扩大交互规模与提高每一步交互质量;否则长轨迹只会放大错误。MiroThinker-1.7 先通过多阶段训练让每个 thought-action-observation step 更可靠,MiroThinker-H1 再用局部/全局 verification 约束推理轨迹,使 agent 在更大 compute budget 下仍能选择证据更完整的答案。

关键创新可以概括为三点:一是把 ReAct-style agent formalized 成带 context operator 与 episode restart 的 dual-loop workflow;二是构建 Corpus-based + WebHop 的高质量 QA 合成框架,用结构化多跳图和层级验证控制训练样本难度;三是用 agentic mid-training、trajectory SFT、DPO 与 GRPO 串成完整训练链路,并在 H1 中加入 Local / Global Verifier。

与普通 ReAct 或只做 SFT 的 agent 相比,本文的差异不是“多调用几次工具”,而是把 interaction scaling 的每个关键环节都做成可训练或可验证的对象:数据构造阶段验证 QA 可解性,训练阶段优化 trajectory-level 行为,推理阶段用 Local Verifier 防止惯性错误路径、用 Global Verifier 审核完整证据链。

换句话说,MiroThinker 的主张是“先让每一次交互变得有信息量,再让系统敢于花更多 compute”。如果单步检索 query 写得差、网页结果没有被压缩成可用 evidence、工具调用格式经常失败,那么增加 只会产生更长的坏轨迹;反过来,当 step-level planning / summarization / tool-use 被 mid-training 强化,并且错误轨迹可以被 verifier 拦截时,额外 token budget 才更可能转化为更深证据链与更高 final-answer accuracy。这个思想也解释了实验中“性能更高但平均 rounds 更少”的现象:提升的是 effective interaction,而不是 raw interaction count。

3. Method (方法)

代码搜索结论:论文和 arXiv source 明确给出 MiroMindAI/MiroThinker。我检查了 arXiv/PDF links、title+GitHub、MiroThinker+GitHub、arXiv ID+GitHub、MiroMind+MiroThinker 以及 direct GitHub probe;接受该 repo,因为它包含 README、MiroFlow agent implementation、benchmark scripts、trace collection 与 demo。另一个相关 repo MiroMindAI/MiroFlow 是通用 agent framework,不是本文 MiroThinker model repo 的主代码链接。

3.1 Overall framework:从 step reliability 到 heavy-duty verification

Figure 2 解读:图中把 MiroThinker-1.7 & H1 拆成三条主线。左侧是 tool interface,包括 google_searchscrape_and_extract_infocreate_sandboxrun_commandrun_python_code 与文件传输工具;中间是 model compute scaling,从 MiroThinker-1.7-mini 到 1.7 再到 H1;右侧是 thought-tool-observation loop 与 verification-centric reasoning,H1 在普通 ReAct loop 之外加入 Local Verifier 和 Global Verifier,让模型在步骤内与完整轨迹上都能重新检查证据。

直觉上,MiroThinker 不是把 agent 当成一个超长 prompt 来跑,而是把“工具调用—观察—摘要—重试—最终回答”看成一个可管理的系统。这样做的关键收益是:模型不必保留所有 raw observations,而是保留完整 thought/action trace,并只对最近 observation 开窗口;一旦轨迹污染或达到 turn budget,还能 clean-slate restart,避免在坏上下文中继续浪费 compute。

3.2 Agentic workflow:dual-loop ReAct + context operator

论文把每个 episode 中 step 之前的历史写成: 其中 是 thought, 是 action/tool call, 是 tool observation。模型不会直接消费完整 ,而是用 context operator 形成有效上下文 。滑动窗口选择最近 个 observation: 并对 observation 做截断/屏蔽: 有效上下文保留完整 thought/action trace,只对 observation 应用 。之后模型生成当前 thought 和 action: 环境执行 action 得到 ,再把 追加进轨迹。这个设计对应 released code 中 apps/miroflow-agent/src/core/orchestrator.pyOrchestrator.run_main_agent:循环读取 max_turns,调用 AnswerGenerator.handle_llm_call,执行 tool calls,记录 intermediate boxed answers,并在结尾调用 generate_and_finalize_answer

Episode restart 用来处理轨迹级失败:如果 episode 达到 T_\max 或 final-answer 格式持续错误,下一轮 episode 用原始 query 重新初始化: 这样会丢弃前一条轨迹的所有 state,避免 degraded context 的偏置。论文实验中设置 ,并说明 R_\max=5T_\max 多数 benchmark 为 200,BrowseComp、BrowseComp-ZH、DeepSearchQA 为 300。

论文公式与 released code 实现差异:论文的 evaluation protocol 写 T_\max=200/300,但 apps/miroflow-agent/conf/agent/single_agent_keep5.yaml 当前默认 main_agent.max_turns: 600keep_tool_result: 5context_compress_limit: 5;公开 benchmark script 只传入 agent=$AGENT_SET,没有在脚本层显式把 max_turns 改成 200/300。因此笔记中将论文报告的 evaluation protocol 与 released code 默认配置分开记录,不把二者静默对齐。

3.3 Tool interface:检索、网页抽取、代码执行与文件传输

工具被分成三类。第一类是 information retrieval:google_search 返回标题、URL、snippet;scrape_and_extract_info 对指定 URL 抓取正文,并通过轻量 LLM 把 raw webpage 压缩成 task-relevant evidence,避免把长网页直接塞进主模型上下文。第二类是 code execution:E2B Linux sandbox 通过 create_sandbox 初始化,随后 run_command / run_python_code 执行 shell 或 Python,适合文件 I/O、数值计算、数据处理。第三类是 file/data transfer:upload_file_from_local_to_sandboxdownload_file_from_sandbox_to_localdownload_file_from_internet_to_sandbox 连接本地、sandbox 与 remote assets。

Released code 中这部分主要落在 apps/miroflow-agent/src/config/settings.py:create_mcp_server_parametersapps/miroflow-agent/src/core/tool_executor.py:ToolExecutor。前者按 config 动态创建 MCP server parameters,例如 tool-google-searchtool-pythontool-readerjina_scrape_llm_summary 等;后者负责修正 tool-call arguments、检测重复 query、post-process tool results、判断是否 rollback,并格式化 tool result 交还给 LLM。

3.4 High-quality QA construction:Corpus breadth + WebHop depth

Figure 3 解读:左侧 Corpus-based Pipeline 从 Wikipedia、OpenAlex 等高度互链语料中抽取 document subgraph,合成大规模多跳 QA,用于早期训练的 breadth;右侧 WebHop Pipeline 从 answer entity 出发构建 directed reasoning tree,经 live web search 扩展 child nodes,并通过 hierarchical verification 与 leaf obfuscation 保证样本既可解又不容易被 shortcut 解决。

Corpus-based Pipeline 延续 MiroThinker 1.0 的思路:从 seed document 采样内部链接形成 connected subgraph,抽取跨文档事实,让强 LLM 合成 multi-hop QA。这一路线吞吐量高、覆盖广、可通过 prompt diversification / obfuscation 生成多样 question forms,但 difficulty control 较弱,也不严格约束 reasoning depth 或 information leakage。

WebHop 专门补上这些弱点。它以 answer/root entity 为根建立 directed reasoning tree,每条 edge 是可验证的 semantic relationship;tree depth 控制 reasoning hops;事实抽取限制在 parent-child edges,减少绕过目标路径的 shortcut。随后通过 live web search 扩展 child nodes,排除 encyclopedic sources,以更接近 inference-time 的开放网页分布。

Hierarchical solvability verification 是 WebHop 的关键过滤:对每条 parent-child relationship,验证“知道 children 是否足以把 parent 缩小到有限候选集”;对 root entity 更严格,要求从 first-hop neighbors 的匿名 fact table 中唯一推断 hidden root。容易泄露答案的 leaf entity 会被替换成功能性描述,例如把 “Louvre Pyramid” 替换成更泛化的描述,扩大 plausible referents。最后 strong LLM 只允许使用 graph edges 上的 facts 生成 question,并用 post-hoc search agents 按难度分配到 SFT 或 RL 阶段。

3.5 Training pipeline:四阶段训练把 atomic ability 变成 agent behavior

Figure 4 解读:MiroThinker-1.7 基于 open-source Qwen3 MoE models,训练链路是 Mid-training → SFT → Preference Optimization → RL。图的意义在于把“单步能力增强”与“完整 agent 轨迹优化”分开:mid-training 教会模型单步 planning/reasoning/summarization,SFT 教 expert trajectory 格式,DPO 对 trajectory preference 做偏好对齐,GRPO 再让模型在 live environments 中试错提升。

Agentic mid-training 强化四类 atomic capabilities:cold-start planning、context-conditioned reasoning、tool-aware action selection、answer summarization。训练样本不是简单整条轨迹蒸馏,而是把 step 单独重写成高质量 assistant turn,条件是 ,即 task instruction、prior reasoning、tool calls、observations。目标函数是 next-token prediction: 其中 时是单轮 planning; 时是 interleaved reasoning 或 summarization。作者还混入 general instruction-following 与 knowledge-intensive data 来减轻 catastrophic forgetting。

Agentic SFT 使用完整 expert trajectories ,其中 。训练时 tool execution 不在线发生,observations 是预先收集并作为 user turns 输入;assistant 学习输出下一步 reasoning thoughts 与 tool calls。目标函数是: Agentic Preference Optimization 用 DPO 对 SFT model 的多步 trajectory 决策做偏好优化。偏好样本为 ;主要依据 final answer correctness 排序,不强行规定固定 planning length、step count 或 reasoning template,以避免结构性偏差。DPO loss 为: 整体目标再加上 preferred trajectories 上的 SFT loss: MiroThinker-1.7-mini 还使用 preference distillation,把更强模型的 preference tendencies 迁移给小模型。

Agentic RL 用 online GRPO:每个 batch 的 rollouts 只消费一次并用于一次 policy gradient step。基础 reward 平衡 correctness 与 format: 每个 prompt 采样 条 trajectories,优势是相对 group mean: 最终目标在 token-level KL 中加入 targeted entropy control: 其中 这会对 negative rollouts 中低概率 token 加额外 KL,避免模型持续压低这些 token 的概率导致 premature entropy collapse。

Figure 5a–5b 解读:左图显示 GRPO training reward 随 steps 上升,右图显示 BrowseComp-200 validation accuracy 同步改善;BrowseComp-200 是作者为训练期快速评估选出的 challenging subset,曲线使用 window size 5 的 running average。它证明 RL 不只是学格式,而是在 live environment 中把 trial-and-error 转化为更高准确率。

论文公式与 released code 实现差异:公开 repo 没有包含 mid-training / SFT / DPO / GRPO 训练代码、训练 launch script、数据生成 pipeline 或 Local/Global Verifier 的实现文件;代码搜索中 GRPOlocal verifierglobal verifier 没有命中实现。因此下面的 training loss 解释来自论文;source-code-grounded pseudocode 只能覆盖 released inference/evaluation stack,不能声称复现训练过程。

3.6 Heavy-duty reasoning mode:Local Verifier + Global Verifier

H1 的核心是 verification-centric reasoning。Local Verifier 针对 step-level:标准 ReAct agent 容易沿着模型最高概率路径前进,难题上会落入习惯性思路;Local Verifier 鼓励 agent 更彻底探索并从环境收集反馈,避免把探索退化为反复确认自身偏好。Global Verifier 针对 trajectory-level:利用“verification often easier than generation”的不对称性,整理完整证据链;若证据不足,就要求 agent resample 或补全 reasoning chain,而不是提前提交答案。在可控 compute budget 下,系统选取证据最完整、最可靠的答案。

3.7 Released code-grounded pseudocode

async def run_mirothinker_main_agent(orchestrator, task_description, system_prompt, is_final_retry=False):
    max_turns = orchestrator.cfg.agent.main_agent.max_turns
    max_attempts = max_turns + EXTRA_ATTEMPTS_BUFFER
    turn_count, total_attempts = 0, 0
    message_history = [{"role": "user", "content": task_description}]
    tool_definitions = await orchestrator.get_tool_definitions()
 
    while turn_count < max_turns and total_attempts < max_attempts:
        turn_count += 1
        total_attempts += 1
        response_text, should_break, tool_calls, message_history = await orchestrator.answer_generator.handle_llm_call(
            system_prompt=system_prompt,
            message_history=message_history,
            tool_definitions=tool_definitions,
            turn_count=turn_count,
        )
        boxed = extract_boxed_answer(response_text)
        if boxed:
            orchestrator.intermediate_boxed_answers.append(boxed)
        if should_break:
            break
        if not tool_calls:
            should_break_loop = await maybe_generate_or_retry_without_tools(response_text)
            if should_break_loop:
                break
            continue
        for call in tool_calls:
            tool_result = await orchestrator.tool_executor.execute_single_tool_call(call)
            message_history.append(format_tool_result_for_llm(tool_result))
 
    reached_max_turns = turn_count >= max_turns
    return await orchestrator.answer_generator.generate_and_finalize_answer(
        system_prompt=system_prompt,
        message_history=message_history,
        tool_definitions=tool_definitions,
        turn_count=turn_count,
        task_description=task_description,
        reached_max_turns=reached_max_turns,
        is_final_retry=is_final_retry,
    )
def build_effective_context(history, keep_tool_result=5, max_tokens_per_observation=None):
    effective = []
    recent_start = max(0, len(history) - keep_tool_result)
    for i, (thought, action, observation) in enumerate(history):
        if i >= recent_start:
            obs = truncate_tokens(observation, max_tokens_per_observation)
            if obs.was_truncated:
                obs.text += "\n[Result truncated]"
        else:
            obs = None
        effective.append({"thought": thought, "action": action, "observation": obs})
    return effective
async def execute_research_tool_call(tool_executor, tool_name, arguments):
    arguments = tool_executor.fix_tool_call_arguments(tool_name, arguments)
    query = tool_executor.get_query_str_from_tool_call(tool_name, arguments)
    if query and tool_executor.is_duplicate_query(tool_name, query)[0]:
        return {"rollback": True, "reason": "duplicate query"}
    raw_result = await tool_executor.execute_single_tool_call(tool_name, arguments)
    processed = tool_executor.post_process_tool_call_result(tool_name, raw_result)
    if tool_executor.should_rollback_result(tool_name, processed):
        return {"rollback": True, "result": processed}
    return tool_executor.format_tool_result_for_llm(processed)
def grpo_update_from_paper(policy, reference_policy, prompts, verifier, beta0, beta_ent, tau):
    # Paper-level abstraction only: the public repo does not release the GRPO trainer.
    trajectories = policy.rollout_group(prompts, group_size=G)
    rewards = [alpha_c * verifier.correct(h) - alpha_f * verifier.format_penalty(h) for h in trajectories]
    mean_reward = torch.tensor(rewards).mean()
    advantages = torch.tensor(rewards) - mean_reward
    loss_terms = []
    for h, adv in zip(trajectories, advantages):
        logp = policy.log_prob(h)
        token_kl = policy.token_kl(reference_policy, h)
        dynamic_beta = beta0 + beta_ent * ((adv < 0) & (logp.token_values < tau)).float()
        loss_terms.append(-(adv * logp.sequence_value - (dynamic_beta * token_kl).sum()))
    return torch.stack(loss_terms).mean()

Code reference: main @ 370f9836 (2026-04-13) — pseudocode and mapping based on this commit

Paper ConceptSource FileKey Class/Function
ReAct-style main agent loopapps/miroflow-agent/src/core/orchestrator.pyOrchestrator.run_main_agent
Final answer generation / retry / fallbackapps/miroflow-agent/src/core/answer_generator.pyAnswerGenerator.generate_and_finalize_answer, handle_context_management_no_fallback
Tool execution, duplicate query, result rollbackapps/miroflow-agent/src/core/tool_executor.pyToolExecutor.execute_single_tool_call, should_rollback_result
Tool registry / MCP server constructionapps/miroflow-agent/src/config/settings.pycreate_mcp_server_parameters, expose_sub_agents_as_tools
Benchmark execution harnessapps/miroflow-agent/benchmarks/common_benchmark.pyBenchmarkEvaluator.run_parallel_inference, CommonBenchmark.run_evaluation
BrowseComp evaluation launchapps/miroflow-agent/scripts/run_evaluate_multiple_runs_browsecomp.shNUM_RUNS=3, AGENT_SET=single_agent_keep5, MAX_CONTEXT_LENGTH=262144, TEMPERATURE=1.0
Context retention configapps/miroflow-agent/conf/agent/single_agent_keep5.yamlmain_agent.max_turns=600, keep_tool_result=5, context_compress_limit=5
Training pipeline / Local & Global Verifier未在 released repo 中找到论文描述;公开 repo 未释放 trainer/verifier implementation

4. Experimental Setup (实验设置)

Datasets / benchmarks. 作者评估两类 benchmark。Agentic benchmarks 包括 BrowseComp、BrowseComp-ZH、Humanity’s Last Exam (HLE)、GAIA、xbench-DeepSearch-2510、SEAL-0、DeepSearchQA;professional-domain benchmarks 包括 FrontierSci-Olympiad、SUPERChem (text only)、FinSearchComp (T2/T3)、MedBrowseComp。论文明确给出三个额外规模信息:GRPO 训练期使用 BrowseComp-200 challenging subset 做快速验证;Local Verifier ablation 使用 BrowseComp hard subset 的 295 questions;Long Report Evaluation 使用 DeepResearchEval 自动生成的 50 deep research queries。其余 benchmark 的 full sample count 论文未详细说明,released repo 也未随仓库包含 benchmark data 文件。

Baselines. Agentic benchmark 表中比较 Qwen3.5-397B、Tongyi-DeepResearch-30B、GLM-5.0、Minimax-M2.5、DeepSeek-V3.2、Kimi-K2.5、Seed-2.0-Pro、OpenAI-GPT-5、OpenAI-GPT-5.4、Gemini-3.0-Pro、Gemini-3.1-Pro、Claude-4.5-Opus、Claude-4.6-Opus。Long-report 还比较 Grok Deep Research、Manus-1.6-Max Wide Research、Doubao Deep Research、Qwen-3.5-Plus Deep Research、Claude-Opus-4.6 Research、MiniMax-M2.5 Research、GLM-5 Agent、Kimi-K2.5 Deep Research、Gemini-3.1-Pro Deep Research、ChatGPT-5.4 Deep Research。

Metrics / protocol. 主指标是 benchmark score / accuracy / Pass@1;Long Report Evaluation 分 Report、Factuality、Overall;Local Verifier ablation 报 Pass@1 与 Steps。所有 benchmark 用 straightforward ReAct-style agent 评估,以直接反映 MiroThinker 模型能力。高方差 benchmark 做 次独立 trial 并报告 avg@k:Table 1 对 BrowseComp、BrowseComp-ZH、HLE、DeepSearchQA 用 avg@3,对 GAIA、xbench-DeepSearch-2510、SEAL-0 用 avg@8;Table 2 对 FinSearchComp、MedBrowseComp 用 avg@3,对 FrontierSci-Olympiad、SUPERChem 用 avg@8。GAIA、WebWalkerQA、DeepSearchQA、BrowseComp、BrowseComp-ZH 由 gpt-4.1-2025-04-14 judge;HLE 按 official protocol 用 o3-mini-2025-01-31

Model / training / evaluation config. MiroThinker-1.7 基于 open-source Qwen3 MoE models;论文强调 MiroThinker-1.7-mini 只有 3B activated parameters。论文未给出训练 GPU type/count、learning rate、batch size 或完整训练 step 数;released repo 也没有训练 launch/config,因此这些 training hyperparameters 不能补写。评估侧的论文配置是 T_\max=200,BrowseComp/BrowseComp-ZH/DeepSearchQA 为 T_\max=300R_\max=5,context retention 。released evaluation scripts 默认 NUM_RUNS=3MAX_CONTEXT_LENGTH=262144MAX_CONCURRENT=10PASS_AT_K=1TEMPERATURE=1.0,并使用 AGENT_SET=single_agent_keep5;对应 config 当前写 max_turns=600keep_tool_result=5

5. Experimental Results (实验结果)

Figure 1 解读:这张 teaser 汇总 MiroThinker-H1 与 frontier agents / agentic foundation models 的横向比较。最重要的信息是 H1 在 BrowseComp、BrowseComp-ZH、GAIA、SEAL-0 等 open-web research / reasoning tasks 上达到或超过强 proprietary systems,同时 MiroThinker-1.7-mini 以更小 activated parameters 保持较强竞争力。

5.1 Main agentic benchmarks

ModelBrowseCompBrowseComp-ZHHLEGAIAxbench-DeepSearch-2510SEAL-0DeepSearchQA
Seed-2.0-Pro77.382.454.249.577.4
OpenAI-GPT-554.965.035.276.475.051.479.0
Claude-4.6-Opus84.053.191.3
MiroThinker-1.7-mini67.972.336.480.357.248.267.9
MiroThinker-1.774.075.342.982.762.053.072.1
MiroThinker-H188.284.447.788.572.061.380.6

关键结论:MiroThinker-H1 在 BrowseComp 上 88.2,超过 Gemini-3.1-Pro 的 85.9 与 Claude-4.6-Opus 的 84.0;在 BrowseComp-ZH 上 84.4,超过 Seed-2.0-Pro 的 82.4;在 GAIA 上 88.5,比 OpenAI-GPT-5 的 76.4 高 12.1 points;在 SEAL-0 上 61.3,是表中最高;在 xbench-DeepSearch-2510 上 72.0,接近 OpenAI-GPT-5 的 75.0。

5.2 Professional-domain benchmarks

ModelFrontierSci-OlympiadSUPERChem (text only)FinSearchComp (T2/T3)MedBrowseComp
Qwen3.5-397B60.649.660.847.9
Seed-2.0-Pro74.053.070.2
GPT-5.2-high77.158.073.8
Claude-4.5-Opus71.443.266.2
Gemini-3-Pro76.163.252.7
Kimi-K2.567.8
MiroThinker-1.7-mini67.936.862.648.2
MiroThinker-1.771.542.167.954.2
MiroThinker-H179.051.373.956.5

H1 在 FrontierSci-Olympiad 得到 79.0,高于 GPT-5.2-high 的 77.1 与 Gemini-3-Pro 的 76.1;在 FinSearchComp 得到 73.9,略高于 GPT-5.2-high 的 73.8;在 MedBrowseComp 得到 56.5,是表中最高。SUPERChem 上 Gemini-3-Pro 的 63.2 仍领先,H1 为 51.3。

5.3 Long report evaluation

ModelReportFactualityOverall
Grok Deep Research57.458.057.7
Manus-1.6-Max Wide Research53.676.465.0
Doubao Deep Research65.865.865.8
Qwen-3.5-Plus Deep Research62.473.668.0
Claude-Opus-4.6 Research69.966.268.0
MiniMax-M2.5 Research62.276.469.3
GLM-5 Agent66.072.769.4
Kimi-K2.5 Deep Research76.064.170.0
Gemini-3.1-Pro Deep Research72.373.372.8
ChatGPT-5.4 Deep Research76.485.581.0
MiroThinker-1.7-mini75.478.476.9
MiroThinker-1.776.578.577.5
MiroThinker-H176.879.178.0

Long report 结果显示 H1 在 Report 分项 76.8 为最高,但 Overall 78.0 仍低于 ChatGPT-5.4 Deep Research 的 81.0;主要差距在 Factuality,ChatGPT-5.4 为 85.5,H1 为 79.1。

5.4 Interaction efficiency and verification ablations

Figure 6 解读:箭头从 MiroThinker-1.5-30B 指向 MiroThinker-1.7-mini,所有轨迹都往左上移动,表示性能更高、平均交互轮数更少。论文文本总结为:五个 benchmark 上约减少 43.0% rounds,同时保持更好 performance;HLE 尤其明显,性能提升 17.4%,rounds 减少 61.6%。这支持作者的假设:interaction scaling 需要先提高 step quality,而不是单纯拉长 trajectory。

Local Verifier 在 BrowseComp hard subset(295 questions)上的 ablation:MiroThinker-1.7 的 Pass@1 为 32.1,Steps 为 1185.2;MiroThinker-H1 w/ Local Verifier Only 的 Pass@1 为 58.5(+26.4),Steps 为 210.8(-974.4)。步骤数降到约六分之一不是显式优化目标,而是局部验证让错误路径更早被纠正的副产物。

Figure 7 解读:BrowseComp 上 H1 的 token/compute scaling 接近 log-linear;16× compute(论文称为所有 benchmark 默认 budget)准确率达到 85.9,扩到 64× 提升到 88.2。Global Verifier 对 search-intensive tasks 的收益最大:BrowseComp 相比 MiroThinker-1.7 提升 +14.2,SEAL-0 提升 +8.3;对 challenging reasoning tasks 也有效,FrontierSci-Olympiad 提升 +7.5,HLE 提升 +4.8。

5.5 Limitations / caveats

作者正文没有系统展开 limitations,但公开材料体现出几个实用边界。第一,MiroThinker-H1 是 verification-centric heavy-duty mode,README 中称其为 proprietary agent;公开权重主要是 MiroThinker-1.7 与 MiroThinker-1.7-mini。第二,released GitHub 仓库提供 inference/evaluation/trace tooling,但没有训练代码、训练数据、GRPO trainer、Local/Global Verifier implementation,因此训练细节不能从代码复现。第三,benchmark evaluation heavily depends on LLM-as-a-Judge(如 gpt-4.1-2025-04-14o3-mini-2025-01-31)和多次 trial 平均,复现时需要相同 judge/model/API 环境与相同 benchmark splits。