brunch

You can make anything
by writing

C.S.Lewis

by AI러 이채문 Dec 11. 2024

추론과 행동을 결합한 프롬프팅 방식

ReAct Prompting

당분간 심화 프롬프팅 방식을 다룰 예정입니다.


여러분들 화이팅!



개념과 개요: ReAct란 무엇인가?


ReAct는 Yao et al. (2022)이 제안한 프레임워크로, 대규모언어모델(LLM)이 작업을 수행할 때 추론(Reasoning)과 행동(Action)을 인터리브 방식으로 생성하도록 유도합니다. 기존의 ChainofThought(CoT)가 주로 추론 단계에 초점을 맞췄다면, ReAct는 추론과 행동의 상호작용을 통해 문제를 해결합니다.


ReAct의 주요 특징:

1. 추론 추적: 문제 해결 과정을 단계별로 추적하여 모델이 계획을 조정하거나 업데이트할 수 있음.

2. 행동 계획: 외부 데이터 소스(예: 검색 엔진)와 상호작용하여 추가 정보를 수집.

3. 신뢰성 및 해석 가능성 강화: 인간이 결과를 해석하기 쉽게 하고, 모델의 신뢰성을 향상.

ReAct는 주로 지식 기반 작업(예: 질문 답변)과 의사 결정 작업에서 강력한 성능을 발휘합니다.





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 시스템이 어떻게 복잡한 질문에 대한 답을 찾아가는지, 그리고 각 단계에서 어떻게 추론하고 행동하는지를 잘 보여주는 예시입니다.





ReAct의 성능


이 테이블은 다양한 프롬프트 방법들의 성능을 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 시스템이 실제 환경에서 물체를 찾고 조작하는 과정을 논리적이고 체계적으로 수행하는 방식을 보여줍니다.




 ReAct의 장점과 한계

 

장점

1. 추론과 행동의 결합: 복잡한 문제 해결 능력을 향상.

2. 외부 정보 통합: 모델의 기존 한계를 극복하고 최신 정보로 응답.

3. 해석 가능성: 결과와 과정이 명확하게 드러남.

 

한계

1. 정보 검색 의존성: 검색 결과가 부정확할 경우 모델의 추론에 오류 발생.

2. 구조적 제약: 추론 단계를 공식화할 때 유연성이 부족할 수 있음.

 5. ReAct 활용 예시: LangChain과 OpenAI를 이용한 구현




ReAct

의 경우 바로 활용할 수 있는 예시가 있었기 때문에, 직접활용하시는데 활용하시는데 쓸 수 있도록

한 번 예시 내용을 공유하겠습니다.



필요한 라이브러리 설치 및 설정


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 이야."




ReAct를 학습하려면?


 학습 자료

 논문: [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와 외부 데이터 소스의 통합이 중요한 다양한 도메인에서 이 기술을 적용할 수 있습니다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari