空间推理为何难倒大模型?结构化CoT与过程奖励破解推理瓶颈
最近有次我在验证模型的空间理解能力时,问了一个很简单的组合变换问题:一张桌子上放着笔记本、显示器和杯子,杯子原本在显示器右侧,如果把显示器向右平移 10 厘米,再让杯子原地逆时针旋转 90 度,那么杯子位于显示器的什么方向?结果模型的回答是“右侧”。原因是它隐含地认为杯子相对显示器没变,却忽略了“平移”这个动作会改变相对位置。答案不是瞎猜,但推理链是乱的。
这类问题在语言任务里看起来不难,却经常让大模型翻车。SCOUT(Structured Chain-of-Thought and Multi-Objective Process Reward)这个研究方向,恰好点出了破解空间推理的关键:不要只让模型输出答案,也不要只检查答案对错,而是把推理过程结构化,并且用多目标过程奖励去训练模型。我的判断是,空间推理的瓶颈不在参数规模,而在于如何让模型把“空间状态的变化”显式地维护起来;谁先在这个环节做出约束,谁就能显著提升空间任务上的实际表现。
1. 空间推理为什么是语言模型的薄弱项
先不急着分析 SCOUT,我们得先搞清楚空间推理到底难在哪。很多人以为空间推理就是“左右上下前后”,语言模型应该很容易学会。但真去测几个问题就会发现,它和普通语义推理完全不是一回事。普通问答只要检索和组合已有知识,空间推理却要求模型在推理过程中持续维护一个“虚拟空间状态”,随着每一步描述不断更新坐标和方向。模型本身没有内置空间坐标系,也没有稳定的心智图像,所以它只能靠语言统计数据去猜测。
1.1 看似题目简单,其实涉及多个认知环节
拿一个最简单的 Desk Arrangement 场景来说:
杯子在显示器的右侧。显示器的前方是键盘。现在把杯子向后移动 5 厘米,再把整个桌面逆时针旋转 90 度。问:杯子在显示器前方还是后方?
这类问题里面至少有三个独立环节:
- 实体抽取:从句子中抽取杯子、显示器、键盘,以及彼此之间的方位关系;
- 参照系维护:要确定“右侧”“前方”是相对于谁而言的;
- 状态更新:每次移动或旋转之后,之前的坐标系统都要整体更新。
很多人忽略了一个事实:空间推理错误,经常不是最终答案错,而是中间某一个环节丢失了参照系。比如“把桌子逆时针旋转 90 度”,模型可能只旋转了杯子,没旋转显示器,最后自然就错。类似问题在机器人操作、3D 场景理解、自动驾驶轨迹规划里都非常关键。一个小的方位错误,可能在后继步骤里被不断放大。
从工程经验看,我遇到的空间推理失败案例,大致可以归为三类:
- 方向混淆:左右、前后、顺时针/逆时针这些成对概念容易被模型无意识地替换;
- 参照系漂移:模型有时按观察者视角推理,有时按物体自身朝向推理,中间不会明确切换;
- 组合状态丢失:多步变换之后,模型只记得最后一步,忘记更新前面所有物体之间的相对关系。
这三个问题本质上都是过程性问题。也就是说,模型不是不知道“杯子在右侧”这个事实,而是不知道如何把一条状态变更链稳定地延续下去。
1.2 普通 CoT 靠的是语言惯性,而不是空间状态更新
很多人觉得,既然模型直接回答容易错,那就让它一步步“思考”,也就是走 Chain-of-Thought。这个思路确实有效,但只适用于“语言推理”类任务。原因在于普通 CoT 没有对推理步骤施加结构约束,它只是让模型生成更多文字。
举个实际例子。我问模型:
- “苹果在盒子左边,盒子被镜像翻转后,苹果在哪里?”
模型可能写出这样的推理:
表面看逻辑完整,答案也对。但如果问题稍微复杂一点,比如三个物体,并且“镜像翻转”还要伴随“观察者视角改变”,模型生成的长文本就可能开始自相矛盾:
为什么会出现这种矛盾?因为普通 CoT 只鼓励模型“生成看起来像推理的文本”,并没有让模型必须维护一个可读、可更新的中间状态。它每一步都在“解释”,但不会像程序一样把坐标记录下来。这就像一个人嘴上说“我在仔细思考”,但脑子里根本没有草稿纸。
SCOUT 这类方案的核心,就是解决这个草稿纸缺失的问题。它把 Chain-of-Thought 改造成结构化链式推理:每一步都要输出明确的中间状态,比如实体、方向、坐标、相对位置,而不是自由文本;同时用过程奖励模型去对这些中间步骤打分,而不是等到最后只看答案对错。这个方法切中的正是普通 CoT 最明显的短板。
2. Structured CoT 到底在结构化什么
“结构化”这个词听起来很抽象,其实可以类比成做饭。普通 CoT 是让厨师“自由发挥,注意火候”,结构化 CoT 则要求厨师按照标准步骤卡执行:第一步备菜,第二步切配,第三步热锅,第四步下菜,第五步调味,每一步都有明确产出。这样一来,哪一步出了问题,回头检查就能定位,而不需要把整锅菜扔掉。
空间推理比做菜更需要结构化,因为空间状态是可计算的。你可以用坐标、朝向、相对位置去描述每一个时刻的场景;每一步变换都相当于一次变量更新。如果模型能按这种格式生成推理链,不仅过程更容易验证,后续训练也可以非常自然地引入奖励信号。
2.1 从“自由推理”到“状态更新”:一个最小结构化模板
如果让我设计一个符合 SCOUT 思路的推理模板,我会要求模型按下面这个五步流程输出:
- 抽取场景中的关键实体;
- 为每个实体建立初始空间关系;
- 确定参照系(观察者视角或物体自身视角);
- 逐步执行显式的空间变换,并更新相对位置;
- 用最终更新后的状态回答问题。
用前面那个桌面场景举例,一个理想的结构化输出应该长得像这样:
注意这里的关键不是“输出更详细的讲解”,而是把空间变换表示成明确的状态更新。第 4 步才是整个推理链的核心。如果没有这个结构化模板,模型可能直接跳到最后一步,然后靠语言习惯补一个答案。有模板之后,模型的每一步都变成了可检查、可计分的过程节点。
当然,模板的具体字段可以根据任务调整。比如在 3D 导航任务里,可以加入“朝向角”“路径点”;在视觉问答任务里,可以加入“目标边界框”“物体中心点坐标”。但核心思想不变:让模型把空间推理变成状态更新流,而不仅仅是文字流。
2.2 过程奖励模型怎样判断“中间步骤是对的”
有了结构化推理链,接下来还要解决一个问题:怎么知道模型中间步骤写得对不对?如果光看最终答案,模型可能“过程很乱但答案碰巧正确”,这会导致训练信号不一致。SCOUT 的思路是引入 Process Reward Model(过程奖励模型),对每一步打分。
一个简化版的做法是:把结构化推理链按步骤切分,然后训练一个评判器,让它判断每个子步骤是否合理。比如上面第 4 步中“显示器向右移动10厘米,更新后杯子在显示器左侧”,这个子步骤是对的;如果模型写“显示器向右移动10厘米,更新后杯子在显示器后方”,评判器就应该给低分。
传统的结果奖励模型只会给整条推理链一个最终分数。过程奖励模型则是每个步骤一个分数,相当于把改卷从“只看作文总分”改成“每段都有分”。这对空间推理尤其重要,因为空间推理的特性就是状态依赖:前面任何一步错了,后面全错。如果只给整条链一个最终分数,模型很难定位错误出在哪个变换上;如果每步都有分数,模型就知道要重点修正“坐标更新错误”这类问题。
从训练角度看,过程奖励模型还能提供更密集的学习信号。最终答案只有一个标签,但中间步骤可以有多个标签,模型在强化学习或拒绝采样阶段能够更快地学会“逐步更新”而非“一步猜答案”。
3. 多目标过程奖励:空间推理训练的关键拼图
SCOUT 的标题里还有一个词值得注意:Multi-Objective,多目标。只看“过程奖励”还不够,因为过程本身也可以有多个质量维度。最终答案正确只是一个目标,中间步骤还要满足另一批目标,比如逻辑连贯、状态更新合法、可解释性高。只有当这些目标同时被纳入奖励模型,模型才会朝“结构正确”的方向收敛。
3.1 设计过程奖励时,至少要同时看四个目标
从实际落地角度,我在设计类似训练任务时,通常不会只用单一分数评价中间步骤。下面是一个更合理的多目标框架:
| 目标维度 | 要回答的问题 | 空间推理场景示例 |
|---|---|---|
| 结果正确性 | 最终答案和标准答案是否一致 | 杯子最终在显示器前方 |
| 步骤合法性 | 每个变换是否满足空间规则 | “向右移动”不能导致位置向左 |
| 状态一致性 | 前后两步的状态是否连贯 | 第 3 步更新过坐标,第 4 步不能沿用旧坐标 |
| 可解释性 | 每一步是否明确、无歧义 | 不要把“右侧”和“前方”混在一起表述 |
这四个目标里,结果正确性最容易自动化验证,比较接近传统奖励。其余三者则需要依赖规则、解析器或另一个模型来评判。在代码实现里,可以给每个目标分别打分,然后再加权求和,让奖励模型输出一个综合分数。
为什么需要多目标而不是单一分数?因为单一分数很容易被模型“钻空子”。比如只奖励结果正确,模型可能学会生成一些看似严谨、中间步骤却经不起追问的推理;只奖励步骤合法,模型又可能生成正确但低效的冗长过程。空间推理需要的是结果和过程同时靠谱,多目标奖励就是直接把这种“同时”写进训练目标。
3.2 多目标训练不是把奖励加在一起就完了
多目标设计看着简单,真正训练时会遇到一些坑。最典型的是目标冲突。例如“状态一致性”要求模型尽量少做无意义的状态改写,“步骤合法性”要求每一步都做显式更新,这两者在某些任务里会打架:模型如果频繁更新状态,会增加出错机会;不更新状态,又可能跳过关键变换。
更麻烦的是每个目标的度量尺度不一样。步骤合法性可能是离散 0/1,状态一致性可能是连续相似度,结果正确性可能是 EM 匹配。直接相加会造成某个目标主导整个奖励信号。常见做法是归一化,或者对每个目标设置阈值:先满足硬约束,再优化软指标。
从工程角度看,我一般会建议先做一个小规模验证集,专门检查过程奖励模型对不同错误的敏感度。比如构造一批“最终答案正确但过程错误”的样本,确认奖励模型会给它们打低分;再构造一批“过程正确但最终答案错误”的样本,确认奖励模型不会盲目给高分。这样能提前暴露多目标打分时的权重问题,避免模型学到投机取巧的推理链。
这里其实还有一个更深的意义:多目标过程奖励不只是提高空间推理准确率,它还会影响模型的“自我纠错”能力。当模型在推理中途发现某一步状态不满足约束时,它可以通过评分信号感知到风险,从而尝试回溯或修正。这是普通 CoT 和结果奖励很难做到的。
4. 从 SCOUT 提炼出的工程实践:先跑通、再优化、最后体系化
我不是 SCOUT 论文的作者,也没有拿到官方的代码仓库,所以下面不写具体模型参数或者 benchmark 数字。但从这个研究方向里,我们能提炼出一套非常实用的工程方法论,可以帮助你在自己的空间推理任务里复现同样的思路。关键是不要一上来就训练模型,而是先用结构化提示词和最朴素的打分器,把流程跑通。
4.1 小规模验证 SCOUT 思想的四个步骤
如果你打算在自己的场景里测试“结构化 CoT + 多目标过程奖励”的效果,我建议按下面四步走:
- 准备一组空间推理测试题。题目要覆盖方向变换、多物体关系、参照系切换三类场景。不需要太多,50 到 100 条足够做初步判断。
- 写一个结构化 CoT 提示词模板。把你在 2.1 节看到的那五步模板直接改成中文 prompt,并要求模型按固定字段输出。如果模型输出格式不稳定,可以考虑用 JSON 格式约束。
- 对每一条输出做自动打分。先不训练模型,直接用规则或一个判别式模型给中间步骤打分。比如检查“向右移动”后的坐标轴方向变化、检查相邻步骤的物体集合是否一致。
- 将“结构化解”和“普通 CoT 解”的分数做对比。如果结构化解在步骤合法性和状态一致性上明显更高,但最终答案提升不显著,说明模型的解码能力还需要再调;如果结构化解和普通 CoT 差不多,则说明提示词模板没有真正约束住模型。
这个流程能让你的验证周期压缩到半天以内。我见过很多人一上来就打算训练一个 Process Reward Model,反而绕了大圈子:没有先确认“结构化输出”是否被模型稳定执行。结构化提示词是第一步,过程奖励是第二步。没有稳定的结构化输出,奖励模型根本没有可靠的输入。
4.2 效果不理想时,按这个顺序排查
如果结构化 CoT 并没有带来预期的提升,不要急着换模型。按下面这个顺序排查,通常能定位问题:
- 先看输出格式是否真的结构化。模型有没有省略步骤?有没有在关键坐标更新时直接给出结论?如果格式不稳定,首先要调整 prompt 和解析代码。
- 再看中间步骤是否正确。挑 10 条错误样本,人工检查是“步骤错了”还是“步骤正确但答案表达不对”。如果是步骤错,问题在推理能力;如果是答案表达错,问题在生成解码阶段。
- 再看打分器是否可靠。用自己写规则打分,很可能误判中间步骤。比如模型写“杯子在显示器左侧”,你的规则可能没识别出“显示器移动后杯子相对位置改变”。打分器不可靠,整个训练信号都会被污染。
- 再看数据覆盖度。空间推理有很多子类型:方向、旋转、缩放、镜像、投影、遮挡。如果你的测试题全部是左右方向,结构化模板再正确也无助于旋转问题。
- 最后看模型容量和上下文长度。空间推理涉及到多步状态更新,每一步都会占用上下文。如果模型上下文较短,或注意力在前几步之后衰减,后面步骤就会出现状态漂移。这种情况下可以把步骤压缩,或者用外部记忆模块缓存关键状态。
这个“先格式、再步骤、再评估、再数据、最后容量”的链路,适用于大多数空间推理任务。SCOUT 能处理的空间推理问题,本质上也是靠这种方式建立可验证的推理过程;没有这些排查步骤,哪怕模型代码完全正确,也很难复现出理想效果。
4.3 适用边界与前置条件
需要清醒一点:SCOUT 这类方案不是所有空间任务的银弹。它更适合那些中间状态可以被显式定义、推理步骤可以被拆解的任务。比如空间描述生成、2D/3D 物体排列推理、机器人操作顺序规划、导航路径问答等,都很适合。但如果你面对的是完全不可解释的像素级空间操作,比如端到端的图像生成,强行引入结构化 CoT 反而会限制模型。
此外,结构化推理链会增加输出长度和推理延迟。在一个实时代理系统里,每次空间问答都要求模型输出 5 步详细推理,成本会很高。更实际的做法是:先用一个轻量模型判断“这个任务是否需要复杂空间推理”,只有需要时才切换到 SCOUT 风格的长链;否则直接回答,节省资源和时间。
从长期价值看,SCOUT 代表的不是某一个模型,而是一种把复杂认知任务拆成可验证流程的工程思路。空间推理只是它最典型的应用场景之一。类似的思路完全可以迁移到时间推理、因果推理、多跳逻辑推理等领域。你一旦理解了“结构化过程奖励”这个框架,就会发现它本质上是在给模型的思考过程建立质检标准。这比单纯追求参数规模或投喂更多数据,更值得我们长期深耕。
如果你正在做空间问答、具身智能或多模态 Agent,我建议把 SCOUT 当作一个设计参考,而不是一个不可变的最佳实践。先用结构化思维把自己的任务拆成“状态抽取、变换更新、结果生成”三个模块,再为每一步设计可量化的质量指标,最后用多目标奖励去对齐它们。你会发现,模型的空间推理能力会从“碰运气”变成“按流程办事”,这是我能想到的、对抗空间推理随机性最实在的一条路。