0Pricing
AI Engineering Academy · 강의

ReAct 프레임워크: 사고, 행동, 관찰

모델이 Thought를 생성하고, Action을 선택하며, Observation을 받은 뒤 Final Answer에 도달할 때까지 반복하는 ReAct 루프를 이해합니다.

ReAct 프레임워크: 사고, 행동, 관찰은(는) CoddyKit의 무료 AI Engineering Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Engineering Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

ReAct 프레임워크란 무엇인가요

ReAct(추론 + 행동)는 모델의 내부 추론과 외부 행동을 번갈아 수행하도록 하는 프롬프트 프레임워크입니다. 모델은 최종 답변을 즉시 생성하는 대신 Thought를 생성하고, Action을 선택한 다음, 해당 행동을 실행한 결과인 Observation을 받고, Final Answer를 제공할 수 있을 때까지 이 과정을 반복합니다.

생각-행동-관찰 순환

ReAct 순환의 각 반복에는 세 단계가 있습니다.

  • Thought: 모델이 알고 있는 내용과 다음에 알아내야 할 내용을 추론합니다.
  • Action: 모델이 웹 검색, 계산기 또는 데이터베이스 조회와 같은 도구를 호출합니다.
  • Observation: 도구 호출 결과가 반환되어 모델의 컨텍스트에 추가됩니다.

모델이 결론과 함께 Final Answer:를 출력할 때까지 순환이 계속됩니다.

ReAct 추적 예시

다음은 검색 도구를 사용하여 '도쿄의 인구는 얼마인가요?'라는 질문에 답하는 ReAct 에이전트의 구체적인 추적 예시입니다. 각 단계가 이전 관찰 결과를 바탕으로 어떻게 이어지는지 살펴보십시오.

# ReAct trace (pseudocode showing the reasoning loop)

# Iteration 1
Thought_1 = 'I need to find the current population of Tokyo. I will search for it.'
Action_1 = 'search("Tokyo population 2024")'
Observation_1 = 'According to the 2023 census, Tokyo has approximately 13.96 million people in the city proper.'

# Iteration 2
Thought_2 = 'I have the population. I can now give a final answer.'
Final_Answer = 'The population of Tokyo is approximately 13.96 million people.'

ReAct가 직접 프롬프트보다 뛰어난 이유

직접 프롬프트는 모델에게 기억에 의존해 답하도록 요청하므로 사실에 관한 질문에서 환각이 발생할 수 있습니다. 사고 과정 프롬프트는 추론을 개선하지만 여전히 외부 정보에 접근할 수 없습니다. ReAct는 이 두 가지를 결합합니다. 즉, 사고 과정과 같은 명시적인 추론 기록에 도구 호출을 통한 최신 정보 수집 기능을 더합니다.

ReAct 프롬프트 구조

ReAct 시스템 프롬프트는 모델에게 사용해야 할 정확한 형식을 가르칩니다. 사용 가능한 도구와 설명을 나열하고 Thought/Action/Observation/Final Answer 패턴의 예시를 보여 줍니다. 모델은 프롬프트를 통해 이 형식을 정확하게 따르는 방법을 학습합니다.

REACT_SYSTEM_PROMPT = '''You are an AI assistant with access to these tools:

- search(query: str): Search the web for up-to-date information.
- calculator(expression: str): Evaluate a mathematical expression.
- lookup(topic: str): Look up a topic in the knowledge base.

Always follow this exact format:
Thought: [your reasoning about what to do next]
Action: tool_name(arguments)
Observation: [result of the action, provided by the system]
... (repeat as needed)
Final Answer: [your final response to the user]

Begin!'''

Thought, Action, Observation 파싱하기

애플리케이션 코드는 ReAct 순환의 실행 환경 역할을 합니다. 각 모델 응답 후 출력에서 행동 이름과 인수를 추출하고, 해당 Python 함수를 실행하고, 결과를 관찰 결과 형식으로 만든 다음 메시지 기록에 추가하고, 모델을 다시 호출하십시오.

import re

def parse_react_output(text: str):
    '''Extract action name and argument from a ReAct model output.'''
    action_match = re.search(r'Action:\s*(\w+)\((.*)\)', text)
    if action_match:
        tool_name = action_match.group(1)
        tool_input = action_match.group(2).strip('\"\' ')
        return tool_name, tool_input
    if 'Final Answer:' in text:
        answer = text.split('Final Answer:')[-1].strip()
        return 'final', answer
    return None, None

에이전트 실행 순환

실행 순환은 LLM을 호출하고, 출력을 파싱하고, 도구를 전달하고, 관찰 결과를 추가한 다음 반복합니다. max_iterations 제한은 모델이 작업을 해결하지 못할 때 무한 순환을 방지합니다.

from openai import OpenAI

client = OpenAI()

