Abstract:
- 사람과 비슷한 행동을 시뮬레이션할 수 있는 생성 에이전트(generative agents)를 소개하는 논문.
- 여기서 소개하는 Generative Agents 가 할 수 있는 것:
- 아침에 일어나서 아침 식사를 준비하고 일을 하러 나감.
- 예술가는 그림을 그리고 작가는 글을 씀.
- 서로를 인지하고 대화를 시작함
- 과거를 기억하고 반성하며 다음 날을 계획함
- Agent Architecture 의 특징:
- 경험 기록: 에이전트의 모든 경험을 자연어로 저장
- 기억의 고도화: 시간이 지남에 따라 기억을 고차원적인 반성(reflection)으로 통합
- 기억 동적 검색: 행동을 계획할 때 필요에 따라 기억을 동적으로 검색
- Planning (계획): 추론된 결론과 현재 환경을 기반으로 고수준 행동 계획 생성. 이를 상세한 행동으로 분해하여 실행 및 반응.
- 관찰(observation), 계획(planning), 반성(reflection). 이런 행동들을 할 수 있음.
- Agent 의 구성 요소:
- Memory Stream (기억 스트림):
- 모든 경험을 자연어로 기록하는 장기 기억 모듈.
- 적합성, 최신성, 중요도를 기준으로 필요한 기억을 검색.
- Reflection (반성):
- 기억을 통합하여 고차원적 추론을 생성
- 에이전트 자신의 행동이나 다른 에이전트에 대한 결론 도출.
- Planning (계획):
- 추론된 결론과 현재 환경을 기반으로 고수준 행동 계획 생성.
- 이를 상세한 행동으로 분해하여 실행 및 반응.
- 생성된 계획과 반성이 다시 기억 스트림에 통합되어 미래 행동에 영향을 미침.
- Memory Stream (기억 스트림):
- Agent 의 실패 요소:
- 관련 기억 검색 실패.
- 기억의 허구적 embellishment (사실이 아닌 내용이나 과장된 요소를 추가하는 현상)
Generative Agent Architecture:
- 목표:
- 개방형 세계(open world)에서의 행동을 모델링하는 것이 목적
- 기존의 대형 언어 모델(LLM)만을 사용하면, 에이전트가 과거 경험을 반영하지 못하거나, 장기적 시나리오를 유지하지 못하는 문제점이 발생했다고 함. 따라서, 과거 경험과 환경 변화를 토대로 에이전트가 의미 있는 행동을 할 수 있는 구조를 제안함.
- 새로운 에이전트 아키텍처:
- 중심 개념: 메모리 스트림(memory stream)
- 에이전트가 겪는 모든 경험을 자연어 형태로 기록해두는 데이터베이스 역할을 함.
- 과거 경험들이 쌓여 가며, 나중에 이 기록들을 기반으로 행동을 계획(planning)하고 결정(decision-making)함.
- 정보 검색 및 요약
- 에이전트가 현재 상황에서 필요한 정보를 얻기 위해, 가장 연관성 있는 기록(relevant records)을 메모리 스트림에서 찾아와야 함.
- 검색된 정보들을 기반으로, 추가적인 요약(synthesis) 또는 고차원적 표현을 만들어냄.
- 예: “과거 경험들을 좀 더 추상적이거나 개념적으로 재해석하여 에이전트의 행동 방향(Reflection)을 결정하는 단계”
- 반복적 요약(Recursive synthesis)과 반영(Reflection)
- 단순히 과거 기록을 그대로 사용하는 것이 아니라, 반복적으로 이를 요약 및 재해석하며 더 높은 수준의 ‘통찰(insight)’을 얻음.
- 이 과정을 통해 에이전트는 장기적 목적이나 일관성을 유지할 수 있게 됨.
- LLM(대형 언어 모델)의 활용
- 이 아키텍처는 자연어로 기록된 모든 데이터(메모리, 계획, 반영 등)를 대형 언어 모델에게 그대로 전달함으로써 이점을 얻음.
- 대형 언어 모델이 가진 문맥 처리 및 추론 기능을 활용하여 행동을 생성함.
- 중심 개념: 메모리 스트림(memory stream)
- 해결하고자 하는 핵심 문제
- 장기적 기억(Long-term Memory) 관리
- 에이전트가 경험을 계속 축적하면서, 그중 “가장 중요한 정보”만을 적시에 검색하고 활용해야 함.
- 메모리 스트림에 정보가 무한히 쌓이면, 다루기 어려워질 수 있으므로, 효율적인 검색(검색 알고리즘), 요약 기법이 필요함.
- 장기적 일관성(Long-term Coherence)
- 기존 LLM만 사용할 경우, 맥락이 길어질수록 대화나 행동이 앞뒤가 맞지 않거나 목적에서 이탈하게 되는 문제가 발생.
- 제안된 아키텍처는 메모리 스트림과 반복 요약/반영 단계를 통해, 동적인 환경에서도 일관된 성격을 유지하고, 합리적인 추론을 가능하게 함.
- 추론 및 계획(Reasoning & Planning)
- 에이전트가 어떠한 액션을 취하기 전에, “과거의 기억”과 “현재 상황”을 바탕으로 자연스럽게 추론하고 계획해야 함.
- 이런 과정을 통해 인간처럼 행동하는 시뮬레이션을 목표로 함.
- 장기적 기억(Long-term Memory) 관리
- Retrieval function:
- 필요한 이유:
- 에이전트가 다양한 환경과 상호작용하면서 쌓는 경험(메모리)은 점점 방대해지고, 이 전체 내용을 그대로 LLM 에게 전달하기는 어렵기 때문
- 리트리벌 함수(Retrieval Function)의 작동 방식
- 에이전트가 현재 상황(쿼리)에서 어떤 기억을 꺼내 쓸지 결정하기 위해 리트리벌 함수가 필요하며, 다음 세 가지 요소를 활용합니다:
- Recency (최근성)
- 얼마 전에 액세스된 기억일수록 점수가 높아집니다.
- 논문에서는 지수적 감소(Exponential Decay) 함수를 적용하며, 시간(예: in-game hours) 경과에 따라 점수를 0.995 비율로 떨어뜨립니다.
- 직관적으로, “아까 막 경험한 일”은 에이전트에게서 잊혀지기 어렵다는 개념입니다.
- Importance (중요도)
- 해당 메모리가 얼마나 “중요하거나 인상적”인지 점수를 매깁니다.
- 예시:
- 일상적 활동(“방 청소”, “밥 먹기”) → 중요도 낮음(1~2점)
- 커다란 사건(“연인과 이별”, “대학 합격”) → 중요도 높음(8~10점)
- 이 점수는 메모리를 생성할 때 LLM에 간단한 프롬프트를 줘서 (1~10 범위) 부여받습니다.
- Relevance (현재 쿼리에 대한 연관성)
- 현재 상황(혹은 쿼리)과 얼마나 밀접한 관련이 있는지 측정합니다.
- 예시:
- “화학 시험 공부를 논의하는” 상황에서, 아침 식사 관련 기억은 낮은 점수를 받음.
- 실제 구현에서는 LLM으로부터 임베딩(embedding) 벡터를 생성한 뒤, 쿼리 벡터와의 코사인 유사도를 계산하여 연관도를 구합니다.
- 종합 점수 계산 및 활용
- 정규화
- Recency, Importance, Relevance 각각 [0, 1] 범위로 정규화합니다. (min-max scaling)
- 가중합
- 최종 점수 = 𝛼_recency × recency + 𝛼_importance × importance + 𝛼_relevance × relevance
- 논문 구현에서는 𝛼들을 모두 1로 설정.
- 선택
- 이렇게 산출된 점수가 높은 메모리부터, LLM의 맥락 윈도우가 허용하는 범위 내에서 선택해 프롬프트에 추가합니다.
- 정규화
- 필요한 이유:
- Reflection:
- 왜 Reflection(추론/반영)이 필요한가?
- 에이전트가 단순 관찰(Observation)만으로는 일반화나 추론을 잘 수행하지 못한다고 함. 그래서 과거 경험으로부터 상위 수준의 통찰을 이용해서 이용해야한다고 주장
- 정의:
- 추상적이고 고차원적인 생각을 표현한 메모리.
- 생성 시점:
- 논문 구현에서는, 에이전트가 인지한 이벤트들의 중요도 합계가 특정 임계값(예: 150)을 넘으면 Reflection을 실행.
- 결과적으로, 에이전트는 하루에 몇 번 정도 Reflection을 수행함(약 2~3회).
- 생성 과정:
- 무엇을 반영할지 결정(질문 생성):
- 최근 메모리(예: 100개)를 훑어보고, LLM에 “이 중에서 추론할 수 있는 3가지 고차원적 질문은 무엇인가?” 를 물어봄.
- 관련 기억 검색(리트리벌):
- 만들어진 질문별로 연관된 Observation/기존 Reflection을 검색함.
- 이렇게 검색된 기억들을 바탕으로, LLM에게 “이 기억들로부터 어떤 통찰을 추출할 수 있나?” 를 재차 물어봄.
- 통찰(Insight) 도출 및 저장:
- LLM은 근거가 된 기억을 함께 명시하며 고차원적 통찰(Reflection)을 제시함.
- 이 통찰(Reflection)은 다시 메모리 스트림에 저장되어, 추후 검색 시 활용 가능하게 됨.
- 무엇을 반영할지 결정(질문 생성):
- 왜 Reflection(추론/반영)이 필요한가?
- Planning:
- 왜 Planning이 필요한가?
- 대형 언어 모델(LLM)을 이용해 상황별 행동을 즉석에서 생성하면, 일시적으로는 “그럴듯한 행동”을 할 수 있으나, 시간 축이 길어질수록 중복되거나 앞뒤가 맞지 않는 행동이 발생할 수 있음.
- 사람으로 치면 내가 어떤 행동을 했는지 금방 까먹는.
- 계획 사용 방식:
- 장기 계획 생성
- 장기 계획에 맞게 계획을 세분화해서 생성
- 동적인 계획 변경 기능
- 왜 Planning이 필요한가?
'Generative AI > Agent' 카테고리의 다른 글
LLM Agent Course (3) Agentic AI Frameworks (0) | 2024.12.27 |
---|---|
WebShop: Towards Scalable Real-World Web Interaction with Grounded Language Agents (0) | 2024.12.27 |
Summary of LLM Agent Framework (0) | 2024.12.23 |
Cognitive Architectures for Language Agents (0) | 2024.12.23 |
LLM Agent Course - (2) LLM agents (0) | 2024.12.22 |