Index
SceneMem-Bench · 설계 참고 · 2026-09-02

OpenRAL에서 가져올 것 — 메모리 구성과 Routine 가족

OpenRAL(github.com/OpenRAL/openral, 커밋 d3b6262)의 메모리 층과 그 원전 논문을 우리 벤치의 write-phase 전략과 D Routine 설계에 대조한 참고 문서. 코드 이식 대상은 없고, 가져올 것은 스키마 결정과 문헌 앵커다.

대상 독자: 벤치 설계·논문·데이터 생성팀출처 로그: claude/260902/research-openral_assessment.md
요약
  • 메모리. OpenRAL은 문헌의 메모리 패턴을 섹션별로 하나씩 채택한 조립품이다. 우리에게 유효한 참고는 7개 결정이고, 그중 4개는 기존 산출물로 측정만 하면 되는 분석 후보, 2개는 평가를 바꾸는 전략 추가 후보, 1개는 기록만이다.
  • Routine. D1 배치는 TidyBot형으로 앵커링된다. D3 금지는 허용 표면이 여럿이면 임의 배치도 대부분 성공해 변별력이 없으므로 폐기하고, 실행 중 교정(Stateful 하드 변형)으로 흡수한다. Routine을 Direct / Stateful로 나누는 축은 "규칙의 증거가 심기 영상에서 오는가, 로봇 자신의 실행에서 오는가"다.
  • 새 지표. 규칙 유도 → 규칙 적용의 2단 귀속. write-phase 산출물에서 계산되고 전략을 바꾸지 않는다.
  • 결정 필요 9건은 마지막 표에 모았다. 지금 권고는 분석 2건, 데이터 설계 2건(D3 폐기·Direct/Stateful 분기), 지표 필드, 서지. 평가 변경 2건은 v1 이후.
Part A

메모리 — OpenRAL이 결정한 것과 우리가 재야 할 것

A.1 구조 한 장

두 겹이다. 센서가 자동으로 채우는 기하 메모리와, LLM만 쓸 수 있는 의미 메모리. 설계문서 원문은 "씬 그래프는 머그가 어디 있나, MEMORY.md는 이 집은 어떻게 하는 걸 좋아하나"다.

기하 SpatialMemory의미 MEMORY.md
누가 쓰나자동. 매 틱 디텍션을 ingest, 거리 연관으로 같은 노드면 pose 갱신·last_seen_ns·observation_count++LLM만. memory_write op 4종. 자동 기록 없음
내용노드 object/place/room/agent, map 좌표 pose, label, 용기 여부, 내용물 가림 여부, 첫·마지막 관측5섹션 한 줄 사실, 중요도·시각·status
읽기recall_object → pose + 접근 시점 + 열어야 할 용기; resolve_place → nav goal매 틱 ## MEMORY 전량 주입(cap 기본 0=무제한). cap 시 상위만 + archive 키워드 검색
영속JSON 씬 그래프파일 + .archive.jsonl, 미션 간 지속

의미 메모리의 실제 모습. 아래 줄은 저장소 문서·테스트 fixture에 있는 원문 예시를 섹션 형식대로 배열한 것이다.

# MEMORY.md   <!-- schema_version: 0.1 -->

## Object-Location Log
- [imp:0.90 ts:2026-06-20T09:00 st:stale  ] mug on the kitchen table
- [imp:0.85 ts:2026-06-24T18:12 st:current] mug in the dishwasher

## User Preferences
- [imp:0.90 ts:2026-06-24 st:current] Clothes go in the bedroom drawer.

## Learned Lessons / Corrections
- [imp:0.70 ts:2026-06-25 st:current] Grasp mugs by the handle.

## Open Tasks / Commitments
- [imp:0.60 ts:2026-06-25 st:current] bowls in drawer   (decompose-mission이 add, 검증 후 supersede)

op 의미. add는 추가, update는 대상 본문 교체(구본은 archive), supersede는 대상을 stale로 바꾸고 새 줄 추가, delete는 제거(archive). 쓰기마다 consolidate()가 같은 (섹션, 내용) 중복을 랭크 최고 하나만 남긴다. 랭크는 current > stale → importance → 최근성.

A.2 결정 하나하나와 그 원전

