TURA
AI Search · 工具调用 · arXiv 2508.04604v2

TURA:把「查不到的实时信息」接到工具上,再用 DAG 把它们并行办掉

RAG 只能读静态网页快照:机票余票、酒店库存这类必须现场调用才会产生的信息,它从结构上就拿不到。 TURA 把网页检索也包装成一种 MCP Server,和各类 API 放在同一个池子里——先用意图分解 + 索引增强选出该用哪个,再用 DAG 把互不依赖的调用并行发出去,最后交给一个蒸馏过的 4B 小模型逐步执行工具。 代价是:整个离线评估建立在一个从生产日志构建的内部基准 MCP-Bench 上,而网页检索被放进了同一个检索池里。

Zhejun Zhao, Yuchen Li, Alley Liu 等(前三位贡献相同)· 百度 arXiv 2508.04604v2 ↗ MCP-Bench 仓库 ↗

arXiv v2 于 2026-03-12 提交,晚于笔记日期 2025-08-15;表号与结论以 v2 为准。

TL;DR · 30 秒抓住核心

论文把 AI 搜索定义成一个带延迟上限的组合优化:选一组 MCP Server 调用策略 π,在 L(π) ≤ τmax 下最大化答案质量 Q(A)(Eq.1)。网页搜索本身也被当成一个 MCP Server,于是静态检索和动态 API 走同一套规划与执行。

三段各解决一个卡点:意图分解 + 为每个 Server 合成查询来扩充索引,把「用户口语 → 开发者文档」的词汇鸿沟垫平(Table 4/5);DAG 规划器只在判定为复杂查询时被调用,简单查询走单任务方案(§4.3);蒸馏执行器训练时学完整的 thought + action,上线时连 thought 一起生成以减少 token 与延迟(§4.4.2)。

最强的信号来自蒸馏:Qwen3-4B Distilled 工具调用准确率 88.3%,比它的基座 70.1% 高 18.2 个百分点,比教师 Deepseek-V3(671B-A37B)的 82.4% 高 5.9 个百分点;P80 延迟 750ms,是基座 2200ms 的 65.9% 降幅(Table 7)。但端到端 Table 1 的对比对象只是 LLM + RAG / Dynamic RAG / Tool-Agent,没有 "TURA 去掉蒸馏" 这一行,所以 Table 1 的差距里,蒸馏占多少、规划与检索占多少,论文没有拆分。

88.3%
Qwen3-4B Distilled 工具调用准确率
基座 70.1% / 教师 82.4% / GPT-4o 81.7%(MCP-Bench)
750ms
每步平均 P80 延迟(Qwen3-4B Distilled)
基座 2200ms;教师 8700ms,是它的 11.6 倍
0.8289
Full TURA 的 Recall@5
无索引增强 0.7500 / 无查询分解 0.4530(NQ = 20)
01

RAG 的盲区不是「召回不好」,而是答案根本不在索引里

读完这节应能说清:为什么更强的检索模型救不了实时查询,以及论文把这类查询形式化成了什么。

网页检索读的是预先建好的静态快照。但有一类信息的产生方式就是「现场问一次系统」:某个日期的机票余票、电商数据库里的实时库存、铁路车次在指定日期的时刻表。这些内容在索引时还不存在,召回率再高也召不回来。

"they cannot query a flight booking system for ticket availability on a specific future date or check real-time inventory from an e-commerce database, as this information is only accessible through interactive queries to APIs or databases." §1 Introduction

论文的做法不是给 RAG 打补丁,而是换一个形式化:把所有能力——包括网页搜索本身——都表示成 MCP Server M = {M₁, …, M_N};一次具体的调用组合与顺序记作执行策略 π;目标是

π* = arg maxπ Q(A(π))    subject to    L(π) ≤ τmax
Eq.1 · L(π) 是端到端延迟,Q(A) 是答案质量;单次工具调用不是问题,多步、有依赖、还要压延迟才是问题

这个改写把三类难点一次摆到台面:选哪些 Server(工具选择的语义鸿沟)、按什么顺序与并行度调用(多跳依赖)、用什么模型执行(生产环境的延迟)。后面三节依次对应。

评估基准 MCP-Bench 的规模(§5.1.1):

10,683
查询(95.02% 单意图)
61
MCP Server,10 类
1.533
平均工具调用数(P50=1,P90=3)
1.147
平均 DAG 宽度