def run_react_agent(user_query: str, tools: dict, max_iterations: int = 10) -> str:
    messages = [
        {'role': 'system', 'content': REACT_SYSTEM_PROMPT},
        {'role': 'user', 'content': user_query}
    ]

    for i in range(max_iterations):
        resp = client.chat.completions.create(model='gpt-4o', messages=messages)
        output = resp.choices[0].message.content
        messages.append({'role': 'assistant', 'content': output})

        tool_name, tool_input = parse_react_output(output)

        if tool_name == 'final':
            return tool_input

        if tool_name and tool_name in tools:
            observation = tools[tool_name](tool_input)
            messages.append({'role': 'user', 'content': f'Observation: {observation}'})
        else:
            messages.append({'role': 'user', 'content': 'Observation: Tool not found.'})

    return 'Max iterations reached without a final answer.'

간단한 도구 등록하기

도구는 단순히 Python 함수입니다. 도구 이름을 함수에 매핑하는 딕셔너리에 도구를 등록합니다. 함수는 문자열 인수를 받아 문자열 결과를 반환합니다. 이렇게 하면 인터페이스가 단순해지고 모델이 관찰 결과로 받는 형식과 일관성을 유지할 수 있습니다.

import math

def calculator_tool(expression: str) -> str:
    try:
        # Restrict to safe math expressions
        allowed_names = {k: v for k, v in math.__dict__.items() if not k.startswith('_')}
        result = eval(expression, {'__builtins__': {}}, allowed_names)
        return str(result)
    except Exception as e:
        return f'Error: {e}'

def search_tool(query: str) -> str:
    # Stub — replace with real web search API
    return f'Top result for "{query}": [placeholder result]'

# Register tools
tools = {
    'calculator': calculator_tool,
    'search': search_tool
}

ReAct를 활용한 다단계 추론

ReAct는 여러 정보 조각을 연결해야 하는 다단계 질문에서 특히 효과적입니다. 예를 들어 'GPT-4를 만든 회사의 CEO는 누구이며, 그 회사는 몇 년에 설립되었나요?'라는 질문이 있습니다. 에이전트는 먼저 CEO를 검색한 다음 그 결과를 사용하여 회사의 설립 연도를 조회합니다. 이는 추론으로 연결된 두 번의 별도 도구 호출입니다.

ReAct와 순수 사고 과정 비교

사고 과정(Chain-of-Thought, CoT)은 모델이 단계별로 생각하게 하여 추론을 개선하지만 외부 정보에는 접근할 수 없습니다. ReAct는 CoT에 행동을 추가하여 모델이 실제 데이터를 가져오고, 계산을 실행하고, 사실을 검증할 수 있게 합니다. 그 대가로 ReAct는 여러 API 호출이 필요해 더 느리지만, 최신 정보나 전문 지식이 필요한 작업에서는 훨씬 정확합니다.

추적으로 ReAct 디버깅하기

ReAct 에이전트가 잘못된 답을 내놓으면 전체 Thought/Action/Observation 추적을 확인하십시오. 흔한 실패 패턴으로는 도구를 호출하는 대신 모델이 관찰 결과를 지어내는 경우, 도구 실행을 건너뛰게 하는 파싱 오류, 그리고 잘못된 행동 선택으로 이어지는 Thought 단계의 부정확한 추론이 있습니다.

  • 컨텍스트에 추가된 모든 메시지를 기록합니다
  • 다음 모델 호출 전에 도구 출력이 실제로 추가되었는지 확인합니다
  • 행동 정규 표현식이 모델의 출력 형식과 일치하는지 확인합니다

빠른 확인

ReAct 프레임워크에 대한 이해도를 확인해 보십시오.

레슨 요약

이 레슨에서는 다음을 배웠습니다. ReAct는 순환 과정에서 Thought, Action, Observation을 번갈아 수행합니다. 애플리케이션 코드는 도구를 실행하고 관찰 결과를 추가하는 실행 환경 역할을 합니다. 또한 max_iterations 제한은 에이전트의 무한 순환을 방지합니다. 다음으로는 에이전트가 애플리케이션에 필요한 작업을 정확히 수행할 수 있도록 사용자 지정 도구를 정의하는 방법을 배웁니다.

자주 묻는 질문

“ReAct 프레임워크: 사고, 행동, 관찰” 강의는 무료인가요?

네 — “ReAct 프레임워크: 사고, 행동, 관찰” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Engineering Academy 강의 전체를 잠금 해제할 수 있습니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“ReAct 프레임워크: 사고, 행동, 관찰”에서 뭘 배우나요?

모델이 Thought를 생성하고, Action을 선택하며, Observation을 받은 뒤 Final Answer에 도달할 때까지 반복하는 ReAct 루프를 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 AI Engineering Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Engineering Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Engineering Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“ReAct 프레임워크: 사고, 행동, 관찰” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Engineering Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Engineering Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. ReAct 프레임워크: 사고, 행동, 관찰
  2. 에이전트를 위한 도구 정의
  3. LangChain으로 ReAct 에이전트 구축하기
  4. 에이전트 실패와 무한 반복 처리
← AI Engineering Academy(으)로 돌아가기