OpenRAL 자체는 새 알고리즘을 내지 않았다. 각 섹션·op가 어느 논문의 어떤 장치를 옮긴 것인지가 우리에겐 더 쓸모 있다. 논문에 인용할 때는 OpenRAL이 아니라 이 원전을 인용한다.

결정OpenRAL 구현원전원전이 한 일 · 수치
사건과 규칙을 분리 저장preferences는 규칙 문장만("clothes go in the bedroom drawer"), EDIT in placeTidyBot — Wu et al., AuRo/IROS 2023, arXiv 2305.05658사용자 배치 예시 몇 개 → LLM 요약으로 일반 규칙 → 미본 물체에 적용. 벤치 미본 물체 91.2%, 실물 85.0% (abstract 확인 260902)
교정 → 증류 → 회수lessons APPEND; verify-outcome 실패 시 addDROC — Zha et al., 2023, arXiv 2311.10678실행 중 언어 교정을 task-level/skill-level 지식으로 증류, 텍스트·시각 유사도로 회수. 1라운드 교정 수 절반, 2회 반복 후 거의 불필요 (abstract 확인)
시간적 supersedeobject_locations 재관측 시 supersede→stale 보존Zep (2025) — 인용 전 id 대조사실에 유효 구간을 붙여 옛 사실을 무효화하되 보존
add/update/delete + 중복 병합apply() / consolidate()Mem0 (2025) — 인용 전 id 대조새 정보마다 ADD/UPDATE/DELETE/NOOP 판단, 병합
core/archive 페이징to_context_block(cap) + .archive.jsonl + memory_searchMemGPT — Packer et al., 2023, arXiv 2310.08560컨텍스트 안 core memory와 밖 archival memory, 함수 호출로 페이징
importance 부여LLM이 0–1 지정, 랭크 current>stale>imp>recencyGenerative Agents — Park et al., 2023, arXiv 2304.03442recency×importance×relevance 회수, reflection으로 상위 통찰 생성
읽기/쓰기 분리LLM은 op만 내고 파일은 코드가 쓴다Statler — Yoneda et al., 2023, arXiv 2306.17840world-state reader/writer 분리

A.3 우리 write-phase와 축별 대조

축OpenRAL우리 (sbench_online · exec 전략)
저장 단위규칙 문장 (사건은 기하 쪽)사건 라인 [t=k] / 프레임 태그(tagmem) / 오라클 textlog
쓰기 시점LLM이 필요할 때만, "SPARINGLY"매 턴(unified) / 세그먼트 종료(rollforward) / 하네스(textlog)
구조5섹션평문
상태 표기current / stale없음. rewrite는 덮어쓰고 append는 남긴다
중요도LLM 부여없음. tagmem cap 8은 시간순
용량 초과상위 cap 유지 + 나머지 archive 검색rewrite 12줄 / tagmem cap 8 축출(폴백)
검색키워드 매칭(임베딩 없음)없음, 전량 재투입
매체텍스트만 (S2는 픽셀을 보지 않음)텍스트 + 이미지(frames / vis / tagmem)
영속파일, 미션 간에피소드 내 (+initial_memory_lines 이어붙임)

A.4 참고 포인트 7개

각 항목은 "무엇을 봤나 → 우리에게 어떤 질문이 되나 → 성격"이다. 분석은 기존 산출물로 측정 가능하고 평가를 바꾸지 않는다. 전략 추가는 평가지가 바뀌므로 사용자 결정이며, 기존 전략을 개조하는 것이 아니라 외부 방법을 하나 더 넣는 형태만 정당하다.

P1 규칙 vs 사건 저장 분석 전략 추가

OpenRAL은 규칙만 자필로 남긴다. 우리 노트는 사건 나열이다. 질문: write-phase 최종 노트에 일반화 문장이 있는 비율(규칙 유도율)은 얼마인가. D 가족의 핵심 지표가 된다(B.6). 전략 후보: "섹션형·타입드 op·희소 쓰기 노트" 1종.

P2 current / stale 상태 분석 전략 추가

옛 위치를 지우지 않고 stale로 둔다. 질문: C Restoring에서 rewrite 전략이 append보다 나쁜가, 즉 덮어쓰기가 "원래 상태"를 잃는가. 전략 후보: 노트에 supersede 표기를 허용하는 변형.

P3 중요도 cap vs 시간순 cap 분석

