ReAct Prompting
당분간 심화 프롬프팅 방식을 다룰 예정입니다.
여러분들 화이팅!
ReAct는 Yao et al. (2022)이 제안한 프레임워크로, 대규모언어모델(LLM)이 작업을 수행할 때 추론(Reasoning)과 행동(Action)을 인터리브 방식으로 생성하도록 유도합니다. 기존의 ChainofThought(CoT)가 주로 추론 단계에 초점을 맞췄다면, ReAct는 추론과 행동의 상호작용을 통해 문제를 해결합니다.
ReAct의 주요 특징:
1. 추론 추적: 문제 해결 과정을 단계별로 추적하여 모델이 계획을 조정하거나 업데이트할 수 있음.
2. 행동 계획: 외부 데이터 소스(예: 검색 엔진)와 상호작용하여 추가 정보를 수집.
3. 신뢰성 및 해석 가능성 강화: 인간이 결과를 해석하기 쉽게 하고, 모델의 신뢰성을 향상.
ReAct는 주로 지식 기반 작업(예: 질문 답변)과 의사 결정 작업에서 강력한 성능을 발휘합니다.
(1) 추론과 행동의 상호작용
ReAct는 추론(Reasoning)과 행동(Action)을 단계별로 생성하고 이를 기반으로 문제를 해결합니다.
1. 추론 단계:
문제를 분해하고, 필요한 정보를 결정.
다음 행동 계획을 유도.
2. 행동 단계:
외부 환경(예: 검색 엔진)과 상호작용하여 정보를 수집.
결과를 관찰하고 추론 단계로 피드백.
(2) 예시
질문: "콜로라도 조산 운동의 동쪽 구역이 확장되는 지역의 표고 범위는 얼마니?"
1. 추론 1: 콜로라도 조산 운동에 대해 검색하고, 동쪽 구역을 찾아야 함.
행동 1: 검색 ["콜로라도 조산 운동"]
관찰 1: 콜로라도 조산 운동은 산이 형성되는 과정.
2. 추론 2: 동쪽 구역에 대한 정보가 없으므로, 이를 검색해야 함.
행동 2: 검색 ["동쪽 구역"]
관찰 2: 동쪽 구역은 고원 지대까지 확장됨.
3. 추론 3: 고원 지대의 표고 범위를 찾아야 함.
행동 3: 검색 ["고원 지대"]
관찰 3: 고원 지대는 1,800~7,000피트의 표고를 가짐.
4. 최종 답변: "표고 범위는 1,800~7,000피트."
더 자세히 알아보기
이 이미지는 ReAct (Reason + Act) 프레임워크를 보여주는 예시입니다. 시스템이 Apple Remote에 대한 정보를 찾는 과정을 단계별로 보여줍니다:
1단계:
- Thought 1: Apple Remote의 원래 목적 검색 필요성 인식
- Act 1: Apple Remote 검색 수행
- Obs 1: 2005년 10월 출시, Front Row 미디어 센터 제어용으로 설계됨을 확인
2단계:
- Thought 2: Front Row에 대한 추가 정보 필요성 인식
- Act 2: Front Row 검색 시도
- Obs 2: 직접적인 결과 못 찾음, 관련 검색어 제안됨
3단계:
- Thought 3: 더 구체적인 검색어 필요성 인식
- Act 3: "Front Row (software)" 검색
- Obs 3: Front Row가 단종된 미디어 센터 소프트웨어임을 확인
4단계:
- Thought 4: 발견한 정보 종합하여 결론 도출
- Act 4: "keyboard function keys"를 최종 답변으로 제시
이 프로세스의 주요 특징:
- 사고(Thought)-행동(Act)-관찰(Obs) 순환 구조
- 점진적인 정보 수집과 정제
- 검색 실패 시 대안 전략 수립
- 최종 결론까지 논리적 단계 추적 가능
- 녹색 체크마크로 성공적 결론 도출 표시
이는 AI 시스템이 어떻게 복잡한 질문에 대한 답을 찾아가는지, 그리고 각 단계에서 어떻게 추론하고 행동하는지를 잘 보여주는 예시입니다.
이 테이블은 다양한 프롬프트 방법들의 성능을 HotpotQA(EM)와 Fever(Acc) 두 가지 메트릭으로 비교한 결과를 보여줍니다. 주요 분석 내용은 다음과 같습니다:
1. 기본 방법들의 성능:
- Standard: 가장 기본적인 방식 (28.7/57.1)
- CoT: Chain-of-Thought 방식 (29.4/56.3)
- CoT-SC: Chain-of-Thought with Self-Consistency (33.4/60.4)
2. Act/ReAct 기반 방법들:
- Act: 기본 행동 기반 방식 (25.7/58.9)
- ReAct: Reasoning+Acting 결합 방식 (27.4/60.9)
- CoT-SC → ReAct: 두 방식의 순차적 적용 (34.2/64.6)
- ReAct → CoT-SC: 순서를 바꾼 적용 (35.1/62.0)
3. 성능 비교:
- 비지도 학습 방법 중 ReAct → CoT-SC가 HotpotQA에서 가장 좋은 성능 (35.1)
- CoT-SC → ReAct가 Fever에서 가장 높은 정확도 (64.6)
- Supervised SoTA(State of the Art)가 모든 방법 중 최고 성능 (67.5/89.5)
4. 주요 시사점:
- 단순 방법보다 복합적 접근이 더 효과적
- 방법들의 순서가 성능에 영향을 미침
- 지도학습 방식이 여전히 가장 높은 성능을 보임
- CoT 기반 방법들이 대체로 기본 방법보다 우수한 성능을 보임
이 결과는 다양한 프롬프팅 방법들의 조합이 성능 향상에 효과적일 수 있음을 보여줍니다.
지식 기반 작업
HotPotQA: ReAct는 CoT보다 뛰어난 성능을 보이며, 정보 검색을 통해 답변의 신뢰성을 높임.
Fever(사실 검증): CoT보다 우수한 결과를 기록하며, 추론 및 행동의 결합이 정확도를 향상.
의사 결정 작업
ALFWorld: ReAct는 행동 단계에서 논리적 계획을 세우고 목표를 효과적으로 분해.
WebShop: 온라인 쇼핑과 같은 복잡한 작업에서도 Actonly 방식보다 높은 성능을 기록.
더 자세히 알아보기
이 이미지는 ReAct (Reason + Act) 프레임워크를 사용하여 pepper shaker를 찾아 서랍에 넣는 과정을 보여줍니다. 단계별로 분석해보겠습니다:
1. 초기 계획 수립:
- Act 1: 후추통을 찾기 위한 검색 영역 설정 (캐비닛 1-6, 조리대 1-3)
- Act 2: 캐비닛 1부터 탐색 시작
2. 탐색 과정:
- 여러 장소를 순차적으로 검색
- 캐비닛 1, 2, 3과 조리대 1, 2를 확인
- 조리대 3에서 pepper shaker 발견
3. 목표 물체 획득:
- Act 6: 조리대 3에서 사과, 빵, 후추통, 꽃병 발견
- Act 7: 조리대 3에서 후추통 1 획득
4. 최종 목표 달성:
- Act 8-9: 서랍 1로 이동
- Act 10: 닫힌 서랍 1을 열기
- Act 11: 후추통을 서랍 1에 성공적으로 넣음
주요 특징:
- 체계적인 탐색 전략
- 단계별 행동과 관찰의 명확한 기록
- Think 단계를 통한 다음 행동 계획
- 최종 성공을 녹색 체크마크로 표시
이는 AI 시스템이 실제 환경에서 물체를 찾고 조작하는 과정을 논리적이고 체계적으로 수행하는 방식을 보여줍니다.
장점
1. 추론과 행동의 결합: 복잡한 문제 해결 능력을 향상.
2. 외부 정보 통합: 모델의 기존 한계를 극복하고 최신 정보로 응답.
3. 해석 가능성: 결과와 과정이 명확하게 드러남.
한계
1. 정보 검색 의존성: 검색 결과가 부정확할 경우 모델의 추론에 오류 발생.
2. 구조적 제약: 추론 단계를 공식화할 때 유연성이 부족할 수 있음.
5. ReAct 활용 예시: LangChain과 OpenAI를 이용한 구현
의 경우 바로 활용할 수 있는 예시가 있었기 때문에, 직접활용하시는데 활용하시는데 쓸 수 있도록
한 번 예시 내용을 공유하겠습니다.
필요한 라이브러리 설치 및 설정
python
!pip install upgrade openai langchain pythondotenv googlesearchresults
import openai
import os
from langchain.llms import OpenAI
from langchain.agents import load_tools, initialize_agent
from dotenv import load_dotenv
load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["SERPER_API_KEY"] = os.getenv("SERPER_API_KEY")
ReAct 에이전트 구성
python
llm = OpenAI(model_name="textdavinci003", temperature=0)
tools = load_tools(["googleserper", "llmmath"], llm=llm)
agent = initialize_agent(tools, llm, agent="zeroshotreactdescription", verbose=True)
질문 실행
python
response = agent.run("Olivia Wilde의 남자 친구는 누구인지 알아내고 0.23 거듭제곱을 한 그의 나이는 얼마인지 계산해줘.")
print(response)
출력 예시
"Olivia Wilde의 남자 친구인 Harry Styles는 29세이고, 그의 나이에 0.23 거듭제곱한 값은 2.169459462491557 이야."
학습 자료
논문: [Yao et al., 2022 논문](https://arxiv.org/abs/2201.00000)
LangChain 문서: [LangChain ReAct 가이드](https://langchain.com)
필요 기술
Python 및 API 사용 경험.
강화 학습 및 자연어 처리(NLP) 기본 지식.
추천 학습 도구
Hugging Face: LLM 실험 환경 제공.
OpenAI API: GPT 모델 활용.
ReAct는 추론과 행동의 시너지를 통해 복잡한 작업을 해결하는 데 있어 강력한 잠재력을 보여줍니다. NLP와 외부 데이터 소스의 통합이 중요한 다양한 도메인에서 이 기술을 적용할 수 있습니다.