Spend Less, Reason Better: Budget-Aware Value Tree Search for LLM Agents

Paper: arXiv:2603.12634 Code: none — no public official code is documented; pseudocode below is paper-derived, not a released implementation.

1. Motivation (研究动机)

现有 LLM Agent 的 test-time scaling 往往默认「算力越多越好」,把 token budget 和 tool-call budget 当成可以粗放消耗的资源:并行采样会同时跑很多完整 trajectory,但它无法在中途判断某条路径是否已经陷入重复搜索、错误前提或 dead-end,因此经常把外部搜索调用和生成 token 浪费在低收益分支上。论文把这个问题具体化为:在多跳问答这类需要连续检索、推理、再检索的任务中,agent 不仅要答对,还要在严格的 tool / token 限额内把预算花在最可能带来信息增益的步骤上。

更早的 budget-aware 方法主要有两类不足。第一类依赖 fine-tuning 或额外策略学习,把「省预算」内化进模型策略,但训练成本高,且不一定能迁移到动态 tool-use agent。第二类是 trajectory-level heuristic,例如给 prompt 加预算提醒、或在整条轨迹失败后再停止;这类方法只能在完整路径层面处理成本,不能在每个环境反馈后及时剪掉坏分支。论文认为真正缺失的是 step-level budget control:每执行一次 reasoning step 或 tool call 后,立即评估这个步骤是否产生了边际信息增益,并据此决定继续深入、横向换路,还是尽快收束生成答案。

这个问题值得研究的原因在于,多跳 agent 的主要成本往往来自外部交互而不是模型输出本身。论文 Appendix B 的成本估计显示,假设 search API 每次 0.025/0.100;而 GPT-OSS-20B 的最大 token 成本只有 0.00176/0.00108/0.00432。换言之,如果 agent 能少走无效搜索路径,就能直接降低部署成本、延迟和 rate-limit 压力。

Figure 1 解读:左侧的 parallel sampling 把预算平均撒到多条完整 trajectory 上,缺点是每条路径即使早期已经低价值,也会继续消耗预算;右侧的 BAVT 把 reasoning 过程组织成树,每个节点带有 step-level value,并随着剩余预算下降从广泛探索切换到集中 exploitation。这张图直观说明了论文的核心问题:不是「给 agent 更多调用次数」,而是「在有限调用次数内选择最该扩展的中间状态」。

2. Idea (核心思想)

BAVT 的核心洞察是:预算受限的 agent 推理不应被看作若干条独立 rollout 的投票,而应被看作一个带成本约束的动态搜索树。每个中间状态都是一个节点,每次 reasoning / tool call 是一条边;模型既扮演 Generator 生成下一步,也扮演 Critic 对新节点的边际信息增益打分。

关键创新可以概括为三点:第一,用 test-time value tree 替代独立 parallel sampling,让多条候选路径共享搜索前沿;第二,用 residual value predictor 预测 ,即最近一步相对父节点带来的信息增量,而不是直接让 LLM 给绝对分数;第三,用剩余预算比例 的倒数作为 exponent,把节点值转成采样分布,使策略在预算充足时更平滑、更探索,在预算枯竭时自动变尖锐、更贪心。

它和 Tree-of-Thought / LATS 这类 search-based agent 的根本差异在于,后者通常追求 accuracy-driven search,默认搜索 horizon 足够长;BAVT 则把 tool/token budget 显式放进节点选择公式,让搜索几何随剩余资源改变。它和普通 self-consistency / parallel sampling 的差异也很直接:parallel sampling 只在最后投票,BAVT 在每个中间步骤就可以 widen、deepen 或 answer,从而避免坏轨迹跑完整条路径。

3. Method (方法)

3.1 总体框架:Budget-Aware Value Tree

论文将 agent 推理形式化为 resource-constrained deterministic decision process(资源受限确定性决策过程) 。状态 包含原始 query、历史 action、内部 reasoning trace 和外部环境 observation;动作 可以是内部推理生成,也可以是外部工具调用;转移函数 把新 action 与 observation 追加进上下文。预算不是静态约束,而是动态状态: 每个动作有成本: 其中成功工具调用的 ,否则为 是该步输出 token 数。预算更新为: 也就是: 搜索目标不是直接选一条 trajectory,而是在预算约束下优化搜索策略 ,从若干竞争分支中找到最终答案 。parallel sampling 的 baseline 是在同一总预算 下运行 条独立 trajectory,并用 majority vote: BAVT 则把预算分配决策下沉到每个节点扩展步骤。

