http://arxiv.org/abs/2209.11302
링크는 여기에.
1. INTRODUCTION
- 일상적인 작업 : 일반적인 상식적 이해 + 현재 환경에 대한 이해 필요
- 물체의 활용 가능성
- 행동의 논리적 순서
- 작업과 관련된 물체와 행동
- 위 3개가 필요하긴 한데, 이는 모두 현재 환경 상태가 어떤지에 대한 정보가 필요함
- LLM : 멀티태스크 제너레이션에 유리함->로봇의 작업 계획을 짜는데 효과적
- 스코어링 모드 : 가능한 행동들을 나열 후 적절한 행동에 스코어를 줌(강화학습 비슷함)
- 텍스트 생성 모드 : LLM이 몇 개의 다음 단어를 생성하며, 이 단어들은 에이전트가 인식 가능한 행동 및 물체로 매핑됨 ex)LLM이 “피클 병을 꺼낸다”는 문장을 생성 -> “pick up jar” 같은 실행 가능한 행동으로 변환
- 문제는 이 상황에서도 현재 환경 상태가 어떤지에 대한 정보가 없다는 것.
->LLM+환경(상황)인식 시스템인 PROGPROMPT를 도입
PROGPROMPT는 프로그래밍 언어 구조를 도입하여, LLM이 많은 프로그래밍 튜토리얼과 코드 문서가 포함된 방대한 웹 코퍼스에서 훈련되었다는 사실을 이용함.

PROGPROMPT는 아래의 내용을 포함한 파이썬 코드 헤더를 LLM에 제공함.
- 사용 가능한 행동 및 그에 필요한 매개변수의 import
- 환경 내 객체 목록
- 함수 정의(세부 동작은 LLM이 생성할것.)
- 주석(행동의 목적을 설명해서 넣으면 성공률이 올라감)
- Task Planning : 기존 방식의 경우 정의된 도메인 내 탐색 기반 방식을 주로 사용 / 가능한 행동과 객체가 많을수록 탐색 공간이 기하급수적으로 증가하여 확장성이 떨어짐. -> 이 논문에서는 탐색 없이 조건부 추론과 오류 수정이 가능한 계획을 직접 생성.
- Planning with LLMs : LM은 관련 프롬프트만 주어지면 멀티태스크 일반화 능력을 보여줌 / 하지만 로봇 작업 계획에서 유용한 텍스트를 생성하는 프롬프트 설계는 어려움이 있음(자연어 명령 ↔ 실행 가능한 계획 간 짝지어진 데이터 부족) -> 전체 실행 가능한 프로그램 형태로 계획을 직접 생성하도록 LLM을 유도
3. METHOD

A. 로봇 행동 플랜을 파이썬 함수로 표현하기
로봇 작업 계획은 파이썬 함수로 구성, 다음 세 가지 요소로 이루어짐:
- 행동 원시 연산에 대한 API 호출 (예: find(salmon))
- 자연어 주석 – 고수준 작업을 하위 작업으로 나누고 목표를 명확히 전달.
주석은 하위 작업의 의미를 이해 / 계획을 논리적으로 구성 / 불일치하거나 반복되는 출력을 방지하는 데 사용
- assert문 – 전제 조건을 확인하고 충족되지 않을 시 복구 행동 실행 : 계획 실행 전 환경 상태를 확인하며, 상태가 맞지 않으면 이를 보완할 수 있게 함
B. 프로그래밍 언어 기반 프롬프트 구성하기
3번 최상단에 있는 그림 : 그림2는 fprompt라는 함수 = PROGPROMPT의 아키텍쳐를 나타낸 그림.
- 입력 : 가능한 행동(액션) 목록 / 사용 가능한 오브젝트 목록 / 코드 생성 예시 / 생성할 함수 이름(여기서는 microwave_salmon())
- 위의 걸 그대로 LLM에 집어넣음.
- 가능한 행동(액션) 목록의 경우 import문으로 입력. 이를 이용해 가능하지 않은 함수 등을 생성하지 않도록 할 수 있음.
- 사용 가능한 오브젝트 목록은 문자열로 지정해, 없는 오브젝트를 선택하지 않게 함
- LLM을 거쳐서 나온 코드가 바로 사진에 빨간 부분 : Generated Plan 부분.
C. 실행
virtualhome 환경에 연결되어 LLM이 생성한 코드를 실행함.
4~5
중요한 것만 적음.

- SR : 성공 확률
- Exec : 실제로 환경 내에서 실행 가능한 비율
- GCR : 목표 조건 재현율
전반적으로 봤을 때 사과를 던지기나 연어를 냉장고에 넣기는 아주 쉬움. 반면 토스트 만들기, 소파에서 감자칩 먹기, 설거지하기 등은 당연히 안되고, 양치하기는 쉬움, 불끄기나 TV보기는 잘 안되는 경우가 많았다.

그걸 다양한 환경에서 실행한 결과.

로봇 팔이 각 명령에 대해 작동한 결과.