[Ai Agent] AI Agent란(with ReAct 프레임워크)

bebeis·2025년 11월 22일

AI 에이전트 전과 후 비교

에이전트 전 (Pre-Agent)

  • Claude, gpt, gemini 같은 LLM
  • 입력이 텍스트일 때 출력이 텍스트인 구조
  • 수동적인 응답 시스템

에이전트 후 (Post-Agent)

  • 보다 복잡한 목표를 달성하기 위해 외부 API(Tool)을 활용
  • API + DB + LLM 모델을 결합하여 최종 에이전트 구성
  • 스스로 판단하고 행동하는 구조

AI 에이전트의 정의

에이전트는 스스로 목표를 설정하고 가설을 세우고 실행까지 수행할 수 있는 자율적인 인공지능 시스템을 의미한다.

  • 단순히 질문에 답하는 수준을 넘어서
  • 다양한 도구와 상태를 기억하면서
  • 점진적으로 작업을 완수

최근에는 LLM을 중심으로 구성된 에이전트들이 많아서 자연어로 주어진 목표를 이해하고 추론하며 계획을 세우고 문제를 해결한다.

프롬프트 예시 비교

에이전트 전

다음 텍스트를 스페인어로 번역해 줘.

에이전트 후

특정 기능을 사용하여 다음 텍스트를 스페인어로 번역해 줘.
  • invoke 수행하여 더 다채로운 결과 도출 가능

에이전트 유형

주요 5가지 에이전트 유형

유형주요 개념대표 기술
Rule-based AgentAI 적용 없이 If-Then 규칙만 사용Expert System
Planning AgentTask PlanningSTRIPS
LLM-based Reactive Agent도구 사용, 자연어 추론ReAct
Autonomous Agent*자율형 구조, 목표 계획 반복 실행Auto-GPT
Multi-Agent역할 분리, 협업AutoGen, LangGraph

각 에이전트 유형은 점진적으로 더 복잡하고 자율적인 형태로 발전해 왔으며, 현재 멀티 에이전트까지 다양한 형태로 활용되고 있다.

에이전트 구조

에이전트 구조는 머리, 손, 기억을 담당하는 세 개 유닛으로 크게 나눌 수 있다.

3대 구성 요소

  1. 머리 (LLM) - 두뇌 역할
  2. 손 (Tool) - 행동 수행
  3. 기억 (Memory) - 상태 관리

현재의 에이전트는 LLM의 사고력을 기반으로 그 위에 행동과 협업 능력을 쌓아올린 구조이다.

LLM의 중요성

  • LLM 없이는 에이전트는 아무런 사고를 할 수 없음
  • 단순히 함수를 실행하는 것에 불과
  • LLM이 없으면 두뇌 역할을 할 수 없음

LLM의 역할 (머리)

에이전트 내부에서 LLM의 작동 방식

  1. 문제 이해

    • 사용자의 지시나 환경 상태를 자연어로 해석
  2. 추론 및 판단

    • 무엇을 해야 할지
    • 어떤 도구를 써야 할지 추론
  3. 행동 계획

    • "검색을 해보자"
    • "계산이 필요하다"
    • 구체적인 행동 결정
  4. 결과 요약 및 학습

    • 도구 사용 결과를 받아서
    • 다음 단계로 연결

요약

모든 과정을 LLM이 수행한다.

  • 생각 → 행동 → 관찰 → 다음 생각
  • 이러한 사이클을 LLM이 주도
  • 따라서 AI 에이전트에서 LLM은 머리 역할

프롬프트 예시

주의: 모든 에이전트가 이러한 프롬프트를 바탕으로 움직이는 것은 아닙니다. 특정 에이전트(예: ReAct)가 다음과 같이 작동한다고 이해하시면 됩니다.

생각: [현재 상황 분석]
행동: [수행할 작업]
관찰: [결과 확인]
다음 생각: [후속 작업 계획]

Tool (손)

Tool이란?

Tool은 에이전트가 행동을 수행할 수 있도록 하는 다양한 도구를 의미한다.

LLM 에이전트에서 툴은 LLM이 외부 작업을 수행하기 위해 호출할 수 있는 함수나 API이다.

Tool의 구성

Tool은 일반적으로 다음으로 구성된다.

  1. Name - 도구 이름
  2. Description - 도구 설명
  3. Function - 실제 기능

LLM은 설명을 바탕으로 어떤 툴을 쓸지 선택한다.

Tool 만드는 순서

에이전트가 툴을 인식하고 다루려면 툴로 등록해야 합니다. LangChain 같은 라이브러리가 이를 지원한다.

  1. LangChain Tool Import

    from langchain.tools import tool
  2. 함수 정의

    • 도구의 기능과 역할 구성
  3. 데코레이터 표시

    @tool
    def my_tool():
        """도구 설명"""
        pass
  4. 독스트링 작성

    • LLM이 도구의 기능을 파악할 수 있도록 설명
  5. Tool List 등록

    • Tool Calling이나 Bind Tools 기능 사용
    • LLM이 인식할 수 있도록 등록