多意图查询只占 4.98%(§5.1.1)。推断(依据:数据来自生产日志的自然分布,而 §5.3.2 又单独划出「复杂、多跳」子集才测 DAG——说明这部分是少数派,DAG 的收益只作用在少数查询上)。

02

三路前人方案各有各的天花板,线上指标给出三段台阶

读完这节应能说清:LLM+RAG、Dynamic RAG、Tool-Agent 各自卡在哪,以及它们在人工评测里分别落在什么水平。

LLM + RAG

Deepseek-V3 配百度的检索 API(跳过 rerank 只取原始文档),合成答案,不调用工具。

卡点:索引里没有实时数据,再强的 LLM 也只能复述旧网页。

Dynamic RAG

生成过程中动态决定何时、检索什么,但仍然局限在静态索引。

卡点:检索时机变聪明了,仍然碰不到事务型 API。

Tool-Agent

ReAct 式与 DAG 式 agent,用同一批 MCP Server,但没有 TURA 的统一检索模块与蒸馏执行器。

卡点:能调工具了,但工具选择与执行延迟没做优化。

Table 1 的人工评测呈现出三级台阶(同一基准 MCP-Bench,指标为准确率 / 忠实度):

MethodAccuracy (Human)Faithfulness (Human)
LLM + RAG65.3%72.4%
Dynamic RAG67.2%77.6%
Tool-Agent76.8%81.7%
TURA87.5%96.2%

数据取自 Table 1 的 Human 列。同表的 LLM-as-judge 列:Accuracy 68.1% / 69.5% / 80.4% / 88.3%,Faithfulness 75.0% / 79.4% / 83.9% / 97.1%,顺序同表。

读表提示

这三条基线都不是单独某一个模块的对照

Tool-Agent 同时缺「统一 MCP 检索模块」和「蒸馏低延迟执行器」(§5.1.2 原话:"do not incorporate our unified MCP server retrieval module or our distilled low-latency executor")。所以 Table 1 中 Tool-Agent → TURA 的 +10.7 个百分点,是两个模块合起来的差,不能单独记在 DAG 或蒸馏任一头上。

03

DAG 的价值不是「更好」,而是「同样的成功率先把时间砍掉 44%」

读完这节应能动手算出:一个依赖图里有 k 条并行分支时会省下多少等待时间,以及论文里这条 DAG 具体长什么样。

「北京三日游」被拆成一张有向无环图

论文 §4.3 完整走了一遍 Figure 2 的例子:查询 "Beijing trip June 10-15. Need hotel, 2-3 attractions and things to do."。规划器把子任务定义为 stk = (sq′k, Mk)——一个上下文相关的细化子查询,外加一个在 Mfinal 中选定的 MCP Server;当子任务 b 需要子任务 a 的输出作为输入时,连一条边 (va, vb)。

"the planner identifies that Sub-task4 (Path planner) depends on the outputs of Sub-task2 (Top Attractions) and Sub-task3 (Hotel Booking). … Meanwhile, Sub-task1 (Search Beijing weather) can be executed in parallel as it has no dependencies." §4.3 · 图中的子任务编号即论文 Figure 2 的 Sub-task1–4

路由模型先判断复杂度:简单查询不走 DAG 规划器,直接构造单任务执行计划;只有被判为复杂的查询才调用由 Deepseek-V3 实现的 DAG 规划器(§4.3、§5.1.4)。执行时 orchestrator 沿图遍历,子任务一旦可执行就派给执行器。

Table 6:复杂多跳子集上,并行让延迟从 1650ms 降到 920ms

Table 6 只在 MCP-Bench 中「复杂、多跳、存在并行可能」的子集上比较两种规划方式(成功率 88.9% → 89.1%,+0.2 个百分点)。

Planning MethodSuccess Rate (%)Avg. Latency (ms) ↓
Sequential Plan88.91,650
DAG Plan89.1920

平均延迟降 730ms,相对 Sequential 降低 44.2%(730 / 1650 = 0.4424,与论文 §5.3.2 的 "reduces average latency by 44.2%" 一致)。论文原句是 "This substantial efficiency gain is achieved with no degradation in the execution success rate"——成功率的实际变化是 +0.2 个百分点(88.9 → 89.1)。

交互:并行窗口决定 DAG 能省多少,但省不掉关键路径