Figure 2 解读:图中 a) 展示预算感知扩展:剩余预算高时,节点选择分布较平,鼓励搜索多个方向;剩余预算低时,分布集中到高 value 节点。b) 展示 test-time scaling tree:节点是中间状态,边是 tool call 或 reasoning action,agent 不再被单条线性轨迹困住。c) 展示同一个 LLM backbone 的 Actor-Critic 双角色:Generator 负责产生下一步,Critic 负责评价新节点的 step-level progress。三部分连在一起后,BAVT 才能在「多分支搜索」和「严格预算收束」之间动态切换。

3.2 Test-Time Scaling Tree

BAVT 初始化一个 root node ,其中 是用户问题。之后维护一棵搜索树 和候选节点池 。树节点对应中间 reasoning state 或环境 observation,边对应模型产生的 action。Generator 每次读取当前节点及动态 structural instruction,生成一个 action:可能是搜索查询、逻辑推理、进一步分解,也可能是最终答案。

这一设计的直觉是:多跳问答的失败通常不是最后一步才出现,而是在中途某个事实链条就走偏了。线性 agent 一旦沿着错误前提继续执行,后续检索和推理都会围绕错误前提自洽展开;而树结构允许系统保留多个前沿,在某条路径 value 下降时转向 sibling 或 cousin branch,不必重新开始整条 trajectory。

3.3 Step-Level Value Estimation:残差价值而非绝对自评分

BAVT 使用同一个 LLM backbone 作为 Critic,对新生成的 child node 估计最近一步的 residual score / information delta 。如果父节点 value 是 ,则 child value 更新为: 其中 把值限制在归一化范围内。Appendix B 说明,Critic 原始分数是 的离散刻度,再除以 10 归一化到 被 clip 到 ;terminal confidence threshold 是

残差评分比绝对评分更适合 agent search。LLM self-evaluation 容易对幻觉或低质量 reasoning 给出虚高绝对分数;而 BAVT 问的是「这一步相对上一步有没有带来新证据或缩小不确定性」。如果 action 只是重复检索、得到无关观察,;如果 action 得到关键桥接事实,。这使 Critic 更像 process verifier,而不是一个事后 answer judge。

3.4 Value-Guided Structural Instruction:Answer / Widen / Deepen

Critic 的 value 不只是排序分数,还直接决定下一步结构指令。给定 terminal threshold

  • Answer Generation:若 ,认为证据充分,要求模型停止工具调用并合成最终答案。
  • Search Widening:若 ,说明最近 action 没有正信息增益,要求模型换一个 query 或 reasoning line,避免重复原路径。
  • Search Deepening:若 ,说明路径有正增益但未达到终止阈值,要求模型继续沿该方向深入一步。

Appendix C 给出了对应 prompt。Generator 的基础规则是每轮只能做一个 action:要么调用一个工具,要么提交一行 <answer>FINAL_ANSWER</answer>。Critic prompt 则强制只输出 JSON {"delta": 0} 这类 delta,并要求对弱证据保守、对重复动作给非正增益。

3.5 Budget-Aware Node Expansion:用剩余预算调整探索/利用

BAVT 的节点选择公式把预算显式注入 search geometry。首先定义有效剩余预算比例: 动态 exponent 是: 对于候选池中每个节点 ,用累计 value 计算未归一化权重: 然后归一化为扩展概率: 当预算充足时,,采样概率大致与 value 成正比,仍保留多方向探索;当预算下降时, 增大,value 差异被指数放大,分布趋向 one-hot,高 value 分支被强制优先扩展。与 UCB 不同,这里不是为无限 horizon 的 asymptotic regret 做平衡,而是为有限预算下的及时收束服务。

3.6 Backstop、回传与收束