Tool Calling & Bind Tools

Tool CallingBind Tools는 에이전트에게 툴 정보를 제공하는 것을 의미한다.

Tool 구현 주의사항

  • 퍼블릭 툴을 사용할 수도 있지만
  • 서비스마다 개발 과정과 산출물이 다르다.
    • 보통 서비스마다 다르게 툴을 구현한다.
    • 도구는 그 회사나 개인의 강점을 보여줄 수 있는 포인트가 된다.

Tool 예시

Tool 종류설명
웹 검색기 Tool실시간 웹 검색
계산기 Tool수학 연산 수행
SQL DB Tool데이터베이스 조회
문서 요약 Tool긴 문서 요약
RAG 검색 Tool벡터 DB 검색
API 호출 Tool외부 API 연동
파일 변환 Tool파일 형식 변환

ex) Tavily Search API Tool

대표적인 퍼블릭 Tool

Tavily Search API Tool은 실시간 정보를 처리하는 대표적인 퍼블릭 툴이다.

등장 배경

  • *LLM: 과거 데이터를 바탕으로 훈련 → 시간적 제한 존재
  • LLM과 RAG 시스템: 최적화된 검색 엔진이 아니다.
  • Tavily: LangChain 기반의 툴 기능을 지원한다.

Tavily의 주요 특징

  1. 최신 정보 수집
  2. 다양한 검색 옵션
  3. 콘텐츠 필터링
  4. 무료 제공

Tavily로 가능한 기능

  • 최신 뉴스 검색
  • 기사 검색
  • 일반 웹 검색
  • 이미지 검색

결과

텍스트 생성만 하던 LLM이 Tavily Search API Tool 같은 툴을 붙임으로써

  • 계산
  • 크롤링
  • 정보 수집
  • 외부 API 접근

등의 기능을 수행하며 더 똑똑한 에이전트로 진화할 수 있게 되었다.

ReAct 방법론

에이전트가 얼마나 더 똑똑하게 툴을 다루는지 구체적인 예시로 ReAct라는 프레임워크를 소개해보겠다.

ReAct란?

ReAct (Reasoning + Acting in Language Models)
LLM이 추론과 행동을 결합하여 문제를 해결하는 방법론이다.

ReAct의 핵심 구조 (4가지)

  1. Prompt - 프롬프트 패턴
  2. LLM - 언어 모델
  3. Tool - 도구
  4. Agent Loop - 에이전트 루프

ReAct의 정의

외부 행동(Action)을 요청하고 그 결과를 관찰(Observation)로 받아서 다음 추론에 반영하는 순환형 구조이다.

ReAct 프롬프트 패턴

생각 (Thought): 모델이 다음에 무엇을 할지 스스로 설명
  ↓
행동 (Action): 도구나 API 사용 명령
  ↓
행동 입력 (Action Input): 구체적인 입력값
  ↓
관찰 (Observation): 사용 결과 확인
  ↓
[반복]
  ↓
최종 답변 (Final Answer): 최종 응답 출력

ReAct 프롬프트 예시

질문: 서울에서 뉴욕까지 비행 시간은?

생각: 서울에서 뉴욕까지의 비행 시간을 알아야 한다.
행동: search_flight_time
행동 입력: "서울에서 뉴욕까지 비행 시간"
관찰: 약 14시간
최종 답변: 서울에서 뉴욕까지 비행 시간은 약 14시간입니다.

LLM의 역할

  • 중심적인 추론 엔진
  • Thought-Action 생성
  • 주어진 프롬프트와 이전 상태를 보고 다음 단계 출력 계속 생성

Tool의 역할

  • Action으로 호출할 수 있는 API/Function*
  • 예: 계산기, 코드 실행기, 웹 검색 등

Agent Loop

LLM의 생각 → 행동 → 관찰을 반복해서 최종 답을 얻을 때까지 수행한다.

Function Calling

ReAct에서 가장 핵심적인 개념은 Function Calling입니다.

Function Calling이란?

Action 단계에서 외부 도구나 함수를 호출하는 방식이다.

  • LLM이 주도
  • 자연어 추론 결과를 기반으로
  • 특정 함수를 호출하도록 명시적으로 지시한다.

Function Calling의 역할

LLM 추론 기반으로 선택한 외부 도구의 호출 방법

  • JSON 또는 Structured Output 형태로 표현 가능

목적

LLM이 인간처럼 생각한 다음에 도구를 사용하는 능력을 부여하는 것이다.

Function Calling 예시

질문: 서울의 내일 날씨는?

{
  "function": "get_weather",
  "arguments": {
    "location": "서울",
    "date": "내일"
  }
}

get_weather라는 함수를 호출하도록 하는 것이 Function Calling이다.

Structured Output

  • OpenAI나 LangChain에서는 Structured Output 지원
  • JSON 형태로 구조화
  • LLM 서비스에서 다양하게 활용 가능

참고
메타코드-Ai Agent 강의영상

profile
단순함은 복잡함을 이긴다.

0개의 댓글