并行省的只是「等最慢那条分支」的时间:关键路径不变,其余分支重叠执行,总延迟由最长的那条路径决定。下图把 Figure 2 那张 DAG 搬到一个极简的耗时模型上(四个子任务等长、各为 t),切换规划模式、拖动子任务耗时,观察总延迟与节省比例。

在本模型里,降幅恒等于 1 − 步数 / 4:Figure 2 的 DAG 恒为 1 − 2/4 = 50.0%,全部无依赖恒为 1 − 1/4 = 75.0%,与 t 的取值无关。滑块只改绝对延迟(毫秒),比例的读数不随 t 变。

前两种对应 Figure 2:天气(Sub-task1)单独一条;景点(Sub-task2)、酒店(Sub-task3)各自先跑,然后共同汇入路径规划(Sub-task4)。第三种把 Sub-task4 的依赖人为拆掉,论文没有这个方案,只用来展示上界。

100 ms2000 ms

t 只改绝对毫秒;降低比例不随 t 变(DAG 恒 50.0%,全部无依赖恒 75.0%)。

总延迟 · 自上而下

读数中比例与 t 无关,t 只改绝对延迟。

把 t = 450ms 代入:顺序 = 4 × 450 = 1800ms;Figure 2 的 DAG = 2 × 450 = 900ms,相对顺序执行降低 50.0%(少 900ms);全部无依赖 = 450ms,相对顺序执行降低 75.0%。

手算两组:给定 t 与规划模式,总延迟怎么算JS 与此处同一组整数公式(JS 由 rows 现算最长行长度,手算即 max 行长度),逐位一致

规则(本页自定的示意模型,不是论文的算法):

  • Sequential:4 个任务逐个跑,总延迟 = 4t。
  • DAG(Figure 2):三组互不相等的行是 [天气]、[景点 → 路径]、[酒店 → 路径],各占 t、2t、2t,总延迟 = max(t, 2t, 2t) = 2t——不是 3t;本模型假定 Sub-task4 在两条分支上共用一个执行结果、只跑一次(论文 §4.3 未讨论 S4 被调用多次的情形,这是页面自定的假设)。
  • 全部无依赖:max(t, t, t, t) = t。
  • 「降低比例」= 1 − total(模式) / total(Sequential),百分比保留 1 位小数。

第 1 组:t = 450ms,DAG(Figure 2)
顺序:4 × 450 = 1800 ms
Figure 2:max(450, 450 + 450, 450 + 450) = max(450, 900, 900) = 900 ms
降低比例:1 − 900 / 1800 = 0.5 → 50.0%,少 900ms。

第 2 组:t = 700ms,全部无依赖
顺序:4 × 700 = 2800 ms
无依赖:max(700, 700, 700, 700) = 700 ms
降低比例:1 − 700 / 2800 = 0.75 → 75.0%,少 2100ms。

为什么只有 2×、以及和 Table 6 的关系:关键路径是「景点 → 路径」两步,并行再彻底也要至少 2t,所以 4 个等长子任务的图最多降到顺序的一半。Table 6 的实际比值是 920 / 1650 ≈ 0.5576,高于本模型的 0.5。推断(依据:本模型假设四个子任务等长、除子任务外无其它开销;实际子任务长短不一,且规划、检索等环节有不能并行的固定开销,这两点都可能让实际比值高于关键路径下界)。

04

执行器为什么要变小:大模型每步 8.7 秒,实时搜索等不起

读完这节应能说清:教师轨迹怎么被筛成数据、学生为什么能超过教师,以及线上为什么最后选 4B 而不是最准的 30B。

用 Deepseek-V3 直接做细粒度执行在生产上不可行:每一步决策的上下文包括对话历史、Server 描述,以及论文所说的(未明确是每个 Server 之内还是整个上下文的)"dozens of tool APIs"(§4.4)。Table 7 的数字给出了量级:教师模型每步平均 P80 延迟 8,700ms。

数据是筛出来的,不是攒出来的

教师模型按 ReAct 式三元组 ⟨ot, tht, at⟩ 生成轨迹(观察、思维、动作),然后过两道自动质检(§4.4.1):

Ddistill = Jefficient( Jcorrect( Dexpert ) )
Eq.7 · 外层效率过滤作用在「已正确」的轨迹上

训练用 Qwen3 系列,标准交叉熵损失覆盖 thought + action 的完整 token 序列(Eq.8);上线时 prompt 明确要求直接产出 action、跳过 thought——这就是 "train-with-thought, infer-without-thought"。

