DWYS / SEAL — 运行时推理-动作对齐验证

Do What You Say: Steering VLA Models via Runtime Reasoning-Action Alignment Verification · NVIDIA / CMU / U. Utah / U. Sydney · arXiv 2510.16281v2 (2026)

速览
动机
方法·SEAL
核心机制
训练·推理
实验
代码印证
评价与启发
自测

一句话

推理 VLA 模型虽然能生成正确的文本计划,但其动作执行常常"言行不一"——尤其在 OOD 场景。SEAL 提出一种无需重训练的运行时策略引导方法:同时采样多条动作序列,在仿真中前向预测结果,用预训练 VLM (GPT-4o) 验证哪条动作最忠实于模型自身的文本计划,再选择该动作执行。把策略的"动作多样性"从错误来源变为优势来源。

本页可靠性🟢PDF核对🟢代码核对:方法公式与实验数字逐条核对自 PDF 原文 (arXiv:2510.16281v2);运行时流程与 VLM Verifier prompt 核对自仓库 examples/libero/eval_libero_reason_sample.py。解读为学习者视角。
原文:arXiv · 项目页 · 代码仓库:~/projects/dwys(基于 openpi)

速览卡片

内容
标题Do What You Say: Steering VLA Models via Runtime Reasoning-Action Alignment Verification
单位NVIDIA / Carnegie Mellon University / University of Utah / University of Sydney
核心问题Embodied CoT Faithfulness Gap:推理 VLA 文本推理正确,但动作执行偏离计划
核心方法Best-of-N 运行时策略引导 + VLM Verifier (SEAL = Steering for Embodied reasoning-Action aLignment)
Base Model基于 pi0 架构的推理 VLA (pi0-reason),使用 <think>/<act> token 自适应切换
三阶段Hypothesize (采样 K 条动作) → Predict (并行仿真预测结果) → Verify (VLM 评分对齐)
关键结果行为组合任务 +15%;ID 任务 94-97%;Visual-Viewpoint OOD +17%;推理时延 347ms (K=10)
训练开销pi0-reason 微调 20h/8xA100;SEAL 推理阶段无需任何额外训练
特性Training-free · Model-agnostic · 与 Best-of-N / test-time compute scaling 兼容

推理 VLA 为何"言行不一"?

大型 VLA 模型(如 pi0)通过视觉-语言骨干 + 动作头实现通用机器人控制。为解决长时序任务中的累积误差和复杂指令跟随问题,推理 VLA(Reasoning VLA)在动作生成前先产生中间文本计划——这是 LLM 中 Chain-of-Thought 的具身版本。

核心现象

然而,即使文本计划完全正确,生成的动作序列仍可能偏离计划目标:

  • 文本说"抓起字母汤罐头",动作却去抓了旁边的奶油奶酪
  • 在 ID 场景下文本生成准确率 100%,但任务成功率仅 ~90%
  • 随着训练数据规模增大(多样性增加),动作空间更发散,偏离更严重

Embodied CoT Faithfulness Gap

作者将此类比 LLM 中的 "CoT Faithfulness" 问题:

LLM CoT Faithfulness: 推理步骤是否真正反映了产生答案的过程?
Embodied CoT Faithfulness: 文本计划描述的目标是否被后续低层动作可靠实现?

为什么不直接重训练?

  • 先前工作 [10] 已发现:VLM 骨干的文本规划能力(可通过少量数据高效微调) 远强于 动作生成能力(需要大量数据)
  • 直接优化对齐 loss 不可行:环境动力学 P 不可微、动作采样过程不可微
  • 建模"对齐 reward"也很难:需要复杂的上下文语义判断(非简单的 heuristic)
核心洞察:推理能力强 + 动作能力弱 = 文本计划是"免费的"锚点。只需在运行时验证哪个动作样本最忠实于该锚点即可。

与先前运行时引导方法对比

方法验证信号粒度OOD 泛化
V-GPS [16]离线 Q-function固定长度 action chunk弱 (MUSE encoder 泛化差)
RoboMonkey [6]微调 VLM + 合成偏好标签action chunk中 (verifier 未开源)
SEAL (本文)预训练 VLM (GPT-4o)变长 plan-level 动作序列强 (利用 VLM 常识)

