🤖
AI/ML
ReAct
Reasoning and Acting
추론과 행동을 교차하는 에이전트 프레임워크. 복잡한 작업 해결에 효과적.
Reasoning and Acting
추론과 행동을 교차하는 에이전트 프레임워크. 복잡한 작업 해결에 효과적.
ReAct(Reasoning and Acting)는 LLM이 추론(Reasoning)과 행동(Acting)을 교차하며 복잡한 문제를 해결하는 프롬프팅 프레임워크입니다. 단순히 답을 생성하는 것이 아니라, 생각하고, 도구를 사용하고, 결과를 관찰하는 사이클을 반복하여 더 정확한 결과를 도출합니다.
ReAct는 2022년 Google Research와 Princeton에서 발표되었습니다. 기존 Chain-of-Thought(CoT)는 추론만 수행하고 외부 정보를 활용하지 못했고, Action-only 방식은 맥락 없이 도구만 사용했습니다. ReAct는 이 둘을 결합하여 추론과 행동의 시너지를 창출했습니다.
ReAct의 핵심은 "Thought-Action-Observation" 루프입니다. 먼저 현재 상황을 분석하고(Thought), 필요한 도구나 API를 호출하고(Action), 결과를 확인한 뒤(Observation) 다음 단계를 결정합니다. 이 과정이 목표 달성까지 반복됩니다.
실무에서 ReAct는 AI 에이전트의 핵심 패턴으로 자리잡았습니다. LangChain, LlamaIndex 등 주요 프레임워크가 ReAct 패턴을 기본 지원하며, 웹 검색, 데이터베이스 조회, API 호출 등 다양한 도구와 결합하여 복잡한 태스크를 자동화합니다.
LangChain을 활용한 ReAct 에이전트 구현 예제입니다.
# pip install langchain langchain-openai duckduckgo-search
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub
from langchain_community.tools import DuckDuckGoSearchRun
# 1. 도구 정의
search_tool = DuckDuckGoSearchRun()
tools = [search_tool]
# 2. LLM 초기화
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 3. ReAct 프롬프트 로드
prompt = hub.pull("hwchase17/react")
# 4. ReAct 에이전트 생성
agent = create_react_agent(llm, tools, prompt)
# 5. 에이전트 실행기
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # Thought-Action-Observation 출력
max_iterations=5,
handle_parsing_errors=True
)
# 6. 실행
result = agent_executor.invoke({
"input": "2024년 노벨 물리학상 수상자와 그들의 연구 주제는?"
})
print(f"최종 답변: {result['output']}")
# 출력 예시:
# Thought: 2024년 노벨 물리학상 정보를 검색해야겠다
# Action: duckduckgo_search
# Action Input: 2024 Nobel Prize Physics winner
# Observation: 검색 결과...
# Thought: 수상자 정보를 찾았다. 정리해서 답변하겠다
# Final Answer: ...