Abstract:
- 대형 언어 모델(LLMs)은 게임, API, 컴파일러 등 외부 환경과 상호 작용하며 목표 지향적인 에이전트로 점점 더 많이 사용되고 있음. 예를 들어, LLM이 게임을 하거나 API와 상호 작용하며 코딩 문제를 해결하는 데 사용되고 있다.
- 이러한 언어 에이전트가 시행착오를 통해 더 나은 성능을 학습하는 것은 여전히 큰 과제임. 이를 위한 방법으로 자주 사용되는 강화학습 방법은 (RL)일반적으로 매우 많은 훈련 샘플과 모델 파인튜닝을 필요로 하여 학습 비용이 높아지는 단점이 있기도 함.
- 저자들은 이 문제를 해결하기 위해서 Reflexion 이라는 프레임워크를 제안한다. 이 프레임워크는 모델의 내부 가중치를 업데이트하는 대신 언어적 피드백을 통해 언어 에이전트의 성능을 향상시키는 방법임.
- Reflexion은 에이전트가 작업을 수행하면서 받는 피드백에 대해 언어적으로 성찰(reflection)하며 이를 통해 학습하는 방법임.
- Reflexion의 작동 방식:
- 에이전트가 작업을 수행하고 피드백(점수, 오류 메시지 등)을 받으면, 이를 바탕으로 성찰적 텍스트를 작성한다.
- 성찰적 텍스트는 에이전트가 무엇이 잘못되었는지, 무엇을 배웠는지, 어떻게 개선할 수 있는지를 작성한 기록임.
- 이러한 성찰적 텍스트는 “에피소드 메모리 버퍼”에 저장되며, 이후 시도에서 에이전트가 이 기록을 참고하여 더 나은 결정을 내리도록 도와줌.
- Reflexion의 주요 특징:
- Reflexion은 다양한 형태의 피드백을 수용할 수 있는 유연성을 가지고 있음.
- 피드백은 스칼라 값(숫자 점수) 또는 자유 형태의 언어(오류 메시지, 성공 표시 등)일 수 있다.
- 아니면 피드백은 외부 소스(환경 제공 점수나 신호) 또는 내부에서 시뮬레이션된 소스일 수도 있음.
- 저자들은 Reflexion이 다양한 작업(순차적 의사결정, 코딩, 언어 추론)에서 기존의 기본 에이전트보다 높은 성능을 달성할 수 있다고 한다.
- https://github.com/noahshinn/reflexion
Introduction:
- 최근 연구들인 ReAct, SayCan, Toolformer, HuggingGPT, WebGPT 등은 대형 언어 모델(LLM)을 기반으로 한 자율적 의사결정 에이전트의 가능성을 보여주었음. 이러한 방법들은 LLM을 이용해 텍스트와 ‘행동’을 생성하고, 이 행동을 API 호출이나 환경에서 실행하도록 하는 방법임. 그러나 이러한 접근 방식은 대규모 파라미터를 가진 거대한 모델에 의존하기 때문에, 주로 컨텍스트 예시를 통해 에이전트를 학습시키는 방식에 머물러 있음.
- 본 논문에서는 이전 실패로부터 학습하도록 돕는 언어적 강화 학습 기반의 대안 접근법인 Reflexion을 제안함.
- Reflexion은 환경에서 받은 이진 또는 스칼라 피드백을 텍스트 요약 형태의 언어적 피드백으로 변환하며, 이 피드백은 다음 에피소드에서 LLM 에이전트가 참고할 수 있는 추가 컨텍스트로 제공됨. 그리고 이러한 자기 성찰 피드백은 에이전트에게 더 나은 방향을 제시하도록 도와줌.
- 하지만 유용한 반영적 피드백을 생성하는 것은 쉽지 않다고 함. 이 논문은 모델이 어디에서 실수했는지 이해하고, 향상 가능한 구체적인 통찰을 포함한 요약을 생성할 수 있도록 하는 방법들을 탐구함. 이를 위해서 1) 간단한 이진 환경 피드백, 2) 일반적인 실패 사례에 대한 사전 정의된 휴리스틱, 3) 에이전트의 자체 평가(예: 의사결정에는 LLM을 통한 이진 분류, 프로그래밍에는 자체 작성한 단위 테스트) 를 사용한다고 한다.
- Reflexion의 이점과 한계:
- Reflexion은 기존 강화 학습 방식(정책 기반 학습, 가치 기반 학습)과 비교하여 여러 장점을 가짐
- 가벼운 접근법으로, LLM을 재학습할 필요가 없음.
- 피드백이 보다 구체적이고 행동의 변경 방향을 직접적으로 제시할 수 있음.
- 이전 경험에 대한 명시적이고 해석 가능한 에피소드 기억을 허용함.
- 향후 에피소드에서 명확한 행동 지침을 제공함.
- 하지만 Reflexion은 LLM의 자체 평가 능력(또는 휴리스틱)에 의존하며, 성공에 대한 공식적인 보장이 없음. 다만, LLM의 능력이 개선됨에 따라 이러한 한계 역시 개선될 가능성이 큼.
Reflexion 프레임워크:
- Reflexion은 세 가지 서로 다른 모델을 사용하는 모듈형 구조로 설계됨:
- Actor (행동자) 모델 Ma: 텍스트와 행동을 생성하는 대형 언어 모델(LLM)
- Evaluator (평가자) 모델 Me: Actor가 생성한 출력의 품질을 점수화함.
- Self-Reflection (자기-성찰) 모델 Msr: Actor가 스스로 개선할 수 있도록 언어적 강화 학습 신호를 생성함.
- 각 모델에 대해 상세히 설명하고, Reflexion 프레임워크 내에서 이들이 어떻게 협력하여 작동하는지를 보자:
- Actor:
- LLM을 기반으로 하며, 환경 상태를 관찰하여 필요한 텍스트와 행동을 생성하는 역할을 함.
- 궤적을 생성하는 역할을 하는데 이 궤적은 행동의 연속적인 기록을 의미함. 한번만 생성하는게 아니라 연속적으로 생성하는거니까.
- Chain of Thought 나, ReAct Agent 로 구현될 수 있음.
- 메모리 (mem) 구성 요소가 Actor 에 추가되서 에이전트에 추가적인 컨택스트를 제공해줄 수 있음. 이 메모리는 게속해서 필요에 따라 업데이트 됨.
- Evaluator (평가자):
- Evaluator는 Actor가 생성한 출력의 품질을 평가하는 역할을 함.
- Evaluator는 생성된 궤적(trajectory)을 입력으로 받아, 해당 과제 맥락에서의 성능을 반영하는 보상 점수를 계산함.
- LLM 자체를 Evaluator 로 사용하거나, 특정 평가 기준에 맞춰 사전 정의된 휴리스틱 함수를 사용하거나, 정확한 일치(Exact Match, EM) 채점을 기반으로 한 보상 함수를 사용하느 것으로 구현될 수 있음.
- Self-reflection (자기-성찰):
- Self-Reflection 모델은 LLM으로 구현되며, Reflexion 프레임워크에서 언어적 자기-성찰을 생성하는 모듈임.
- Self-Reflection 모델은 희소 보상 신호(예: 성공/실패와 같은 이진적 상태), 현재 궤적, 지속적인 메모리(mem)를 입력으로 받아 풍부하고 구체적인 피드백을 생성함.
- 이 피드백은 스칼라 보상보다 더 구체적이며, 에이전트의 메모리 mem에 저장될거임.
- 다단계 의사결정 예시에서 한 단계에서 실패했다면 “이러한 상황에서 다른 행동 a’_i를 취했어야 한다” 와 같은 걸 mem 에 저장하는 것.
- 이후 시도에서 에이전트는 과거 경험을 활용해 더 나은 결정을 내리게 될거임.
- Memory (메모리);
- Reflexion 프로세스에서는 단기 메모리와 장기 메모리를 구분하는 개념이 핵심임.
- 단기 메모리:
- 추론 과정에서 최근의 세부 정보가 포함된 것.
- 장기 메모리:
- Self-Reflection 모델이 생성한 출력(즉, 자기-성찰 피드백)을 저장되는 것.
- 이 기억은 축약되고 중요한 경험을 담아, 에이전트가 반복되는 시도에서 실행할 액션에 영향을 미칠거임
- Actor:
- The Reflexion process (Reflexion 과정):
- a) 초기 시도:
- Actor는 환경과 상호작용하여 첫 번째 궤적 τ0을 생성함.
- b) 평가:
- Evaluator는 τ0에 대한 점수 r0을 계산
- c) 자기 성찰:
- Self-Reflection 모델은 {τ0, r0} 집합을 분석하여, r0를 LLM이 활용할 수 있는 피드백 형태로 확장한 요약 sr0을 생성함.
- 이 피드백은 mem 에 저장됨.
- d) 반복:
- Actor, Evaluator, Self-Reflection 모델은 Evaluator가 τt에 대해 올바른 결과라고 판단할 때까지 여러번의 시도를 함.
- e) 반복에서 메모리 사용:
- Reflexion의 효과를 높이기 위해 메모리 구성 요소가 사용됨.
- 실험에서 LLM의 최대 컨텍스트 제한을 준수하기 위해 저장되는 경험의 최대 수를 설정하기도 함.
- a) 초기 시도:

Reflexion vs Self-Refine:
- Reflexion 은 피드백을 받으면 (유닛 테스트 실패, 스코어 점수, 에러 메시지 등) 그것을 바탕으로 성찰적 텍스트를 작성하고 이를 기반으로 개선되는 반면 Self-Refine 은 자기 스스로 다양한 측면에서 피드백을 생성하고 반복적으로 개선해나간다.
- Reflexion 은 Self Reflextion 매커니즘 위에 Memory 컴포넌트가 붙어있음. 이걸 바탕으로 자신이 이전에 한 실수를 추가 맥락으로 저장하고 같은 실수를 피하도록 할 수 있음.
- Reflexion 은 ReAct Agent 기반이긴 함. 여러가지 도구가 있는 형태의 LLM 이고, ReAct 매커니즘 때문에 스스로 의사결정을 할 수 있다는 점도 차이점이다. 그래서 내가 사용한 추론과 도구의 결과를 관찰해보고 성찰해볼 수 있을 것.
실험 결과 및 분석:
- 연속적인 의사결정을 해야하는 AlfWorld 작업:
- AlfWorld 는 텍스트 기반의 인터랙티브 환경으로, 에이전트가 텍스트가 주어졌을 때 이를 해결하기 위해서 다단계 작업을 수행하는 걸 말함.
- 그러니까 여기서는 에이전트가 텍스트 명령을 통해 다양한 물체를 찾고, 이동시키며, 조작하는 등의 작업을 수행해야 함.
- ReAct 모델과 Reflexion 모델의 성능을 비교한 결과는 다음과 같음:
- ReAct 모델은 자체 성찰 없이 동일한 환경에서 반복 시도만을 할 것이고, 6번과 7번의 시도 사이에서 성능 향상이 멈춤.
- 반면 Reflexion 모델은 초기에 자신의 실수를 감지하고 기억에 저장해서 반복적인 실수를 피할 수 있는 능력을 갖췄음.
- Reflexion + ReAct 모델의 경우에 는 실수를 더 빠르게 감지하고 개선해서 계속해서 성능 향상이 이뤄졌음.
- Reflexion 은 자주 실수할 수 있는 분야에서 이를 개선하고 높은 정확도를 달성하는데 도움을 줌.
Limitations and Ablation study:
- Programming 작업 기준으로 Test Case 생성과 실행을 없도록 하면 성능적으로 더 떨어짐. 테스트 케이스가 있는 것보다. 즉 모델이 성공했는지 실패했는지 평가할 수 있는게 있으면 좋다.
- Reflexion은 언어적 피드백을 활용해 에이전트의 행동 선택 방식을 점진적으로 개선하는 방식임. 이건 일반적인 강화 학습과 마찬가지로, 최적의 결과를 보장하지 못할 수 있고, 일부 국소 최적점에 머무를 수 있음.
- 이 연구에서 장기 메모리는 최대 용량을 가진 슬라이딩 윈도우로 제한되었음. 이후에는 Reflexion의 메모리 구성 요소를 확장하는 방법도 있어야할 수도.