完整算法还有两个实用细节。第一,如果已经发现 terminal answer node,BAVT 会把该答案加入集合 ,并触发 bottom-up value backpropagation,平滑更新树中相关节点的 value。第二,如果预算快耗尽但还没有答案,触发 budget backstop:从候选池中选 最大的节点 ,强制 synthesize answer,避免预算用尽后没有任何输出。Appendix B 给出的 backstop threshold 是 ,即当 token ratio 低于 20% 或 tool budget 用尽时触发兜底回答。

3.7 论文伪代码(无官方 released code)

代码搜索未找到官方开源实现(checked: arXiv/PDF/Hugging Face 页面、title+github、BAVT+github、arXiv ID+github、first-author/org candidate repos、GitHub repo/code search;mlbrilliance/bavt-budget-aware-agent 是 2026-05-10 创建的非作者第三方/不相关 ML Intern 仓库,未作为官方实现记录)。以下伪代码基于论文 Algorithm A、Appendix B/C 与公式重写,不是 released code 映射。

3.7.1 Budget-aware node selection

import torch
 
 
def budget_aware_node_probs(values, tool_left, token_left, tool_budget, token_budget):
    """values: tensor in [0.1, 1.0], one scalar per active candidate node."""
    r_tool = tool_left / max(tool_budget, 1)
    r_token = token_left / max(token_budget, 1)
    r_t = max(min(r_tool, r_token), 1e-6)
    alpha_t = 1.0 / r_t
    weights = torch.clamp(values, min=0.1, max=1.0).pow(alpha_t)
    return weights / weights.sum(), alpha_t

3.7.2 Residual critic value update and structural instruction

import torch
 
 
def update_value_and_instruction(parent_value, critic_delta, tau=0.8):
    delta = torch.clamp(torch.tensor(float(critic_delta)), -4.0, 4.0) / 10.0
    child_value = torch.clamp(torch.tensor(parent_value) + delta, 0.1, 1.0).item()
 
    if child_value >= tau:
        instruction = "answer"
    elif child_value <= parent_value:
        instruction = "widen"
    else:
        instruction = "deepen"
    return child_value, instruction

3.7.3 BAVT search loop

import torch
 
 
def bavt_search(root_query, generator, critic, tool_budget=10, token_budget=4000, eta=0.2):
    tree = []
    candidates = []
    answers = []
    root = {"state": root_query, "value": 0.1, "parent": None, "terminal": False}
    tree.append(root)
    candidates.append(root)
    tool_left, token_left = tool_budget, token_budget
 
    while tool_left > 0 and token_left > 0:
        values = torch.tensor([node["value"] for node in candidates], dtype=torch.float32)
        probs, alpha_t = budget_aware_node_probs(
            values, tool_left, token_left, tool_budget, token_budget
        )
        node = candidates[int(torch.multinomial(probs, 1))]
 
        instruction = generator.structural_instruction(node)  # widen / deepen / answer
        action, observation, cost = generator.step(node["state"], instruction)
        tool_left -= cost.tool_calls
        token_left -= cost.output_tokens
 
        child_state = generator.transition(node["state"], action, observation)
        if generator.is_answer(child_state):
            child = {"state": child_state, "value": node["value"], "parent": node, "terminal": True}
            answers.append(child)
        else:
            delta = critic.delta(parent_state=node["state"], child_state=child_state)
            child_value, next_instruction = update_value_and_instruction(node["value"], delta)
            child = {"state": child_state, "value": child_value, "parent": node, "terminal": False}
            candidates.append(child)
        tree.append(child)
 
        if answers:
            generator.backpropagate_values(tree, answers)
 
        if not answers and (tool_left <= 0 or token_left / token_budget <= eta):
            best = max(candidates, key=lambda n: n["value"])
            forced_answer = generator.answer_now(best["state"])
            answers.append({"state": forced_answer, "value": best["value"], "parent": best, "terminal": True})
 
    best_answer = max(answers, key=lambda n: n["value"])
    return generator.extract_answer(best_answer["state"])

3.8 理论保证