学生超过教师,论文的解释是:数据管线 "effectively filters noise and crystallizes optimal reasoning paths into a targeted training dataset"(§5.3.3)。

Table 7:8 个执行器的准确率与延迟

Agent ModelModel SizeTool Calling Acc. (%) ↑Avg. Latency/Step P80 (ms) ↓
GPT-4oN/A81.76,800
Teacher (Deepseek-V3)671B-A37B82.48,700
Qwen3-1.7B1.7B43.51,500
Qwen3-4B4B70.12,200
Qwen3-30B-A3B30B-A3B76.32,600
Qwen3-1.7B Distilled1.7B77.6620
Qwen3-4B Distilled4B88.3750
Qwen3-30B-A3B Distilled30B-A3B88.7760
原文写法 A · §5.3.3 正文

"…while concurrently achieving a 66% reduction in P80 latency (from 2,200ms to 750ms)."

原文写法 B · 用正文给的原始值算

(2200 − 750) / 2200 = 1450 / 2200 = 65.91% → 65.9%,与 66% 相差 0.1 个百分点。页面统一按原表数值计算。

05

检索、规划、执行三段接力,每一段都有可量化的口径

读完这节应能说清:一个查询从进入系统到出答案,各段分别做了什么、在表上对应哪一列。

query q 用户自然语言 ① Intent-Aware Retrieval 分解 → SQ = f(q) Server 索引 = 文档 ∪ 合成查询 多向量 MaxSim(Eq.4) 跨子查询取 max 聚合(Eq.6) → Table 4 / 5 口径 ② DAG Task Planner router 判复杂度 简单 → 单任务方案 复杂 → G = (V, E) 边表示数据依赖 → Table 6 口径 ③ Distilled Executor orchestrator 遍历 DAG A_θ 只在 M_k 内调工具 train thought / infer action Qwen3-4B Distilled → Table 7 口径 M = N 个 MCP Server(含网页搜索) 无依赖子任务并行 答案 A → Q(A) 与 L(π) 三个模块分别对应 RQ2 / RQ3 / RQ4 的消融
流程按 §4.1–§4.4 的文字整理,非论文 Figure 2 的原图重绘;Figure 2 的完整结构见原文。三段的评估口径分别落在 Table 4/5、Table 6、Table 7。

① 意图感知检索:词汇鸿沟靠「给每个 Server 造问题」来垫平

用户说的话和开发者写的工具文档用词不同。论文在离线阶段用生成模型 gLLM-gen 以高温 Thigh > 1.0 为每个 Server 合成一批可能的用户查询 Qisyn,与原始文档拼成 D′i = {Di} ∪ Qisyn,再逐段嵌入(ERNIE)。上线时把每个子查询与 Server 的全部向量做 max cos(Eq.4),跨子查询取最高分聚合(Eq.6),取 top-K。

Retrieval MethodRecall@5 ↑Precision@5 ↑
Dense Retrieval (ERNIE)0.41870.5505
TURA (w/o Augment.)0.75000.8555
TURA (w/o Decomp.)0.45300.5631
TURA (Full)0.82890.9190

两个模块都撤掉哪个更致命,从 Table 4 能直接读出来:

合成查询放多少条也有拐点:Figure 3 显示 Recall@5 在 NQ = 20 时达到峰值,之后进入平台期,论文据此固定 NQ = 20。索引组织方式上,Table 5 比较了三种方案(NQ = 20):Single-Vector 0.7721,Multi-Vector(Queries + Doc)0.8289,Multi-Vector(Queries Only)0.8299。Queries Only 略高 0.0010,论文仍选 Queries + Doc,给出的理由是保留原始文档作为 "safety net"。

Figure 3 的曲线未转录(只有峰值位置这条结论 + 表 5 的 NQ=20 截面);Table 5 的 @5 指标列名在原文写作 P@5。

06

线上 SSR 从 55.1% 到 64.0%,但线上只采样了 103 条查询

读完这节应能说清:线上 A/B 的三个指标各是什么口径、以及论文自身跨表引用时有一处对不上的地方。

Online SystemSSRGSB
LLM + RAG (Legacy)55.1%—
TURA (Ours)64.0% (+8.9%)13% / 86% / 4%

数据取自 Table 2。SSR(Session Success Rate)的口径是「提供满意答案的会话占比」(§5.1.3,引 [7]);GSB 是 TURA 相对线上 LLM + RAG 的人工对比评分,13% Good / 86% Same / 4% Bad,正文称 Same 为 "Satisfactory"。

