SpatialClaw: 코드를 행동 인터페이스로 삼은 학습 불필요 공간 추론 에이전트
목차
개요
공간 추론(spatial reasoning)은 물체가 어디에 있고, 어떻게 관계 맺으며, 3D 공간에서 어떻게 움직이는지를 판단하는 능력이다. “차가 카메라 쪽으로 다가오고 있는가?”, “어떤 물체가 테이블에 가장 가까운가?” 같은 질문은 인간에게는 쉽지만 최신 비전-언어 모델(VLM)에게는 여전히 어려운 과제다. 이런 질문에 답하려면 깊이, 카메라 포즈, 시간적 대응 관계 같은 여러 종류의 증거를 하나의 일관된 기하학적 논증으로 결합해야 하는데, 현재 VLM은 픽셀만으로 이런 구조적 분석을 안정적으로 수행하지 못한다.
자연스러운 대응책은 VLM에 탐지기, 분할기, 깊이/포즈 추정기 같은 전문 인식 도구를 결합하는 것이다. 그러나 NVIDIA 연구진은 도구를 결합한 에이전트의 능력이 어떤 도구를 갖췄는지뿐 아니라 그 도구를 호출하는 행동 인터페이스(action interface)에 의해 좌우된다고 주장한다. 행동 인터페이스란 도구가 어떻게 호출되고 그 출력이 어떻게 표현되는지, 단계 사이에 어떤 중간 상태를 관찰할 수 있는지, 그리고 답을 확정하기 전에 그 관찰을 바탕으로 추론을 수정할 수 있는지를 규정한다.
이 논문은 코드를 행동 인터페이스로 삼는(code as the action interface) 학습 불필요(training-free) 프레임워크 SpatialClaw를 제안한다. SpatialClaw는 입력 프레임과 인식·기하 프리미티브가 미리 로드된 상태유지(stateful) Python 커널을 유지하며, VLM 기반 에이전트가 이전 출력 전체를 조건으로 한 번에 하나의 실행 가능한 코드 셀을 작성하게 한다. 이를 통해 에이전트는 인식 결과를 유연하게 조합·조작하고, 중간 텍스트와 시각적 관찰 그리고 각 문제의 요구에 맞춰 분석을 적응시킬 수 있다. 정적·동적 3D/4D 공간 추론 과제를 폭넓게 아우르는 20개 벤치마크에서 SpatialClaw는 평균 정확도 59.9%를 달성했고, 최근 공간 에이전트 대비 11.2점 높았다. 두 모델 계열의 여섯 개 VLM 백본에서 벤치마크별·모델별 별도 조정 없이 일관된 향상을 보였다.
방법론
세 가지 행동 인터페이스
논문은 도구 결합 공간 에이전트를 행동 인터페이스를 기준으로 분류한다. 도구를 쓰지 않는 경우 VLM은 외부 연산이나 중간 증거 없이 입력 이미지에 대해 자연어 사고 사슬(chain-of-thought)만으로 추론한다. 도구를 쓰는 경우 기존 공간 에이전트는 주로 두 가지 인터페이스 중 하나를 사용했다.
단일 패스 코드(single-pass code)는 에이전트가 완전한 Python 프로그램을 작성해 한 번만 실행한다. 이 방식은 과제별 연산을 표현할 수 있지만, 중간 마스크·깊이 맵·플롯·런타임 오류를 관찰하기 전에 완전한 전략을 확정해야 한다. 재시도 메커니즘이 구문 오류나 런타임 실패를 복구할 수는 있어도, 중간 시각 증거는 추론 루프에 참여하지 못한다.
구조화된 도구 호출(structured tool-call)은 에이전트가 도구를 이름으로 호출하고 타입이 정해진 입력을 넘긴 뒤 타입이 정해진 출력을 JSON이나 XML 같은 명령 스키마로 받는다. 인식 호출을 위한 깔끔한 인터페이스를 제공하지만, 테스트 시점에만 결정되는 조합(예: 질문에 특화된 방식으로 깊이 추정과 분할 마스크를 연결하는 것)을 미리 정의된 명령 스키마 안에서 표현하기 어렵다.
SpatialClaw는 세 번째 인터페이스를 택한다. 코드를 일회성 프로그램이나 사전 등록된 도구의 디스패치 창구가 아니라, 에이전트가 인식 도구를 순차적으로 배열·조합·진단하는 오케스트레이션 공간으로 다룬다. scipy.spatial.KDTree로 가장 가까운 물체를 찾거나 RANSAC으로 표면 평면을 추정하는 등의 연산은 미리 정의된 인터페이스가 예측할 필요 없이 문제로부터 자연스럽게 도출된다. 깊이 맵, 카메라 기하, 시간적 궤적 같은 공간 결과는 일반 Python 변수로 단계를 넘어 유지되어 검사·조합·수정이 가능하다.
영속 커널 작업 공간
각 예제마다 SpatialClaw는 입력 프레임과 프리미티브 모음(깊이 추정, 분할 등 인식 모듈 및 NumPy, SciPy, Matplotlib 등 과학 라이브러리)이 미리 로드된 영속 Python 커널을 생성한다. 커널은 여섯 개의 공개 진입점을 노출한다.
| 진입점 | 역할 |
|---|---|
| InputImages | 샘플링된 프레임 또는 이미지를 담는다 |
| Metadata | 프레임 레이트, 길이, 프레임 인덱스 등 시간 구조 추론용 정보를 제공한다 |
| tools | Reconstruct(Depth Anything 3 래핑), SAM3(텍스트/점/박스 프롬프트 분할) 등 증거 생성 인식·기하 프리미티브를 노출한다 |
| show(…) | 다음 단계 컨텍스트에 이미지를 직접 삽입해 마스크·깊이 맵 등을 시각적으로 검사하게 한다 |
| vlm | 별도 VLM 세션에 질의한다. vlm.locate는 바운딩 박스를 반환하고 vlm.ask_with_thinking은 상식·예술 양식 인식 등 인식 도구 밖 질문을 처리한다 |
| ReturnAnswer(…) | 후보 답을 제출한다 |
핵심은 커널이 이 상태를 턴 사이에 독립적으로 보존한다는 점이다. 한 단계에서 생성된 객체(분할 마스크, 깊이 맵, 수치 배열, 렌더링된 플롯)는 이후 모든 단계에서 조합·검사·수정용으로 남아 있다. 따라서 에이전트는 전체 분석을 미리 정할 필요 없이, 거친 연산으로 시작해 결과를 검사하고 관찰된 증거에 맞춰 분석을 다듬을 수 있다. tools.Mask, tools.Geometry 같은 유틸리티 함수가 흔한 연산을 단순화하지만, 에이전트는 여기에 제한되지 않으며 배열이나 과학 라이브러리로 어떤 연산이든 직접 구현할 수 있다.
5단계 에이전트 루프
영속 커널은 런타임 환경만 제공할 뿐, 언제 계획하고 언제 행동하며 언제 답을 확정할지는 정하지 않는다. 그래서 SpatialClaw는 커널을 5단계 외부 루프로 감싼다. 스테이지 사이의 규율, 즉 공간 추론을 어떻게 수행할지는 통합 시스템 프롬프트에 인코딩되며, 벤치마크별 엔지니어링이 전혀 없다. 프롬프트는 에이전트가 공간 결론을 가능한 한 여러 증거 원천으로 교차 검증해야 할 주장으로 다루도록 유도한다. 예를 들어 기준 프레임을 먼저 정하고, 기하 질문에는 픽셀 인상보다 미터 단위 연산을 선호하며, 마스크 같은 도구 출력을 시각적으로 검사하고, 수치 크기를 점검한 뒤 ReturnAnswer()를 호출하도록 안내한다.
| 스테이지 | 내용 |
|---|---|
| I. 계획 | 별도 LLM 세션의 플래너가 질문·메타데이터·도구 문서를 받되 입력 프레임은 받지 않고(효율 목적) 분석 단계를 개요로 작성한다. 결과 계획은 메인 에이전트 시스템 프롬프트에 추가된다 |
| II. 코드 생성 | 메인 VLM 에이전트가 질문, 계획, 실행 궤적, 이전 단계의 이미지를 받아 Purpose, Reasoning, Next Goal, Code 네 필드로 응답하며 Code는 다음 분석 동작을 구현하는 Python 셀이다 |
| III. 코드 실행 | 실행 전 정적 검사기가 추상 구문 트리(AST)를 파싱해 허용되지 않은 모듈·안전하지 않은 빌트인을 거부한다. 검증된 셀만 영속 커널에서 실행된다 |
| IV. 피드백 조립 | print() 표준 출력, 실패 시 간결한 트레이스백, 새로 생성된 변수의 타입·길이·크기 요약, show()로 등록된 이미지가 다음 컨텍스트에 추가된다 |
| V. 답 제출 | 에이전트가 충분한 증거를 모았다고 판단하면 ReturnAnswer()로 답을 제출한다. 제출 답이 질문 유형 형식(객관식, 수치, 자유 텍스트)에 맞으면 루프가 종료된다 |
루프는 에이전트가 답을 제출하거나 단계 수가 사전 정의 최댓값에 도달할 때까지 스테이지 II로 돌아간다.
주요 결과
20개 벤치마크 종합 성능
평가는 단일 이미지 공간 추론, 다중 뷰 공간 추론, 일반 공간 추론, 비디오 공간 및 4D 추론, 일반 비디오 이해 다섯 범주의 20개 벤치마크에서 수행됐다. 백본은 Qwen3.5(122B-A10B, 397B-A17B), Qwen3.6(35B-A3B, 27B), Gemma4(31B, 26B-A4B) 등 여섯 개 오픈소스 VLM이다. 1,000개를 초과하는 벤치마크는 고정 시드로 1,000개를 샘플링했고, 모든 벤치마크에서 동일한 하이퍼파라미터·시스템 프롬프트·인식 도구를 사용했다.
SpatialClaw는 여섯 개 백본 모두에서 no-tool(도구 없는 사고 모드) 베이스라인을 일관되게 상회했다. 가장 두드러진 향상은 비디오 공간 및 4D 추론(예: DSI-Bench 평균 18.3% 상승)과 다중 뷰 공간 추론(예: MindCube 평균 14.3% 상승)에서 나타났다. 이 범주들은 프레임이나 시점을 가로지르는 반복적 다단계 기하 연산에서 가장 큰 이득을 보는 영역이다. 26B에서 397B까지의 모델에서 별도 수정 없이 일관된 향상이 유지되어, 설계가 모델별 조정 없이 일반화됨을 시사한다.
주요 백본별 평균 정확도
다음은 일부 백본의 no-tool 대비 SpatialClaw 평균 정확도(20개 벤치마크 평균)다.
| 백본 | No-tool 평균 | SpatialClaw 평균 |
|---|---|---|
| Qwen3.5-397B-A17B | 57.3 | 60.4 |
| Qwen3.6-27B | 55.0 | 62.7 |
| Gemma4-31B | 53.4 | 59.9 |
| Gemma4-26B-A4B | 48.0 | 54.3 |
행동 인터페이스 비교와 어블레이션
같은 도구 모음과 시스템 프롬프트를 공유하되 응답 형식과 인터페이스 설명 섹션만 다른 세 인터페이스를 비교했다(Gemma4-31B 기준). Single-Pass Code는 실행 피드백을 보기 전에 완전한 프로그램 하나를 생성하고, Structured Tool-Call은 JSON 명령 인터페이스로 외부 인식을 추가한다.
| 인터페이스 | 20개 벤치마크 평균 |
|---|---|
| No-tool 베이스라인 | 53.4 |
| Single-Pass Code | 55.2 |
| Structured Tool-Call | 56.7 |
| SpatialClaw(제안) | 59.9 |
SpatialClaw는 모든 벤치마크에서 다른 두 인터페이스를 상회했고, 다단계 기하 조합이 필요한 과제에서 가장 큰 차이를 보였다. 또한 동일 Gemma4-31B 백본으로 기존 공간 에이전트와 비교했을 때, SpatialClaw는 모든 벤치마크에서 베이스라인을 능가했으며 SpaceTools 대비 평균 11.2% 차이로 가장 큰 마진을 확보했다. 베이스라인 중에서는 SpaceTools가 가장 높았는데, 이는 구조화된 도구 호출이 단일 패스 코드보다 대체로 우수하다는 결과와 일치한다.
도구 구성 어블레이션(Gemma4-26B-A4B, 15개 벤치마크, 벤치마크당 500개 서브샘플)도 수행됐다.
| 변형 | 평균 정확도 |
|---|---|
| SpatialClaw(전체) | 56.9 |
| (I) 유틸리티 함수 제거(SAM3/DA3와 과학 라이브러리만 유지) | 56.4 |
| (II) 인식 도구 제거(SAM3/DA3 없음) | 51.4 |
| No-tool 베이스라인 | 48.7 |
변형 (I)이 전체와 거의 동등한 성능을 낸다는 점은, 영속 커널과 과학 프리미티브가 사전 정의 유틸리티 도구의 부재를 대부분 상쇄할 수 있음을 보여준다. 인식 도구를 모두 제거한 변형 (II)도 no-tool 대비 2.7% 향상을 보여, 행동 인터페이스 자체의 기여를 인식 도구와 분리해 입증한다.
기여 요인 분석
논문은 SpatialClaw의 행동 인터페이스가 왜 효과적인지를 여러 각도에서 분석한다.
첫째, 에이전트는 질문 유형에 맞춰 도구 조합을 자발적으로 적응시킨다. 20개 벤치마크의 세분화된 과제 범주를 13개 메타 범주로 묶어 NumPy/SciPy 연산 사용 분포를 분석한 결과, 거리형 질문은 공간 인덱싱(KDTree)과 벡터 노름을 많이 쓰고 방향형 질문은 내적(dot product)과 각도 연산에 의존했다. 이런 특화는 하드코딩되지 않았으며, 범주별 프롬프트 엔지니어링이나 도구 라우팅 없이 질문 의미만으로 기하학적으로 적절한 프리미티브를 선택한 결과다.
둘째, SpatialClaw의 이득은 프레임과 시점을 가로지르는 연쇄적 기하 연산이 필요한 곳에서 가장 컸다. 13개 메타 범주에서 SpatialClaw는 Structured tool-call과 Single-pass Code 양쪽 대비 11/13 범주에서 순우위를 확보했고, 가장 큰 향상(6~9 pp)은 카메라 모션, 다중 뷰/시점 추론, 상대 방향에 집중됐다. 이득이 작은 곳은 백본 VLM이 이미 포화 상태인 시각 인식 과제로, 인터페이스 수준에서 개선할 여지가 적은 영역이다.
셋째, LLM 판정(Gemini-3.1-Pro)으로 구조화된 도구 호출 대비 SpatialClaw 승리 사례를 귀속한 결과, 절반 이상(52.2%)이 코드 조합(여러 도구 호출을 하나의 일관된 프로그램으로 연결)에서 기인했다. 19.5%는 제어 흐름(중간 결과에 따라 분기·반복하는 if/for 문)에서, 나머지 28.3%는 인터페이스와 무관하게 시각 인식이나 운에 좌우되는 승리였다.
한계와 주의사항
SpatialClaw의 가장 큰 남은 병목은 백본 VLM과 그것이 조합하는 인식 도구의 지각 품질이다. 실패 모드 분석에서 남은 오류의 가장 큰 비중이 행동 인터페이스가 아니라 지각에 귀속됐으며, 이는 현재 평가 규모에서는 인터페이스 설계의 추가 개선이 한계 효용에 도달했음을 의미한다.
1,000개 오답 샘플을 LLM-as-Judge로 분류한 결과, 기하 연산 오류가 21%(206건)로 가장 큰 실패 모드였다. 도구 선택/커버리지 오류가 18%(184건), 도구가 지원하지 못하는 시각 판단과 VLM 환각이 각각 14%(140건)로 뒤를 이었다. 즉 지각 증거가 건전해도 3D 좌표·거리·각도·투영 관계를 다루는 기하 추론에서 자주 실수하며, 부적절한 도구를 호출하거나 필요한 중간 단계를 누락하는 경우도 많다. 또한 불일치를 감지하고도 회복하지 못해 잘못된 초기 가설에 고착되거나 수렴 없이 진동하는 사례도 무시할 수 없는 비중을 차지했다.
논문은 향후 개선의 주 축이 백본 VLM과 재구성·분할 모델 양쪽의 지각 품질이 될 것으로 본다. 유망한 방향으로는 도구 선택, 기하 연산 코딩, 에이전트 루프 내 오류 회복을 개선하기 위한 강화학습 적용을 제시한다.
결론
SpatialClaw는 코드를 행동 인터페이스로 삼아, VLM이 영속 Python 커널에서 인식 도구 출력을 여러 단계에 걸쳐 유연하게 조합·검사·수정하게 하는 학습 불필요 공간 추론 에이전트다. 20개 공간 추론 벤치마크와 두 모델 계열의 여섯 개 VLM 백본에서, 모델별·벤치마크별 별도 조정 없이 평균 정확도 59.9%를 달성하고 최근 공간 에이전트를 11.2점 능가했다. 이 결과는 행동 인터페이스 설계가 공간 추론 에이전트에서 큰 영향을 미치면서도 충분히 탐구되지 않은 개선 축임을 보여준다. SpatialClaw는 파라미터를 추가하지 않으므로, 추가 학습 데이터나 파인튜닝 없이 기존 모델에 더 강한 공간 추론 능력을 부여할 수 있어 로보틱스, 임바디드 응용, 보조 시스템처럼 데이터 수집이 어려운 도메인에서 특히 가치가 있다.