论文给出 probabilistic convergence to answer generation。假设存在一条 oracle trajectory ,每次 deepening 至少带来 ;在阈值前 bounding function 保持线性,即 for ;候选池大小有上界 ,value 在 ,exponent 有上界 。则任一候选节点被采样的概率有下界: 从初始状态达到阈值最多需要: 个 oracle progress step。若每次扩展最大成本为 ,初始预算 能支持 次扩展。论文用 Bernoulli coupling 和 Chernoff bound 得到,只要: 就能保证 failure probability 不超过 ,即以至少 的概率到达 的 terminal node。这个定理保证的是「足够预算下会收束到可回答节点」,不是保证答案一定语义正确;语义正确仍依赖 Critic 质量、检索质量和 base model 能力。

4. Experimental Setup (实验设置)

4.1 Datasets 与评测规模

论文使用四个 multi-hop QA benchmark:HotpotQA、2WikiMultihopQA、MuSiQue 和 Bamboogle。作者强调这些任务需要 sequential tool use 和 dynamic information gathering,不能只靠模型参数知识直接回答,适合评估 resource-constrained environment interaction。论文未详细说明本次每个 benchmark 的评测样本数或是否使用子集,因此这里不补写外部数据集总规模,避免把原始数据集规模误当作本文实验规模。

4.2 Models、retrieval 与 baseline

模型覆盖两个架构族:

  • GPT-OSS-20B:reasoning model,具备较强内部 chain-of-thought 和 tool-use 能力。
  • Qwen3-30B-A3B-Instruct-2507:instruct model,偏通用指令跟随。

实现基于 Inspect AI。检索工具沿用 Search-R1 设置,使用 2018 Wikipedia dump 作为知识库,用 E5 dense retriever,每次 search query 固定返回 5 个 passages。Baseline 是 budget-constrained parallel sampling / majority voting:在同一 tool/token 总预算内并行运行尽可能多的独立 trajectory,预算耗尽后对 terminal answers 做 majority vote。

4.3 Budget 与 generation config

三档预算如下:

Budget tierMax tool callsGPT-OSS token limitQwen token limit
Low520001000
Middle1040002000
High2080004000

BAVT 的动态搜索超参数在所有数据集上保持不变:raw critic value scale ,归一化 ,terminal threshold ,backstop threshold ,每次调用最多输出 512 tokens。论文没有 released code,因此这些训练/运行配置来自 arXiv source main.tex Appendix B,而非官方 launch script。

Generation settings 使用各模型官方默认:Qwen instruct 采用 temperature 0.7、top- 0.8、top- 20;GPT-OSS reasoning model 采用 temperature 1.0、top- 1.0、top- 0。评估指标是 Exact Match (EM) 和 F1:EM 衡量答案字符串是否完全匹配,F1 衡量答案 token-level overlap。

5. Experimental Results (实验结果)

5.1 平均 performance-efficiency frontier

Figure 3 解读:四个子图分别汇总 OSS-20B / Qwen3-30B 在 EM 和 F1 上随 tool budget 增长的平均表现。BAVT 的曲线在每个 budget 点都高于 parallel sampling baseline。最关键的结论是,OSS-20B 上 BAVT Low tier 仅用 5 次 tool call 就达到平均 EM 0.338,超过 baseline High tier 20 次 tool call 的 0.334;Qwen 上 baseline 从 Low 到 High 几乎不涨(平均 EM 0.289 到 0.293),但 BAVT Low 已达到约 0.386。

5.2 OSS-20B reasoning model:BAVT 放大 reasoning trajectory 的有效性

Figure 4 解读:OSS-20B 的 baseline 会随预算增加而改善,说明 reasoning model 的多样化 rollout 确实能从 parallel sampling 中受益;但它仍会让错误 premise 的 trajectory 跑到结束。BAVT 在每个数据集、每个预算档都更高,尤其 Low budget 下平均 EM 从 baseline 0.194 提升到 0.338。图中可见 Bamboogle 的 Low EM 从 0.31 提升到 0.49,2Wiki 的 Low EM 从 0.13 提升到 0.37,说明 step-level verification 对检索链路很关键。

OSS-20B 图中标注的主要数值如下(每格为 baseline → BAVT):