SEAL 的关键区别:不是验证单个短 chunk,而是验证整条从当前计划开始到下次 think 的完整动作序列。这自然对应"一个子任务"的粒度。

SEAL 方法概览

SEAL = Steering for Embodied reasoning-Action aLignment。一个三阶段的运行时策略引导框架,无需任何额外训练。

生成新文本计划 l̂r
Hypothesize
采样 K 条变长动作序列
Predict
K 个并行仿真前向执行
Verify
VLM 打分选最优序列
执行选中的动作序列

形式化定义

对齐目标

在每个推理步(文本计划更新后),SEAL 最小化对齐损失:

Lalign(θ; ot, l̂r, lg) = −EP, πθr-vla [ Ralign(ot:t+H, l̂r) ]

其中 Ralign 衡量未来观察 ot:t+H 是否满足文本计划 l̂r 描述的子目标。

两大挑战

  • 直接优化不可行:环境动力学 P 不可微 + 策略采样不可微 → 无法反向传播
  • Reward 建模困难:Ralign 需要复杂语义判断 → 不能用 heuristic 近似

SEAL 的近似解

  • 挑战 1 → 用 Best-of-N 采样 绕过直接优化
  • 挑战 2 → 用 预训练 VLM (GPT-4o) 作为 Ralign 的 proxy

Stage 1: Hypothesize(假设)

从 pi0-reason 模型并行采样 K=10 条候选动作序列:

At = { ât(k) ~ πθr-vla(· | ot, l̂r, lg) }k=1..K

关键特性:

  • 每条序列是自回归生成(不是一次前向),每步动作需要当前观察作为输入
  • 序列长度可变:当模型生成 <think> token 时该序列结束
  • 不同序列可能有不同长度 Hk,对应模型自适应地认为"这个子任务需要多少步"
  • 使用 KV cache 加速批量推理

Stage 2: Predict(预测)

维护 K=10 个向量化仿真环境,与 Hypothesize 阶段交错执行:

  • Hypothesize 生成 ât' → Predict 步进得到 ôt'+1 → 作为下一步的输入
  • 形成紧耦合的 Hypothesize-Predict 循环
  • 仿真提供高保真环境动力学(真实部署时用 world model / digital twin 替代)
  • 所有 K 个环境并行运行

Stage 3: Verify(验证)

利用预训练 VLM (GPT-4o) 作为对齐 reward 的 proxy Rψ

  • 输入:初始 agent-view 图像 I1 + 候选序列最终 agent-view Ît+Hk + 最终 wrist-view + 文本子计划 l̂r
  • 输出:二值分数 Rψ ∈ {0, 1},指示动作结果是否满足计划
  • 选择得分最高的序列执行
异步验证 + Early Exit:由于各序列长度不同、完成时间不同,一旦某序列完成就异步发送给 VLM 验证。一旦有序列通过验证即立即执行,无需等所有 K 条都完成。这大幅降低延迟。

机制 1:推理 VLA 的 <think>/<act> 自适应切换

基于 pi0 架构(PaliGemma VLM + flow-matching action expert),增加推理能力:

  • <think> token:触发文本推理模式,后续 token 解码为文本(交叉熵 loss)
  • <act> token:触发动作模式,后续 token 输入 action head(flow-matching loss)
  • 模型自适应决定何时切换:生成变长动作序列,自然对应子任务粒度
Lr-vla = λreason · Lreason + λact · Lact
Lreason = −log π(ljr | ot, lj-1r, lg)  Lact = −Σ log π(at' | ot', ljr, lg)

λreason = λact = 0.5

机制 2:推理标注管线 (自动)

无需人工标注子任务边界(不同于 OneTwoVLA [8] 需要手动标注):

LIBERO 演示视频
(agent-view, 10fps)
Gemini 2.5 Pro
生成子计划 + 关键时间点
结构化标注
Plans / Done / Now

标注格式(用于训练数据):

Plans: 1. Pick the alphabet soup  2. Place it in the basket  3. Pick the butter  4. Place it in the basket
What I have done: Pick the alphabet soup, Place it in the basket
Now I need to do: Pick the butter