OpenRAL cap은 중요도→최근성, 우리 tagmem cap 8은 시간순. 질문: 축출된 태그가 사건인가 규칙인가. hidden 행과 D에서 시간순 cap이 규칙을 밀어내는지.

P4 archive + 검색 페이징 읽기 조건 추가

cap 밖은 검색으로 접근 가능하다. 우리 cap-8 조건은 축출이 곧 소실이다. 후보: "cap 밖은 검색 가능" 완화 조건 1개. 평가 변경.

P5 자동 기하 vs 자필 의미 해석 프레임

관측 유도 메모리와 자필 메모리의 이중화. 우리 frames/vis(관측 유도) vs notes/tagmem(자필) 축을 설명하는 discussion 프레임으로 쓸 수 있다.

P6 consolidate 중복 제거 분석

같은 사실을 다시 쓰면 병합한다. 질문: 우리 append 노트의 중복 라인 비율과 길이 팽창은 얼마인가. 긴 에피소드(L3)에서 특히.

P7 희소 쓰기 문장 기록만

"Use SPARINGLY… Do NOT store transient world state." 우리 프롬프트를 바꾸는 것은 튜닝이므로 기록만 한다.

A.5 논문 문장 후보

  • Related work. 배포용 에이전트 스택은 이미 자기 관리 메모리 파일(물체 위치 로그, 사용자 선호, 교훈)을 설계에 넣고 있으나, 그 메모리가 행동 성공에 기여하는지를 재는 벤치는 없다. OpenRAL은 이 스키마를 시스템으로 구현한 사례로 한 줄 언급(URL 인용).
  • Discussion. 배포 지향 메모리 스키마는 물체 위치(A), 미완 과제(B), 규칙(D)에는 자리를 두지만 "원래 상태"(C)에는 두지 않는다. stale 엔트리를 보존하면서도 복원에는 쓰지 않는다.
  • Discussion. 실기 테스트에서 특정 모델만 집합 목표를 분해했다는 보고는 우리 "전략 순위의 모델 종속" 발견과 같은 방향이다.
Part B

Routine — D1·D3를 문헌에 앵커링하고 D3의 A5 충돌을 푼다

B.1 현재 상태

하위정답의 정체질의 문장(260821 확정)미해결
D1 배치그 집의 규칙 → 표면 클래스(any_instance_ok)… place it in or on the kind of place where things usually go in this house배치 4/4 저작 시 find/restore 행 감소. 홀드아웃은 규칙 근거에 없는 카테고리여야 함
D2 절차앞선 반복 유닛의 순서Put one more egg in the basket, the way the others were done in this house순서 제약 있는 task 조합 필요(가장 저렴)
D3 금지안 하는 것이 정답Put the mug down somewhere it can stay — somewhere this house would put itA5 충돌 + 임의 배치도 대부분 성공(변별력 없음) → 폐기, B.4 교정 변형으로 흡수

편당 최대 1행, 총 ~90행(D1 40 · D2 30 · D3 20), 생성은 데이터팀 소관. 논문 §3은 완성태로 기술하고 PH-3에 수치가 들어간다.

B.2 OpenRAL 섹션과의 대응

OpenRAL우리비고
preferencesD1 배치TidyBot형. 규칙 문장 저장·EDIT in place
lessonsD3 금지DROC형. 교정에서 증류·APPEND
home_mapD 보조집 고유 사실("왼쪽 캐비닛이 쓰레기통"). 우리는 A로 흡수
open_tasks · MissionStateB ResumingD2가 아니다. 이어하기이지 순서 학습이 아님
playbook—사람이 쓴 SOP. D2 "관찰에서 유도한 절차"와 무관

B.3 D1 배치 — TidyBot 프로토콜을 설계 패턴으로

TidyBot의 절차는 세 단계다. 사용자의 배치 예시 몇 개를 받고, LLM이 이를 일반 규칙으로 요약하고("밝은 색 옷은 서랍, 어두운 색은 옷장"), 처음 보는 물체에 그 규칙을 적용해 놓을 곳을 고른다. 벤치에서 미본 물체 91.2%, 실물에서 85.0%였다. 우리 D1에 항목별로 대응된다.