原文写法 A · Table 2

TURA 的 SSR 单元格是 64.0% (+8.9%),与 §5.2.2 正文 "It increased the Session Success Rate by 8.9%" 并列出现。

原文写法 B · 用两列原始值算

由 55.1% 与 64.0% 计算:绝对差 8.9 个百分点,相对提升 (64.0 − 55.1) / 55.1 = 8.9 / 55.1 = 16.15% → 16.2%。页面不替原文选口径。

Table 3:问题数减少,但表题数字与表内数字对不上

Online SystemTotal IssuesAdvantage RateSSR
LLM + RAG (Legacy)66—55.1%
TURA (Ours)55 (−16.7%)8.7%64.0% (+8.9%)
原文写法 A · Table 3 表题

"Detailed performance analysis showing TURA's 8.7% performance advantage with significantly reduced error rates across all issue categories."(原文未给出 Advantage Rate 的计算口径,8.7% 无法与其他列互相核对。)

原文写法 B · 用两列原始值算

原文未给出 Advantage Rate 的计算口径(§5.1.3、§5.2.2 均未说明)。可查的邻近数字只有:Advantage Rate 8.7% vs SSR 差 64.0 − 55.1 = 8.9 个百分点;TURA 行的 (−16.7%) 与 (+8.9%) 分别对应问题数相对降幅 (66 − 55) / 66 = 16.67% 与 SSR 的绝对差。

正文还给出分类降幅:accuracy −7.1%、content richness −28.6%、content value −17.6%,以及关键失败从 9 降到 4(§5.2.2)。

线上测试的样本与一个跨表引用问题

07

这套账在什么条件下才成立

读完这节应能判断:什么场景直接借鉴没问题,什么场景需要重新验证。

边界一

离线评估全部在一个内部构建的基准上进行

MCP-Bench 来自百度搜索的匿名化生产日志,人工标注(Cohens kappa 0.87),Server 与工具标识被匿名化后公开发布(§5.1.1 原句只承诺 "anonymizing server and tool identifiers",页面不据此推断 service 侧域名或属性也已匿名化)。Table 1/4/5/6/7 的所有对比都在这个基准上,论文没有报告它与公开 benchmark 的交叉结果。

边界二

「网页检索也进检索池」带来的静态查询风险

传统网页检索本身被当作一个 MCP Server(§3:"traditional web retrieval is itself treated as an MCP server")。推断(依据:§4.2 的召回在 top-K 处截断,"selecting the top-K servers",且 Table 4 的 Recall@5 不满 1):搜索引擎若没挤进 top-K,原本纯静态的查询也会失效——论文未单独报告纯静态查询子集上的效果,这个风险有多大无法从表中判断。

边界三

DAG 只对少数复杂查询有意义,且省的是等待不是计算

只有被判为复杂的查询才进 DAG 规划器,简单查询走单任务方案(§4.3);MCP-Bench 中 95.02% 是单意图、平均 DAG 宽度 1.147,Table 6 的 44.2% 延迟降幅只在「复杂多跳、存在并行」的子集上测得,不能外推到全量。并行只压缩关键路径之外的等待,不减少总工具调用本地计算。

边界四

成功的上限被教师与数据管线锁住

训练数据来自教师在「一组具有代表性的子任务」上生成的轨迹(§4.4.1:"For a large set of representative sub-tasks"),再由两道裁判模型筛选。教师无法正确解决的子任务类型,学生也没有对应的正例。推断(依据:Eq.7 的 Ddistill 全部来源于 Dexpert;§5.3.3 把学生超教师解释为数据管线 "filters noise and crystallizes optimal reasoning paths",未讨论管线之外的类型)。

边界五

执行失败、重规划与权限没有在文中给出评估

论文的指标围绕答案质量、忠实度、SSR 与延迟;对 API 失败/超时后的重规划、工具调用的权限与安全,文中没有对应的实验或指标。推断(依据:§5.1.3 列出的评估指标全集不含失败恢复类指标)。

一句话

可迁移的是「统一 Server 池 + 先分解再检索 + 按依赖图并行 + 用生产数据蒸馏小执行器」

其中每一步的可复用性、以及在非百度搜索场景下能拿回多少收益,都要用自己的流量日志重新测——尤其第二块,它依赖教师模型和服务端 API 的具体分布。