每段标注包含 (l̂jr, t'j):子计划文本 + 该子任务结束的时间步。一个子任务的结束即下一个的开始。

机制 3:VLM Verifier 的 Prompt 设计

GPT-4o 作为 verifier,使用结构化 prompt 引导逐步推理:

  1. 识别目标物体:在初始图像中找到目标物体,描述其位置
  2. 分类判断
    • 抓取任务 → 检查 gripper 是否夹持正确形状(盒/罐)的物体
    • 放置任务 → 检查物体是否在/上目标位置
    • 关闭任务 → 检查物体是否完全关闭
  3. 输出格式Verification: SuccessVerification: Failure
Verifier 失败模式:(1) gripper-object 接触判断不准(wrist-view 对 GPT-4o 是 OOD);(2) 严重遮挡场景下准确率下降。

机制 4:Embodied CoT Faithfulness 的形式化

传统 VLA 的训练目标:

Lvla(θ; D) = Σ −log πθvla(at | ot, lg)

推理 VLA 将此分解为文本生成 + 条件动作生成,但两者并未显式优化对齐

关键洞察:标准 SFT 训练(Eq. 2)只是让模型模仿专家的文本和动作,并没有明确约束"动作结果必须实现文本描述的目标"。对齐 loss (Eq. 3) 是一个额外的、训练时未被优化的目标 → 需要在运行时强制执行。

机制 5:Runtime Scaling Law

增加候选样本数 K 可以直接提升性能(类似 LLM 中 test-time compute scaling):

KID 成功率Compose 成功率推理延迟 (ms)
189%38%147
292%44%167
596%48%246
1097%53%347

延迟分解:Batch Action Sampling 86→184ms (亚线性);VLM Verification 61→163ms (线性)。瓶颈在 VLM 查询时间 (每次 7-10s,但异步执行)。

训练:pi0-reason 模型

架构

  • 骨干:PaliGemma (gemma_2b VLM + SigLIP ViT)
  • 动作专家:gemma_300m action expert (flow-matching)
  • 输入图像:agent-view + wrist-view,分辨率 224x224
  • Prediction Horizon: 16;Action Horizon: 5

训练超参

参数
Training Batch Size128
Training Steps30000
Max Token Length415
λreason / λact0.5 / 0.5
Image Size224 × 224 × 3
GPU8× A100 (~20h) 或 8× H100 (~10h)

三个训练数据集

数据集任务数Episode数用途
LIBERO-10-R10379最小集,基线对比
LIBERO-100-Basket-R16761中等集,技能组合测试
LIBERO-100-R82 (full LIBERO-100)4338最大集,全面评估

所有数据集都通过 Gemini 2.5 Pro 自动标注推理信息。

推理:SEAL 三阶段流程

完整推理循环

  1. 模型生成 <think> → 产出文本计划 l̂r(如 "Now I need to: Pick the alphabet soup")
  2. Hypothesize:从同一模型并行采样 K=10 条动作序列(batch inference with KV cache)
  3. Predict:在 K 个并行 LIBERO 环境中前向执行(每步需要环境给新 observation)
  4. Verify:异步地,每条序列完成(生成 <think>)即发送至 GPT-4o 验证
  5. Early Exit:第一条通过验证的序列即被选中执行在真实/执行环境
  6. 状态同步:将所有并行环境重置为选中序列的最终状态 → 进入下一个 think-act 循环

推理延迟优化

  • Batch sampling:10 条序列仅 ~2.1x 单条的时间(高效 batch + KV cache)
  • 异步 VLM 验证:序列生成和 VLM query 并行进行
  • Early exit:不需要等所有 K 条都完成和验证
  • 总延迟 K=10 时 347ms,低于 RoboMonkey [6] 的 ~520ms

对比:训练与推理开销

组件开销说明
pi0 vanilla 微调~6h / 8xA100无推理标注
pi0-reason 微调~20h / 8xA100含推理标注的 SFT
SEAL 推理+0 训练纯运行时,无额外训练
VLM VerifierGPT-4o API每个推理步 K 次 API 调用(异步)

评测设置

所有实验在 LIBERO 仿真基准上进行,每个任务 50 trials。三类评测:

  • In-Distribution (ID):LIBERO-10 的 10 个长时序任务
  • OOD Robustness:4 种分布偏移变体(语义×2 + 视觉×2)
  • Behavior Composition:新行为组合任务(重组已学技能)

评测协议矩阵

评测块Benchmark / 任务具体设置为什么这样测复现状态
ID 基准LIBERO-10训练集分别为 LIBERO-10-R、LIBERO-100-Basket-R、LIBERO-100-R;每任务 50 trials。确认 SEAL 的 runtime verification 不会牺牲常规分布内成功率。未本地复现;页面基于论文结果。
行为组合LIBERO-10-Compose / Basket-Compose / LIBERO-100-Compose组合已学对象、容器、动作阶段,构造训练中未见的行为组合。检验“说的推理”和“做的动作”是否能在组合泛化时保持一致。未复现。
语言 OODLang-Rephrase / Lang-Object-Property改写指令、增加物体属性约束。测 reasoning VLA 是否理解语言变化,以及 verifier 是否能过滤语言误解导致的错误动作。未复现。
视觉 OODVisual-Scene / Visual-Viewpoint改变场景外观和视角;Viewpoint 是最难 setting。测 runtime VLM verifier 在视觉分布变化下是否仍能判断“动作后果是否符合推理”。未复现。
Verifier 对比pi0-V-GPS vs SEALQ-function verifier 与 VLM verifier 对比。证明离线 Q-function 在 OOD 组合上会过估计错误动作,VLM verifier 更适合语义一致性检查。未复现。

Baselines

方法描述
pi0Vanilla VLA,无推理,无验证
pi0-V-GPS离线 Q-function + best-of-K action chunk
pi0-reason推理 VLA(SEAL 的 base model),无验证
SEALpi0-reason + 运行时 VLM 验证

主结果 1:ID + 行为组合

训练集评测pi0pi0-V-GPSpi0-reasonSEAL
LIBERO-10-RID (LIBERO-10)85909296
LIBERO-10-Compose14171816
LIBERO-100-Basket-RID (LIBERO-10)85898694
Basket-Compose11132326
LIBERO-100-RID (LIBERO-10)85878997
LIBERO-100-Compose16163853
关键发现:数据越多越多样 → 推理模型越强 → SEAL 增益越大(53% vs 38% on LIBERO-100-Compose,+15%)。pi0/V-GPS 在行为组合上基本不涨。

主结果 2:OOD 鲁棒性

训练集 = LIBERO-100-R,评测 4 种 OOD 变体:

评测pi0pi0-V-GPSpi0-reasonSEAL
ID (LIBERO-10)85878997
Lang-Rephrase73718695
Lang-Object-Property72818191
Visual-Scene84839198
Visual-Viewpoint28232545
亮点:(1) 语义 OOD:推理模型天然鲁棒,SEAL 进一步过滤动作误差→95%。(2) Visual-Viewpoint 是最难的 OOD,所有方法大幅下降,但 SEAL 仍比次优好 +17%。
观察:视觉偏移(特别是视角+背景变化)远比语义偏移更具挑战性。当前 VLA 在 viewpoint 泛化上仍有很大改进空间。

主结果 3:为什么 V-GPS 在 OOD 失败?

对比实验展示了 Q-function verifier vs VLM verifier 的核心差异:

  • ID 场景:两者都能正确评估进度(Q 值稳定上升)
  • 行为组合 OOD:Q-function (MUSE encoder) 对新指令过估计 Q 值 → 选错动作(把白杯子抓了结果拿了错误的杯子也给高分)
  • VLM verifier:利用常识推理正确识别错误 → 引导策略选正确动作

代码结构概览

仓库基于 openpi 框架改造,核心改动集中在推理 VLA 数据集 + 运行时 SEAL 评测脚本。

路径功能
src/openpi/models/pi0.pypi0 模型定义 (PaliGemma + action expert)
src/openpi/policies/libero_reason_dataset.py推理标注数据集的加载与处理
examples/libero/eval_libero_reason_sample.pySEAL 核心实现:Hypothesize-Predict-Verify 循环
examples/libero/prompt_template_verifier.txtVLM verifier 的完整 prompt 模板
examples/libero/vec_env.pyK 个并行环境 (Predict 阶段)
examples/libero/utils.py工具函数:图像编码、API key、环境构建
eval_scripts/launch_libero_vla_reason_sample.shSEAL 评测启动脚本
scripts/train.pypi0-reason 训练入口

Hypothesize + Predict 循环 (代码印证)

eval_libero_reason_sample.py 中的核心循环:

# 并行推理 K 条动作序列 (batch_size = K)
obs_dict_np, previous_obs = get_pi_obs_dict_batch(all_obs, previous_obs, task_description, args)
policy_return_dict = client.infer(obs_dict_np)  # WebSocket batch inference

# 模型返回 isthinking=True → 该序列完成(生成了<think> token)
policy_is_thinking = policy_return_dict.get('isthinking', [False]*args.batch_size)

# 当某序列完成时,提取其子目标文本
plan_string = policy_return_dict['thought'][i].split('Now I need to do:')[-1]

# 并行环境步进 (Predict)
vec_obs, vec_reward, vec_done, vec_info = vec_env.step(actions, np.arange(args.batch_size))

关键实现细节:模型服务使用 WebSocket 通信,batch 中每个元素独立 autoregressive 生成。当 <think> 出现时标记该序列完成。

Verify 阶段 (代码印证)

test_reset_flags() 函数实现异步 VLM 验证:

# 异步验证 - 后台线程并行调用 GPT-4o
def test_reset_flags(reset_indices, initial_image, agent_images, wrist_images, instruction_text, args):
    # 为每个候选序列启动独立线程
    for idx in current_indices:
        thread = threading.Thread(target=test_single_index, args=(int(idx),), daemon=True)
        threads.append(thread)
        thread.start()

# 单序列验证: 发送 3 张图 + subtask 文本给 GPT-4o
def test_single_index(idx):
    b64_initial_image = optimize_image_for_api(initial_image, max_size=512)
    b64_image = optimize_image_for_api(agent_images[idx][-1], max_size=512)
    b64_wrist_image = optimize_image_for_api(wrist_images[idx][-1], max_size=512)
    prompt = get_prompt(subtask_goal, "verifier")
    
    response = session.post("https://api.openai.com/v1/responses", json={
        "model": "gpt-4o-2024-08-06",
        "input": [{"role": "user", "content": [
            {"type": "input_text", "text": prompt},
            {"type": "input_image", "image_url": f"data:image/jpeg;base64,{b64_initial_image}"},
            {"type": "input_image", "image_url": f"data:image/jpeg;base64,{b64_image}"},
            {"type": "input_image", "image_url": f"data:image/jpeg;base64,{b64_wrist_image}"},
        ]}]
    })
    # 解析 "Verification: Success" / "Verification: Failure"
    verification_result = result_text.split("\n")[-1].strip()
    if "SUCCESS" in verification_result: results[idx] = True

Early Exit + 状态同步 (代码印证)

# 检查后台验证结果 (非阻塞)
def check_background_verification() -> int | None:
    return _background_verification_result.get_nowait()  # 返回通过验证的 index

# 主循环中: 一旦有结果立即执行
verified_idx = check_background_verification()
if verified_idx is not None:
    # 用选中序列的动作在执行环境中前进
    for selected_action in batch_action_plan[reset_index]:
        exec_obs, exec_reward, exec_done, exec_info = env_exec.step(selected_action)
    
    # 同步所有并行环境到选中状态
    env_reset_sim_state = vec_env.get_sim_state(reset_index)[0]
    vec_env.set_init_state(np.repeat(env_reset_sim_state, K, axis=0), np.arange(K))

数据集处理 (代码印证)

libero_reason_dataset.py 中推理标注数据的加载逻辑:

class LiberoReasonDataset(LeRobotDataset):
    # 关键参数
    self.use_reasoning = data_config.use_reasoning  # 是否使用推理标注
    self.pred_reasoning_prob = 0.7  # 70% 概率预测推理内容

def _get_thought(thoughts: list[dict], step: int) -> dict:
    """根据当前时间步获取对应的推理标注"""
    for thought in thoughts:
        if thought['start_step'] <= step < thought['end_step']:
            return thought  # 返回包含 text plan 的 dict

训练时以 70% 概率让模型预测推理文本(对应 <think> 段),30% 跳过(增强鲁棒性)。

核心贡献

  1. Embodied CoT Faithfulness Gap 形式化:首次明确定义推理-动作错位问题,将其与 LLM 中 CoT faithfulness 做类比
  2. Training-free 运行时引导:不需要额外训练任何组件,只利用已有 VLA + off-the-shelf VLM
  3. Plan-level Best-of-N:验证粒度与语义粒度对齐(一个完整子任务),而非 chunk-level
  4. 正向 scaling:数据越多、候选越多 → 效果越好(与 LLM test-time compute scaling 呼应)
  5. 推理标注管线 + OOD 基准:开源推理标注数据集 + LIBERO 的 OOD 扩展

局限性

局限具体表现可能方向
依赖 Base VLA 质量如果 K 条采样中没有任何好的动作序列,验证无用更好的 base model / 更大 K
VLM 可靠性GPT-4o 对细粒度 gripper-object 接触/遮挡判断不准针对具身场景微调 verifier
延迟开销每个 reasoning step 需额外 VLM API 调用 (7-10s per query)蒸馏 verifier / 量化
仿真依赖Predict 阶段需要环境模型(当前用 LIBERO sim)learned world model / digital twin
仅限 sim 验证论文只在 LIBERO 仿真中验证,无真实机器人实验world model 支撑的真实部署

启发与延伸

对 VLA 研究的启发

  • "言行一致"作为新指标:不仅看任务成功率,还应衡量推理-动作对齐度
  • 推理能力 ≠ 控制能力:VLM backbone 的语言规划远强于 action head 的执行 → 两者的 gap 是关键瓶颈
  • 多样性是双刃剑:更大数据 → 更多样的 action distribution → 更容易偏离 → 但也意味着好样本更容易出现 → Best-of-N 受益

方法论启发

  • Test-time compute for robotics:与 LLM 的 BoN / MCTS 类似,机器人推理也可受益于推理时更多计算
  • Verifier 的选择:通用 VLM 作 verifier 在 OOD 场景优于 domain-specific Q-function
  • Plan-level vs Chunk-level 验证:语义对齐的自然粒度是"一个子任务",不是固定 chunk 长度

与其他工作的连接

  • OneTwoVLA [8]:SEAL 的 base reasoning VLA 基于此架构(<think>/<act> 切换)
  • RoboMonkey [6]:类似 test-time scaling 思路,但用微调 VLM 而非通用 VLM 做验证
  • V-GPS [16]:Q-function 引导,chunk 粒度,OOD 泛化弱
  • FORESIGHT [21] (同作者):VLM-in-the-loop policy steering via latent alignment

自测题(6 题)

Q1. SEAL 的 "Embodied CoT Faithfulness Gap" 指的是什么?

  • A. 模型无法生成正确的文本计划
  • B. 模型的动作执行速度太慢导致延迟
  • C. 文本计划描述的目标未被后续低层动作可靠实现
  • D. 训练数据中缺少推理标注

Q2. SEAL 为什么不直接通过反向传播优化对齐 loss?

  • A. 计算资源不够
  • B. 环境动力学不可微 + 动作采样不可微,梯度无法回传
  • C. VLM 没有提供梯度接口
  • D. 对齐 loss 太小无法收敛

Q3. SEAL 的 Verify 阶段使用什么作为 alignment reward 的 proxy?

  • A. 离线 Q-function (IQL)
  • B. 微调后的 reward model
  • C. 手工设计的 heuristic function
  • D. 预训练的通用 VLM (GPT-4o)

Q4. 为什么 V-GPS (Q-function) 在行为组合 OOD 场景下失败?

  • A. MUSE encoder 对新指令/新组合无法泛化,导致 Q 值过估
  • B. Q-function 的训练数据太少
  • C. action chunk 太长导致验证不准
  • D. 仿真环境中 Q-function 不可用

Q5. SEAL 的 Runtime Scaling Law 中,增加 K 的主要瓶颈是什么?

  • A. 仿真环境的并行数量限制
  • B. GPU 显存不足以支撑大 batch
  • C. VLM verifier 的每次查询耗时 (7-10s),虽然异步但线性增长
  • D. 动作序列的自回归生成速度

Q6. 为什么 SEAL 在大数据集上增益更大?

  • A. 大数据让 VLM verifier 更准确
  • B. 更多样的训练数据 → 更多样的动作分布 → K 个样本中更容易包含好的候选
  • C. 大数据集减少了 VLM 的 hallucination
  • D. 训练时间更长使得模型收敛更好