TidyBot우리 D1설계 결정
사용자 예시 배치 k개심기 구간에서 관찰된 배치 4/4반례 0. val_406의 3/5는 "경향"이라 실패(260821)
LLM이 규칙 요약메모리에 규칙이 유도되는가측정 대상(B.6 규칙 유도)
미본 물체에 적용홀드아웃 = 규칙 근거에 없는 하위 카테고리같은 카테고리면 find로 풀린다. 규칙은 상위 클래스 위에 정의(예: 작은 식기류 → dresser)
receptacle 선택 정확도표면 클래스 any_instance_ok에셋클래스↔낱말 매핑(dresser↔chestofdrawers)을 채점기가 들어야 함
사용자별 다른 규칙(개인화)반사실 짝(A6)같은 집·같은 홀드아웃·다른 규칙 2편 → 정답 표면이 갈려야 함. blind ≤ 1/K가 구조적으로 보장됨
하드닝 후보 — 규칙 2개/편. 식기류→dresser, 의류→closet 두 규칙을 심고 홀드아웃 1개를 묻는다. DROC의 관련성 회수와 같은 질문("여러 규칙 중 맞는 것을 꺼내는가")이 되고, 오답을 세 가지로 진단할 수 있다. 규칙 없음(미끼 표면), 잘못된 규칙 적용(closet), 인스턴스 오류. 편당 1행 상한은 그대로다.
리스크. 반상식 규칙은 장면의 자연스러움을 떨어뜨린다. 상식과 직교인 규칙(어느 방의 서랍장인지, 두 서랍장 중 어느 클래스인지)이 더 안전하다. 미끼는 심지 않아도 생긴다. val_406에서 TV장은 출처 2회·목적지 0회였다. "자주 본 표면 ≠ 물건 두는 표면"을 그대로 쓴다.

B.4 Routine을 Direct / Stateful로 나누기 — 규칙 증거의 출처

TidyBot식 설정을 그대로 쓴다. 심기에서 옷→박스, 리모컨→쇼파, 사과→식탁을 보여주고, 처음 보는 옷을 "정리해"라고 시킨다. 우리 정의에서 Direct는 요청 이전의 회고 기억으로 푸는 것, Stateful은 실행 중 갱신되는 상태가 필요한 것이다. 그러면 두 모드는 규칙의 증거가 어디서 오느냐로 갈린다.

DirectStateful
규칙의 증거심기 영상에서 관찰: 옷→박스, 리모컨→쇼파, 사과→식탁로봇 자신의 실행: 앞 k개는 목적지를 지정받아 놓음
질의"이 스웨터 정리해" (처음 보는 옷)"셔츠는 박스에" → "양말은 박스에" → "리모컨은 쇼파에" → "나머지도 정리해" (재킷, 다른 리모컨, 바나나: 목적지 미지정)
메모리 없으면규칙을 모름자기가 뭘 어디 놨는지 모름 → 규칙을 못 세움
정답표면 클래스 (any instance)남은 아이템마다 표면 클래스
반사실 짝같은 집, 다른 심기 규칙첫 지시들을 옷→옷장으로 바꾼 쌍둥이 편 → 재킷 정답이 옷장

Stateful이 성립하는 이유는 우리 온라인 플래너가 턴 간 상태를 갖지 않고 노트만 넘기기 때문이다. "나머지도 정리해" 시점의 입력에는 목적지 정보가 없다. 노트에 "셔츠·양말→박스, 리모컨→쇼파"를 남긴 모델만 재킷을 박스에 넣는다. 같은 규칙과 같은 홀드아웃에 증거 출처만 바꾸므로, 논문 제목의 회고 기억 vs 온라인 실행 상태를 한 가족 안에서 정확히 대비시킨다.

Stateful 하드 변형 = 실행 중 교정 (DROC형, 옛 D3의 대체). 심기에서 옷→박스를 보여준 뒤, 실행 중 첫 옷을 박스에 넣은 직후 그 옷이 옷장으로 옮겨지는 장면을 보게 한다. 이후 옷은 옷장이 정답이다. 회고 기억만 쓰면 계속 박스로 가서 틀리고, 노트에서 규칙을 갱신한 모델만 맞는다. 정답이 하나라 랜덤성 문제가 없고, OpenRAL의 supersede가 재는 것이 바로 이 능력이다.
왜 D3 금지형은 폐기하나. "X에 두지 마라"는 규칙은 허용 표면이 K개면 임의 배치도 (K−1)/K로 성공한다. 상식 최다 표면을 X로 골라도 물리적 배치의 자유도가 커서 변별력이 낮다. 교정 변형은 대안 표면을 지정하므로 이 문제가 없다.
데이터팀 확인 필요. ① Stateful 기본형은 지시가 순차로 들어와야 한다. type2의 반복 유닛(put ×3) 구조를 재사용할 수 있는지. ② 교정 변형은 질의 구간 중 세계 변화가 로봇 시야에 들어와야 한다. 현재 생성기는 개입 구간의 변화만 만든다.