Dataset / MetricLowMiddleHigh
HotpotQA EM0.23 → 0.360.34 → 0.400.37 → 0.43
HotpotQA F10.33 → 0.500.47 → 0.550.50 → 0.58
2Wiki EM0.13 → 0.370.21 → 0.410.38 → 0.45
2Wiki F10.17 → 0.470.26 → 0.520.47 → 0.55
MuSiQue EM0.10 → 0.150.14 → 0.190.17 → 0.20
MuSiQue F10.14 → 0.230.20 → 0.270.24 → 0.30
Bamboogle EM0.31 → 0.490.38 → 0.550.42 → 0.54
Bamboogle F10.44 → 0.640.52 → 0.670.58 → 0.65

5.3 Qwen3-30B instruct model:打破 mode-collapse plateau

Figure 5 解读:Qwen3-30B 是 instruct model,baseline 的主要问题不是预算不够,而是生成多样性低、过早给出确定答案,导致更多 parallel rollout 也重复同类失败路径。BAVT 的 widen 指令在 时显式要求换 query 或换 reasoning line,因此能人为制造横向探索,显著提高上限。论文同时指出,BAVT 在更高预算下也会变平,说明 instruct model 最终受限于 base model 汇总多文档证据的能力。

Qwen3-30B 图中标注的主要数值如下(每格为 baseline → BAVT):

Dataset / MetricLowMiddleHigh
HotpotQA EM0.34 → 0.420.34 → 0.430.34 → 0.43
HotpotQA F10.48 → 0.560.48 → 0.580.49 → 0.58
2Wiki EM0.35 → 0.470.37 → 0.480.38 → 0.47
2Wiki F10.45 → 0.560.46 → 0.570.47 → 0.57
MuSiQue EM0.11 → 0.180.12 → 0.200.12 → 0.21
MuSiQue F10.22 → 0.290.23 → 0.310.23 → 0.32
Bamboogle EM0.35 → 0.480.33 → 0.500.34 → 0.47
Bamboogle F10.49 → 0.630.47 → 0.650.49 → 0.63

5.4 Ablation:三组件缺一不可

Ablation 使用 OSS-20B、Middle budget。结果显示,单纯树结构不但不够,还会因为随机扩展分散预算而退化;step-level value 能明显恢复并超过 baseline;budget-aware exponent 是最终达到最优的关键。

TreeStep-Level ValueBudget-Aware SelectionHotpotQA EM/F12Wiki EM/F1MuSiQue EM/F1Bamboogle EM/F1AVG EM/F1
×××0.344 / 0.4690.205 / 0.2610.142 / 0.2030.381 / 0.5170.268 / 0.363
××0.243 / 0.3400.124 / 0.1630.100 / 0.1400.392 / 0.4780.215 / 0.280
×0.356 / 0.4810.265 / 0.3320.158 / 0.2240.456 / 0.5750.309 / 0.403
0.402 / 0.5520.413 / 0.5170.186 / 0.2720.552 / 0.6660.388 / 0.502

具体解释:tree-only 的 AVG EM 只有 0.215,低于 baseline 0.268,说明没有 value 的树会把预算切碎到大量低价值分支;加入 step-level value 后 AVG EM 到 0.309,说明 Critic 能把搜索导向有证据增益的节点;再加入 budget-aware selection 后 AVG EM 到 0.388,说明仅有静态 value 不够,还必须在预算降低时用 强制从探索转向 exploitation。

5.5 Limitations(限制)与结论

论文承认两类限制。第一,双角色 prompting 会产生额外 inference overhead:每个中间状态都用主 LLM backbone 做 Critic,会消耗 token 和 latency;未来可用轻量 Process Reward Model 或直接训练 value head 来降低成本。第二,当前评估集中在 knowledge-intensive multi-hop QA;若迁移到 BrowseComp、OSWorld、WebArena 这类长时程交互环境,会遇到不可逆动作、partial observability 和 delayed reward,需要更复杂的 temporal credit assignment 与 state-space exploration。

整体结论是,BAVT 证明了在 agent 推理中「聪明分配预算」可以优于「盲目增加预算」。在 OSS-20B 上,Low-budget BAVT 已超过 High-budget baseline;在 Qwen instruct model 上,BAVT 通过 widen/deepen/answer 指令显式打破低多样性 plateau。它的贡献不是训练出一个更强模型,而是在 inference-time 把搜索树、step-level critic 和 budget-dependent sampling 组合成一个可复用的资源控制框架。