知評(píng)估框架解析)
空間智能是最近幾年大模型討論里被頻繁提到但評(píng)估方式仍然混亂的能力維度。人類(lèi)判斷一個(gè)模型是否理解“桌子左邊”“杯子前方”不會(huì)要求它輸出一組坐標(biāo)而是看它能否在真實(shí)或模擬環(huán)境中做出正確布局。浙江大學(xué)研究團(tuán)隊(duì)提出的一種 Agentic 空間認(rèn)知評(píng)估框架正是順著這個(gè)思路讓生成式模型把空間理解“畫(huà)”出來(lái)而不是強(qiáng)迫 LLM 在文本里輸出數(shù)值坐標(biāo)。這個(gè)轉(zhuǎn)變看起來(lái)只是從數(shù)值輸出變成圖像輸出背后卻涉及任務(wù)定義、動(dòng)作空間、評(píng)估指標(biāo)和 Agent 循環(huán)設(shè)計(jì)的一系列調(diào)整。這篇文章會(huì)圍繞這個(gè)框架思路拆解它的設(shè)計(jì)動(dòng)機(jī)、核心模塊、一個(gè)簡(jiǎn)化版原型實(shí)現(xiàn)以及落地時(shí)容易踩的坑。適合關(guān)注多模態(tài)大模型、具身智能、模型評(píng)估和 Agent 開(kāi)發(fā)的同學(xué)閱讀。1. 為什么“輸出坐標(biāo)”這條評(píng)估路徑走不遠(yuǎn)1.1 LLM 用文本表達(dá)空間時(shí)的信息瓶頸大語(yǔ)言模型本質(zhì)上是把文本 token 序列映射成下一個(gè) token 的概率分布。即使最強(qiáng)的 LLM也只能在它學(xué)過(guò)的文本分布里“猜測(cè)”坐標(biāo)數(shù)字。對(duì)于“把杯子放在桌子右側(cè) 50 厘米處”這個(gè)問(wèn)題模型可能會(huì)回答“(154, 320)”但它并不具備連續(xù)幾何推理能力它只是在文本統(tǒng)計(jì)規(guī)律里找到了一個(gè)看起來(lái)合理的數(shù)值。問(wèn)題在于空間場(chǎng)景往往是連續(xù)的、關(guān)系型的。兩把椅子之間的“中間位置”不是一個(gè)唯一坐標(biāo)而是一條線段一個(gè)物體“在另一個(gè)物體前方”取決于觀察角度、朝向和基準(zhǔn)線。LLM 如果只能輸出坐標(biāo)就必須把一組連續(xù)變化的空間關(guān)系壓縮成若干個(gè)離散數(shù)字。這種壓縮會(huì)丟失大量空間語(yǔ)義比如“離桌子很近但沒(méi)碰到”和“在桌子正前方 10 厘米”在坐標(biāo)上可能只有很小的差異但語(yǔ)義差別很大。因此如果想要評(píng)估一個(gè)模型是不是具備空間智能應(yīng)該給它一種更適合表達(dá)空間結(jié)構(gòu)的方式——圖像、布局、拓?fù)潢P(guān)系而不是坐標(biāo)數(shù)值。生成式模型擅長(zhǎng)從語(yǔ)義描述生成視覺(jué)結(jié)構(gòu)正好可以在空間認(rèn)知評(píng)估中充當(dāng)“輸出通道”。1.2 坐標(biāo)輸出評(píng)估的五個(gè)具體問(wèn)題即使不考慮 LLM 的能力極限強(qiáng)迫模型輸出坐標(biāo)來(lái)評(píng)估空間認(rèn)知工程上也非常別扭。以下五個(gè)問(wèn)題在實(shí)際項(xiàng)目里最容易遇到。問(wèn)題典型表現(xiàn)產(chǎn)生的原因數(shù)值精度不穩(wěn)定模型多次嘗試同一任務(wù)坐標(biāo)相差很大LLM 生成數(shù)字只靠文本概率缺少規(guī)約和驗(yàn)證坐標(biāo)基準(zhǔn)難對(duì)齊模型認(rèn)為的“左上角”和評(píng)估方實(shí)現(xiàn)的“左上角”不一致沒(méi)有統(tǒng)一坐標(biāo)系、縮放比例和原點(diǎn)定義空間關(guān)系無(wú)法直接體現(xiàn)坐標(biāo)正確但擺放后互相遮擋、重疊坐標(biāo)本身不包含物體尺寸、方向和碰撞約束評(píng)估粒度粗糙答案只能判對(duì)或錯(cuò)無(wú)法判斷“接近正確”坐標(biāo)距離閾值需要人工拍腦袋且不同任務(wù)語(yǔ)義不一致場(chǎng)景擴(kuò)展性差換一張地圖或換一種任務(wù)定義坐標(biāo)體系就要重做坐標(biāo)本質(zhì)上是任務(wù)相關(guān)的局部編碼不具備通用性這幾點(diǎn)不是某個(gè)模型的問(wèn)題而是評(píng)估設(shè)計(jì)的問(wèn)題。如果我們考核的重點(diǎn)是空間關(guān)系理解就應(yīng)該給模型一個(gè)能夠自然表達(dá)關(guān)系的輸出空間。坐標(biāo)不是關(guān)系坐標(biāo)只是從關(guān)系推導(dǎo)出來(lái)的一種結(jié)果。1.3 生成式輸出把空間認(rèn)知拉回可視世界生成式模型有一個(gè)特點(diǎn)它可以把一個(gè)描述性的語(yǔ)義空間轉(zhuǎn)換成一個(gè)可被人類(lèi)和算法反復(fù)查看的視覺(jué)空間。例如讓模型“畫(huà)”出桌子右側(cè)有一個(gè)杯子生成的圖像即便不是真實(shí)照片也能直觀反映出左右關(guān)系、遮擋關(guān)系、遠(yuǎn)近尺度。這種做法的本質(zhì)是改變?cè)u(píng)估接口。舊接口模型輸出坐標(biāo)評(píng)估器解析數(shù)字。新接口模型輸出動(dòng)作或語(yǔ)義元素生成式模型渲染成場(chǎng)景評(píng)估器觀察場(chǎng)景。把空間認(rèn)知評(píng)估從“數(shù)字比較”變成“場(chǎng)景生成與場(chǎng)景理解”能同時(shí)測(cè)兩種能力模型是否理解了空間語(yǔ)義以及模型是否能把自己的理解轉(zhuǎn)換成可執(zhí)行的空間結(jié)構(gòu)。它也更接近人類(lèi)認(rèn)知心理實(shí)驗(yàn)中常用的“擺放任務(wù)”設(shè)計(jì)。2. Agentic 空間認(rèn)知評(píng)估框架的設(shè)計(jì)思路2.1 整體流程不是讓模型直接回答而是讓模型在環(huán)境中“做”傳統(tǒng)評(píng)估是一次性問(wèn)答給定問(wèn)題取模型回答和標(biāo)準(zhǔn)答案比較。Agentic 評(píng)估則不同它把評(píng)估過(guò)程設(shè)計(jì)成一個(gè)多步交互閉環(huán)??蚣艿暮诵牧鞒炭梢愿爬槲宀饺蝿?wù)管理器生成自然語(yǔ)言空間任務(wù)例如“請(qǐng)把藍(lán)色方塊放到紅色圓形上方”。Agent 接收任務(wù)和當(dāng)前場(chǎng)景狀態(tài)輸出一個(gè)動(dòng)作指令而不是直接輸出最終答案。生成式模型或空間模擬器執(zhí)行該動(dòng)作將場(chǎng)景狀態(tài)更新并渲染成圖像或結(jié)構(gòu)化場(chǎng)景圖。評(píng)估器檢查執(zhí)行后的場(chǎng)景是否滿足任務(wù)要求并反饋給 Agent。Agent 根據(jù)反饋繼續(xù)嘗試直到滿足終止條件。這個(gè)流程的關(guān)鍵在于空間任務(wù)不是靠一次完整答案來(lái)判定而是靠一系列動(dòng)作和中間結(jié)果來(lái)評(píng)估。這種范式天然適合 Agentic AI 的測(cè)試場(chǎng)景因?yàn)?Agent 的每一步?jīng)Q策都可能影響最終布局。偽代碼形式的整體流程如下def run_evaluation(task, agent, renderer, evaluator, max_steps5): state renderer.empty_state() for step in range(max_steps): action agent.generate_action(task, state.to_prompt()) state renderer.apply_action(state, action) scene renderer.render(state) is_done, score, feedback evaluator.evaluate(task, state, scene) if is_done: return {solved: True, score: score, steps: step 1, scene: scene} return {solved: False, score: score, steps: max_steps, scene: scene}在這個(gè)循環(huán)里Agent 不一定要是 LLM它可以是任何能輸出動(dòng)作的模型生成式模型在這里也不是為了“畫(huà)得好看”而是把不可直接觀察的空間狀態(tài)變成可評(píng)估的視覺(jué)產(chǎn)物。2.2 四個(gè)核心模塊任何 Agentic 空間認(rèn)知評(píng)估框架都可以拆成四個(gè)模塊任務(wù)管理器、Agent、渲染器、評(píng)估器。任務(wù)管理器負(fù)責(zé)構(gòu)造任務(wù)集合??臻g任務(wù)至少包括三類(lèi)關(guān)系擺放A 在 B 的右側(cè)、路徑規(guī)劃從起點(diǎn)走到終點(diǎn)并避開(kāi)障礙、布局完成在限定區(qū)域內(nèi)安排多個(gè)物體。在實(shí)際項(xiàng)目中任務(wù)管理器應(yīng)該輸出結(jié)構(gòu)化任務(wù)描述而不能只給一句話因?yàn)闄C(jī)器解析“把球放到桌子的左邊”時(shí)需要知道“桌子”有哪些候選實(shí)體、坐標(biāo)系是什么、成功條件是什么。Agent 是待評(píng)估模型。它可以接收文本狀態(tài)描述也可以接收渲染后的圖像。在框架原型里通常先讓 Agent 輸出文本動(dòng)作后續(xù)再擴(kuò)展為直接輸出圖像操作。這里最大的設(shè)計(jì)約束是動(dòng)作空間。如果動(dòng)作空間仍然是“輸出坐標(biāo)”那就又回到了起點(diǎn)。推薦的做法是讓 Agent 輸出語(yǔ)義動(dòng)作例如“move table left”或“place cube above circle”再由渲染器執(zhí)行這些語(yǔ)義動(dòng)作。渲染器把動(dòng)作變成空間狀態(tài)。最輕量的方式是使用規(guī)則模擬器物體用矩形框表示關(guān)系由幾何計(jì)算決定。更接近前沿的方式是調(diào)用擴(kuò)散模型生成圖片例如用 Stable Diffusion 或 ComfyUI 工作流生成一張包含指定物體的場(chǎng)景圖。渲染器不一定需要和 LLM 在同一臺(tái)機(jī)器上兩者可以通過(guò) API 解耦但如果是在本地開(kāi)發(fā)要注意顯存、端口和工作流版本。評(píng)估器負(fù)責(zé)判斷最終狀態(tài)是否滿足任務(wù)要求。它可以由規(guī)則計(jì)算、視覺(jué)模型識(shí)別或人工復(fù)核組成。規(guī)則計(jì)算速度快、可解釋性強(qiáng)適合作為 ground truth視覺(jué)模型識(shí)別適合處理圖像中的遮擋和模糊場(chǎng)景人工復(fù)核適合小樣本評(píng)測(cè)。生產(chǎn)環(huán)境一般建議三層結(jié)合不能只依賴(lài)單一定性判斷。2.3 為什么“Agentic”是這種評(píng)估方式的必要條件空間認(rèn)知不是一次作答可以測(cè)完的。一個(gè)模型能正確回答“杯子在桌子右邊”不代表它能在沒(méi)有桌子的情況下自己規(guī)劃出一個(gè)新杯子放在合適位置更不代表它能通過(guò)多步操作調(diào)整布局。使用 Agentic 方式可以讓模型在嘗試過(guò)程中暴露更多信息模型第一次動(dòng)作是否正確。模型能否理解反饋并修正錯(cuò)誤。模型面對(duì)開(kāi)放空間時(shí)能否自主選擇穩(wěn)定路徑。模型是否會(huì)在多余動(dòng)作中破壞已有的正確布局。這些信息在一次性問(wèn)答評(píng)估里全部丟失。Agentic 評(píng)估的價(jià)值不只是“多給模型幾次機(jī)會(huì)”而是把空間認(rèn)知從靜態(tài)知識(shí)測(cè)試變成動(dòng)態(tài)決策測(cè)試。Agentic AI 當(dāng)前的一個(gè)核心挑戰(zhàn)就是如何在長(zhǎng)周期任務(wù)中保持目標(biāo)一致性空間認(rèn)知評(píng)估正好提供了一個(gè)非常適合檢驗(yàn) Agent 規(guī)劃能力的環(huán)境。3. 從零搭建一個(gè)最小原型這一節(jié)實(shí)現(xiàn)一個(gè)簡(jiǎn)化版的原型。它不追求真實(shí)擴(kuò)散模型渲染而是用一個(gè)規(guī)則渲染器先把框架跑通。真實(shí)項(xiàng)目里可以把 renderer 替換成 ComfyUI 或 Stable Diffusion 后端但原型階段的重點(diǎn)是驗(yàn)證動(dòng)作接口和評(píng)估邏輯。3.1 環(huán)境準(zhǔn)備原型使用 Python 3.9核心依賴(lài)只有 Pillow 和 numpy。如果后續(xù)要接入真實(shí)生成式模型再按需要安裝 diffusers、torch 或請(qǐng)求 ComfyUI API。python -m venv .venv source .venv/bin/activate pip install pillow numpy這里不把 PyTorch 作為前置依賴(lài)因?yàn)榭蚣艿膬r(jià)值在于評(píng)估邏輯不在于具體生成器。生產(chǎn)環(huán)境如果要接視覺(jué)生成模型通常需要單獨(dú)部署一臺(tái)帶 GPU 的推理服務(wù)Agent 進(jìn)程和渲染服務(wù)可以通過(guò) HTTP 通信。也就是說(shuō)LLM 和 ComfyUI 不要求必須在同一臺(tái)電腦上但你需要約定好圖片輸入輸出的格式和任務(wù)回調(diào)地址。3.2 定義空間場(chǎng)景和渲染器場(chǎng)景用一組矩形物體表示。每個(gè)物體有名稱(chēng)、類(lèi)別、位置、尺寸和顏色。渲染器把物體繪制成一張 256x256 的圖片用于后續(xù)可視化。from dataclasses import dataclass, field from typing import List, Dict dataclass class SceneObject: name: str category: str x: int 0 y: int 0 width: int 30 height: int 30 color: str blue dataclass class Scene: width: int 256 height: int 256 objects: List[SceneObject] field(default_factorylist) def to_prompt(self) - str: lines [] for obj in self.objects: lines.append(f{obj.name}({obj.category}): at {obj.x},{obj.y}) return \n.join(lines)渲染器可以先用 Pillow 畫(huà)矩形框后續(xù)再替換成真實(shí)圖片生成模型。from PIL import Image, ImageDraw def render_scene(scene: Scene) - Image.Image: img Image.new(RGB, (scene.width, scene.height), white) draw ImageDraw.Draw(img) for obj in scene.objects: x0 obj.x - obj.width // 2 y0 obj.y - obj.height // 2 x1 x0 obj.width y1 y0 obj.height draw.rectangle([x0, y0, x1, y1], fillobj.color, outlineblack) return img這個(gè)階段只做基礎(chǔ)繪制不做透視、遮擋和光照。評(píng)估邏輯必須能脫離視覺(jué)效果獨(dú)立工作否則生成器的畫(huà)風(fēng)會(huì)影響評(píng)估結(jié)果。3.3 給 Agent 定義一套不依賴(lài)坐標(biāo)的動(dòng)作接口為了讓評(píng)估框架?chē)?yán)格避免“通過(guò)坐標(biāo)作答”Agent 的動(dòng)作接口只提供語(yǔ)義操作。示例動(dòng)作集合包括place、move、remove。下面是一個(gè)動(dòng)作格式action { action: place, object: cup, category: cup, relation_target: table, relation: to_the_right_of, distance: medium }注意這里沒(méi)有 x/y 坐標(biāo)。Agent 只需要描述“在什么位置放什么物體、相對(duì)誰(shuí)是什么關(guān)系”坐標(biāo)由渲染器依據(jù)規(guī)則計(jì)算。這樣設(shè)計(jì)的原因很簡(jiǎn)單如果 Agent 仍然輸出坐標(biāo)那么生成式模型只是變成了一個(gè)后處理畫(huà)圖工具模型的空間認(rèn)知仍然停留在數(shù)字猜測(cè)階段。下面是一個(gè)簡(jiǎn)化的關(guān)系位置求解函數(shù)演示渲染器如何把語(yǔ)義關(guān)系轉(zhuǎn)換為坐標(biāo)def resolve_position(scene: Scene, target_name: str, relation: str, distance: str): target next(obj for obj in scene.objects if obj.name target_name) delta 40 if distance medium else 60 if relation to_the_right_of: return target.x delta, target.y if relation to_the_left_of: return target.x - delta, target.y if relation above: return target.x, target.y - delta if relation below: return target.x, target.y delta raise ValueError(funsupported relation: {relation})實(shí)際框架中關(guān)系計(jì)算會(huì)更復(fù)雜比如需要考慮物體尺寸、邊界、朝向和多個(gè)約束條件。但核心原則一致Agent 產(chǎn)生語(yǔ)義意圖坐標(biāo)是環(huán)境層解析的產(chǎn)物。3.4 評(píng)估器實(shí)現(xiàn)評(píng)估器檢查最終場(chǎng)景中物體之間的關(guān)系是否滿足任務(wù)要求。這里用結(jié)構(gòu)化關(guān)系檢查作為 ground truth而不是直接讓視覺(jué)模型判斷。def evaluate_scene(scene: Scene, task: dict) - tuple[bool, float, str]: required task[target] relation required[relation] target_name required[target_object] obj_name required[object] try: obj next(o for o in scene.objects if o.name obj_name) target next(o for o in scene.objects if o.name target_name) except StopIteration: return False, 0.0, missing object or target obj_center (obj.x, obj.y) target_center (target.x, target.y) distance_threshold 60 if relation to_the_right_of: ok obj_center[0] target_center[0] distance_threshold success_score 1.0 if ok else 0.2 feedback right relation if ok else not enough to the right elif relation above: ok obj_center[1] target_center[1] - distance_threshold success_score 1.0 if ok else 0.2 feedback above relation if ok else not high enough else: ok False success_score 0.0 feedback frelation {relation} not implemented return ok, success_score, feedback評(píng)估器要返回三個(gè)值是否完成、獎(jiǎng)勵(lì)分?jǐn)?shù)、反饋文本。Agent 的下一次動(dòng)作可以依賴(lài)反饋文本進(jìn)行修正。3.5 主流程和運(yùn)行結(jié)果主流程把 Agent、渲染器、評(píng)估器串起來(lái)。下面的 Agent 是一個(gè)模擬實(shí)現(xiàn)假設(shè)它能調(diào)用任意 LLM 的對(duì)話補(bǔ)全接口但在原型里用固定邏輯代替。def mock_agent_action(task, scene_text, feedback): # 實(shí)際項(xiàng)目中這里調(diào)用 LLM輸入 task scene_text feedback輸出結(jié)構(gòu)化動(dòng)作 return { action: place, object: cup, category: cup, relation_target: table, relation: to_the_right_of, distance: medium, } def run(task, max_steps3): scene Scene() scene.objects.append(SceneObject(nametable, categorytable, x120, y128, width60, height20, colorbrown)) feedback for step in range(max_steps): action mock_agent_action(task, scene.to_prompt(), feedback) if action[action] place: ox, oy resolve_position(scene, action[relation_target], action[relation], action[distance]) scene.objects.append(SceneObject(nameaction[object], categorycup, xox, yoy, colorgray)) done, score, feedback evaluate_scene(scene, task) if done: img render_scene(scene) img.save(fresult_step_{step}.png) return {solved: True, steps: step 1, score: score, scene: scene} return {solved: False, steps: max_steps, score: score, scene: scene} task {target: {object: cup, target_object: table, relation: to_the_right_of}} result run(task) print(solved:, result[solved], score:, result[score], steps:, result[steps])運(yùn)行后的預(yù)期結(jié)果中solved為 True場(chǎng)景渲染圖片里桌子的右側(cè)會(huì)出現(xiàn)一個(gè)灰色矩形杯表示關(guān)系滿足。4. 評(píng)估指標(biāo)和關(guān)鍵參數(shù)設(shè)計(jì)4.1 動(dòng)作空間設(shè)計(jì)原則Agentic 空間評(píng)估最容易被忽略的是動(dòng)作空間。設(shè)計(jì)動(dòng)作空間時(shí)有三個(gè)原則第一動(dòng)作必須是語(yǔ)義級(jí)的不能是像素級(jí)或坐標(biāo)級(jí)。例如“place object A to the right of B”是好的動(dòng)作而“set A.x 140, A.y 128”不是。后者會(huì)繞回坐標(biāo)評(píng)估。第二動(dòng)作集合必須覆蓋常見(jiàn)空間任務(wù)的原子操作。至少包含放置、移動(dòng)、刪除、旋轉(zhuǎn)和縮放。否則 Agent 無(wú)法完成復(fù)雜任務(wù)。第三動(dòng)作必須可回滾。多步任務(wù)中Agent 可能把一個(gè)物體放錯(cuò)位置之后必須允許它重新移動(dòng)或刪除否則評(píng)估只能測(cè)一次擺放能力測(cè)不了修正能力。常見(jiàn)動(dòng)作空間如下動(dòng)作參數(shù)說(shuō)明placeobject, relation_target, relation, distance生成一個(gè)新物體并放置在目標(biāo)相對(duì)位置moveobject, relation_target, relation, distance移動(dòng)已有物體到新關(guān)系位置removeobject刪除已有物體rotateobject, angle旋轉(zhuǎn)物體測(cè)試朝向理解set_constraintobject, min_distance_to, value設(shè)置空間約束適合復(fù)雜布局任務(wù)4.2 評(píng)估指標(biāo)評(píng)估指標(biāo)不能只看“最終有沒(méi)有成功”還要看過(guò)程質(zhì)量。建議記錄以下幾類(lèi)指標(biāo)。指標(biāo)計(jì)算方式關(guān)注點(diǎn)任務(wù)成功率完成任務(wù)次數(shù) / 總測(cè)試次數(shù)空間語(yǔ)義理解是否足夠準(zhǔn)確平均步數(shù)成功任務(wù)使用的總步數(shù) / 成功任務(wù)數(shù)Agent 是否高效是否反復(fù)試錯(cuò)動(dòng)作合法率合法動(dòng)作次數(shù) / 總動(dòng)作次數(shù)是否輸出越界、目標(biāo)缺失等非法動(dòng)作關(guān)系準(zhǔn)確率滿足目標(biāo)關(guān)系數(shù)量 / 全部目標(biāo)關(guān)系數(shù)量多約束任務(wù)下逐項(xiàng)拆解能力場(chǎng)景一致性多次運(yùn)行同一任務(wù)的布局 IoU 或距離標(biāo)準(zhǔn)差模型是否穩(wěn)定還是靠隨機(jī)猜修正成功率第一次錯(cuò)誤后第二次是否修正是否具備利用反饋調(diào)整的能力其中“修正成功率”是 Agentic 評(píng)估獨(dú)有的指標(biāo)傳統(tǒng)坐標(biāo)問(wèn)答無(wú)法測(cè)試。這個(gè)指標(biāo)能反映模型的空間推理是否具有閉環(huán)能力。4.3 關(guān)鍵參數(shù)表原型實(shí)現(xiàn)中有幾個(gè)影響評(píng)估結(jié)果的關(guān)鍵參數(shù)需要根據(jù)任務(wù)復(fù)雜度設(shè)置。參數(shù)默認(rèn)值影響調(diào)大影響調(diào)小影響max_steps5最大嘗試步數(shù)容忍更多試錯(cuò)但可能隱藏低效策略更容易失敗嚴(yán)格測(cè)試一次性決策能力distance_threshold60關(guān)系判斷容差更寬松容易誤判為“在右側(cè)”更嚴(yán)格但可能因坐標(biāo)解析誤差而失敗render_size256渲染分辨率圖片更清晰生成成本更高節(jié)省資源但小物體可能看不清action_modesemantic動(dòng)作輸出格式可擴(kuò)展復(fù)雜動(dòng)作限制表達(dá)空間feedback_leveltext反饋粒度模型更容易修正錯(cuò)誤反饋模糊模型難以定位問(wèn)題4.4 與坐標(biāo)輸出評(píng)估的對(duì)比下面的對(duì)比表可以幫你快速向團(tuán)隊(duì)解釋為什么新的框架值得做。維度坐標(biāo)輸出評(píng)估Agentic 生成式評(píng)估輸出形式數(shù)字坐標(biāo)語(yǔ)義動(dòng)作 圖像/場(chǎng)景測(cè)量能力數(shù)字記憶空間語(yǔ)義理解和決策可解釋性坐標(biāo)對(duì)錯(cuò)無(wú)法解釋每一步動(dòng)作可見(jiàn)可回放錯(cuò)誤分析只能看偏差值能定位錯(cuò)在哪個(gè)關(guān)系或哪一步場(chǎng)景擴(kuò)展換地圖要重新定義坐標(biāo)換任務(wù)只需改任務(wù)管理器工程復(fù)雜度低中高需要渲染器和狀態(tài)管理如果只是驗(yàn)證一個(gè)模型能不能記住圖片中的大概坐標(biāo)坐標(biāo)輸出夠用。但如果目標(biāo)是評(píng)估“空間智能”本身Agentic 生成式評(píng)估明顯更合理。5. 運(yùn)行驗(yàn)證與結(jié)果解讀5.1 最小驗(yàn)證用例用上一節(jié)的原型跑三個(gè)任務(wù)放置把 cup 放到 table 右側(cè)。移動(dòng)把 box 移到 circle 上方。多約束把 lamp 放到 desk 左邊并且離 wall 至少 40 像素。每個(gè)任務(wù)跑 10 次記錄成功率、平均步數(shù)、動(dòng)作合法率。5.2 預(yù)期輸出正常通過(guò)時(shí)運(yùn)行日志大概長(zhǎng)這樣task 1: solvedTrue, steps1, score1.0, legal_rate1.0 task 2: solvedTrue, steps2, score1.0, legal_rate1.0 task 3: solvedFalse, steps5, score0.6, legal_rate0.8第三個(gè)任務(wù)失敗可能有兩個(gè)原因模型沒(méi)有輸出set_constraint動(dòng)作或者約束關(guān)系解析器不支持。建議先檢查任務(wù)是否設(shè)計(jì)得過(guò)于復(fù)雜再檢查 Agent 是否理解動(dòng)作空間。5.3 如何判斷模型是真正理解還是猜對(duì)一個(gè)評(píng)估框架如果只報(bào)一個(gè)成功率很容易被隨機(jī)策略干擾。要判斷模型是否真正具備空間智能至少做三個(gè)對(duì)照實(shí)驗(yàn)。首先是動(dòng)作空間消融。給 Agent 提供一個(gè)“隨機(jī)動(dòng)作”基線如果隨機(jī)動(dòng)作也能得高分說(shuō)明評(píng)估器太寬松。正常情況下隨機(jī)動(dòng)作成功率應(yīng)該遠(yuǎn)低于一個(gè)基礎(chǔ) LLM。其次是場(chǎng)景干擾。同一個(gè)任務(wù)換用不同尺寸、不同初始位置成功率如果急劇下降說(shuō)明模型只是在記訓(xùn)練時(shí)的位置模式。最后是反事實(shí)任務(wù)。例如把“桌子右側(cè)”改成“桌子右后方”模型如果仍然只知道“右”而忽略“后”就能暴露出對(duì)方向組合的薄弱理解。5.4 學(xué)習(xí)環(huán)境與生產(chǎn)環(huán)境的差異原型階段用規(guī)則渲染器很容易跑通。生產(chǎn)中接入真實(shí)擴(kuò)散模型做渲染時(shí)需要考慮幾個(gè)額外問(wèn)題。第一渲染服務(wù)建議獨(dú)立部署。LLM 和 ComfyUI 不要求在同一臺(tái)電腦上可以通過(guò) API 調(diào)用。否則生成式模型的顯存占用會(huì)影響 LLM 的批量推理。第二視覺(jué)評(píng)估不能替代結(jié)構(gòu)化狀態(tài)。生成圖像可能因?yàn)楫?huà)風(fēng)問(wèn)題導(dǎo)致視覺(jué)識(shí)別失敗但結(jié)構(gòu)化狀態(tài)里的物體位置是可靠的。生產(chǎn)環(huán)境建議始終維護(hù)一個(gè)結(jié)構(gòu)化狀態(tài)表作為 ground truth視覺(jué)模型只用于額外一致性校驗(yàn)。第三評(píng)估任務(wù)需要版本管理。空間任務(wù)描述、動(dòng)作空間、關(guān)系解析規(guī)則都會(huì)迭代任何改動(dòng)都可能讓歷史評(píng)估結(jié)果不可比。最好給每次評(píng)估打上任務(wù)版本號(hào)。6. 常見(jiàn)問(wèn)題與排查路徑6.1 模型仍然輸出坐標(biāo)而不是語(yǔ)義動(dòng)作現(xiàn)象Agent 返回的動(dòng)作里出現(xiàn)x、y字段甚至直接輸出一段帶坐標(biāo)的 JSON。原因Base LLM 訓(xùn)練數(shù)據(jù)里包含大量“位置信息用坐標(biāo)表達(dá)”的示例模型默認(rèn)沿用這種模式。如果 prompt 里沒(méi)有明確約束動(dòng)作空間模型傾向于回到坐標(biāo)輸出。排查方式打印 Agent 原始輸出檢查是否有坐標(biāo)數(shù)字檢查 prompt 是否給定了合法的動(dòng)作枚舉。解決方式在 prompt 中明確列出可用動(dòng)作并給出幾個(gè)語(yǔ)義動(dòng)作示例。更穩(wěn)妥的做法是使用工具調(diào)用或結(jié)構(gòu)化輸出讓模型只能選擇合法動(dòng)作字段。對(duì)于不合法輸出可以直接丟棄并要求重新生成。6.2 渲染器生成的內(nèi)容不穩(wěn)定同一動(dòng)作兩次結(jié)果不一致現(xiàn)象使用真實(shí)擴(kuò)散模型生成圖像時(shí)同一句話生成的布局每次差異很大評(píng)估結(jié)果不穩(wěn)定。原因擴(kuò)散模型本質(zhì)上是采樣過(guò)程隨機(jī)種子會(huì)影響結(jié)果。而且文本生成圖像模型對(duì)空間關(guān)系的表達(dá)能力有限可能導(dǎo)致“桌子右側(cè)的杯子”被畫(huà)成“桌子前面”。排查方式固定隨機(jī)種子比較兩次生成的差別檢查 prompt 是否包含額外位置詞查看渲染器是否對(duì)輸出圖像做了裁剪或后處理。解決方式原型階段先用規(guī)則渲染器做評(píng)估視覺(jué)模型只做二次展示如果必須用擴(kuò)散模型可對(duì)生成的圖像做后處理約束比如根據(jù)語(yǔ)義分割結(jié)果把物體移動(dòng)到目標(biāo)區(qū)域。評(píng)估指標(biāo)也要以結(jié)構(gòu)化狀態(tài)為主。6.3 Agent 來(lái)回重復(fù)無(wú)效動(dòng)作步數(shù)耗盡現(xiàn)象模型在多個(gè)任務(wù)上不斷輸出相同或者相近的動(dòng)作分?jǐn)?shù)始終停留在低分。原因反饋文本太模糊模型無(wú)法判斷應(yīng)該修改哪個(gè)物體或者max_steps過(guò)大讓模型有機(jī)會(huì)試錯(cuò)而不優(yōu)化策略。排查方式在每一輪打印反饋文本和動(dòng)作觀察模型是否根據(jù)反饋改變動(dòng)作檢查動(dòng)作空間是否缺少修正操作比如move和remove。解決方式增加反饋的定向性例如“cup 仍然在 table 上方需要向右移動(dòng)”而不是只返回“失敗”。也可以縮短max_steps強(qiáng)制模型提高首步質(zhì)量對(duì)于需要長(zhǎng)期規(guī)劃的任務(wù)單獨(dú)引入規(guī)劃器模塊。6.4 評(píng)估結(jié)果和人工判斷不一致現(xiàn)象評(píng)估器認(rèn)為任務(wù)未完成但人類(lèi)看渲染圖覺(jué)得布局合理或者反過(guò)來(lái)評(píng)估器判定成功但人類(lèi)明顯看出物體遮擋嚴(yán)重。原因規(guī)則評(píng)估器只檢查了物體中心點(diǎn)距離關(guān)系沒(méi)有檢查遮擋、邊界和碰撞或者評(píng)估器的容差過(guò)小。排查方式保存最終渲染圖片和結(jié)構(gòu)化狀態(tài)逐項(xiàng)對(duì)照評(píng)估器的判斷條件。解決方式評(píng)估器增加“碰撞檢測(cè)”“遮擋檢測(cè)”“邊界檢查”。例如物體矩形框相交比例超過(guò)一定閾值就降低分?jǐn)?shù)。另一個(gè)重要做法是加入人工復(fù)核抽樣定期檢查評(píng)估器閾值是否合理。7. 最佳實(shí)踐與擴(kuò)展方向7.1 評(píng)估框架有效性檢查清單在正式使用這套框架之前建議先回答以下問(wèn)題動(dòng)作空間是否完全排除了坐標(biāo)輸出渲染器是否維護(hù)一份結(jié)構(gòu)化狀態(tài)而不是只有圖片評(píng)估器是否被隨機(jī)動(dòng)作基線驗(yàn)證過(guò)是否存在“只要隨機(jī)放置一個(gè)物體就能成功”的簡(jiǎn)單任務(wù)是否考慮了遮擋、碰撞、邊界等物理約束每輪是否給 Agent 提供了可執(zhí)行的反饋是否固定了任務(wù)版本和渲染器版本如果這些問(wèn)題的答案有任何一個(gè)是“否”評(píng)估結(jié)果都需要打折扣。7.2 空間任務(wù)設(shè)計(jì)清單生成高質(zhì)量空間任務(wù)比實(shí)現(xiàn)框架本身更需要經(jīng)驗(yàn)。設(shè)計(jì)任務(wù)時(shí)可以從下面幾個(gè)維度逐步加碼單關(guān)系 vs 多關(guān)系先測(cè)“A 在 B 右側(cè)”再測(cè)“A 在 B 右側(cè)且 C 在 A 下方”。靜態(tài) vs 動(dòng)態(tài)先測(cè)“放一個(gè)物體”再測(cè)“移動(dòng)一個(gè)物體并保持其他物體不動(dòng)”。絕對(duì) vs 相對(duì)先測(cè)“物體在區(qū)域右上角”再測(cè)“物體在另一個(gè)物體前方偏左”。無(wú)遮擋 vs 有遮擋先測(cè)“兩個(gè)物體無(wú)重疊”再測(cè)“一個(gè)物體部分遮擋另一個(gè)物體時(shí)如何描述”。無(wú)歧義 vs 有歧義加入“之間”“靠近”等模糊概念測(cè)試模型是否能主動(dòng)澄清或選擇合理默認(rèn)值。任務(wù)庫(kù)建議按照難度分級(jí)每個(gè)級(jí)別至少 20 個(gè)任務(wù)保證評(píng)估穩(wěn)定性。7.3 環(huán)境部署檢查清單如果想在生產(chǎn)環(huán)境接入視覺(jué)生成模型部署前檢查這些項(xiàng)LLM 服務(wù)和渲染服務(wù)是否通過(guò) API 解耦兩條服務(wù)之間是否有超時(shí)、重試和降級(jí)策略生成模型是否固定了模型版本、采樣器和種子策略圖片傳輸格式是 base64 還是文件 URL大小是否可控渲染服務(wù)是否具備 GPU 資源監(jiān)控和排隊(duì)機(jī)制是否保存了每輪動(dòng)作、場(chǎng)景狀態(tài)、渲染圖片和評(píng)估日志方便回溯這里的平衡點(diǎn)是評(píng)估主鏈路盡量輕量重資源操作放到獨(dú)立渲染服務(wù)。不要把視覺(jué)生成模型嵌進(jìn) Agent 的主推理鏈路否則一次評(píng)估的延遲和硬件成本都會(huì)難以接受。7.4 擴(kuò)展方向Agentic 空間認(rèn)知評(píng)估框架有兩個(gè)自然延伸方向。第一個(gè)方向是具身智能。算法評(píng)估里“擺放杯子”可以遷移到機(jī)器人操作任務(wù)中。機(jī)器人收到語(yǔ)義指令后生成操作序列仿真器渲染場(chǎng)景或真實(shí)環(huán)境反饋傳感器數(shù)據(jù)評(píng)估器判斷是否完成任務(wù)。這種評(píng)估可以直接復(fù)用動(dòng)作空間和結(jié)構(gòu)化狀態(tài)設(shè)計(jì)。第二個(gè)方向是訓(xùn)練數(shù)據(jù)增強(qiáng)。一旦評(píng)估框架穩(wěn)定運(yùn)行它生成的大量“任務(wù)-動(dòng)作-場(chǎng)景-反饋”軌跡可以作為多模態(tài)模型的訓(xùn)練語(yǔ)料。把成功和失敗的軌跡都保存下來(lái)再用 Agentic RAG 的方式在推理時(shí)檢索相似空間布局實(shí)例可以讓模型快速理解新場(chǎng)景。從更本質(zhì)的角度看空間認(rèn)知評(píng)估不應(yīng)該停留在“模型能不能說(shuō)出空間關(guān)系”的文本層面而應(yīng)該測(cè)量“模型能不能在空間里做出正確決策”。浙大提出的這個(gè)方向核心貢獻(xiàn)是讓生成式模型成為空間語(yǔ)義的輸出媒介讓 LLM 的文本能力與空間推理能力解耦。實(shí)際落地時(shí)不需要一開(kāi)始就追求真實(shí)圖像生成先把動(dòng)作空間、狀態(tài)管理、關(guān)系評(píng)估器設(shè)計(jì)好再逐步接入更復(fù)雜的渲染后端會(huì)是一條更穩(wěn)妥的路徑。對(duì)剛接觸這個(gè)方向的同學(xué)可以先從本文的規(guī)則渲染原型開(kāi)始跑通一個(gè)任務(wù)再用自己的 LLM 替換 mock agent觀察它在多步空間任務(wù)里會(huì)暴露哪些問(wèn)題。這一步做完再討論生成式圖像和更復(fù)雜的評(píng)估指標(biāo)思路會(huì)清晰得多。