B.5 D2 절차 — OpenRAL에서 얻을 것 없음

OpenRAL의 절차 지식은 사람이 쓴 플레이북이고, 과제 큐는 이어하기(B)다. 관찰에서 순서 규칙을 유도하는 장치는 없다. 260821 설계(type2 반복 유닛에 순서 제약을 얹는다, 가장 저렴)를 그대로 둔다.

B.6 새 지표 — 규칙 유도 → 규칙 적용 2단 귀속

D 가족의 실패는 두 곳에서 날 수 있다. 규칙을 메모리에 만들지 못했거나, 만들었는데 홀드아웃에 적용하지 못했거나. 둘을 나누면 C5(단계별 지표)와 정합한다.

  • 규칙 유도. write-phase 최종 메모리에 규칙 문장이 있는가. 구조화 필드(rule_stmt)를 요구하거나, 오라클 규칙과 대조하는 LLM 판정 yes/no. 사건 나열만 있으면 "유도 없음".
  • 규칙 적용. 홀드아웃 행동 성공 여부(기존 채점).
적용 성공적용 실패
유도 있음정상 경로grounding·제어 실패 (규칙은 알았다)
유도 없음인퍼런스 시점 추론 또는 상식 (사건 나열로 풂)기억 실패

기존 write-phase 산출물로 계산된다. 전략을 바꾸지 않으므로 평가지 튜닝이 아니다. TidyBot의 "요약이 예시 나열보다 일반화가 낫다"는 주장을 우리 데이터로 재검하는 셈이 된다.

B.7 데이터팀 전달용 저작 요건

D1 편

  • 규칙은 상위 클래스 → 표면 클래스. 배치 4/4, 반례 0
  • 홀드아웃은 규칙 근거에 없는 하위 카테고리, 어느 사건에도 등장 안 함
  • 반사실 짝: 같은 집·같은 홀드아웃·다른 규칙
  • 미끼 표면 집계(src/dst 횟수) 동봉. 채점엔 안 씀
  • 선택: 규칙 2개/편
  • 스키마: rule{type, value, utterance_word}, evidence[], holdout, answers[].any_instance_ok

D3 편

  • 교정 사건: X에 놓임 → 옮겨짐, 서로 다른 물체 3회+
  • X는 상식 최다 표면, 허용 표면 K ≥ 2
  • 쌍둥이 편(금지 없음) 필수, 나머지 동일
  • 채점: 허용=성공 / X=위반 / 무행동=미완, 짝 채점 병기
  • 스키마: rule{type:"forbidden_surface", value, evidence[]}, allowed_surfaces[], twin_id
Part C

결정 필요 목록

#항목성격영향·비용권고
1규칙 유도율 분석(P1)분석기존 노트 산출물, LLM 판정 소액지금
2rewrite vs append의 C 격차(P2), cap 축출 종류(P3), 중복률(P6)분석기존 산출물지금
3D3 금지형 폐기 → Stateful 교정 변형으로 흡수데이터 설계금지형은 변별력 없음(사용자 지적 260902)확정 권고
4D1 하드닝(규칙 2개/편, 상위 클래스 규칙)데이터 설계저작 비용↑, find/restore 행 추가 감소선택
5Routine 2단 지표 필드(rule_stmt)eval 스키마소규모지금
6섹션형·타입드 op·희소 쓰기 전략 추가(P1)평가 변경write-phase 1전략 × 모델 × 편v1 이후
7supersede 표기 변형(P2), archive 검색 읽기 조건(P4)평가 변경전략·조건 추가v1 이후
8related work 인용: 원전 7편 + OpenRAL 한 줄논문Zep·Mem0 등 5편 arXiv 대조 필요지금
9Routine Direct/Stateful 분기(증거 출처) 채택 + 데이터팀 확인 ①②데이터 설계PH-3 전제. Stateful은 type2 순차 지시 재사용 가능 시 저비용지금