AI Agent LLM ReAct Architecture

"AI Agent"라는 말이 많이 쓰이지만, 정확히 무엇인지 설명하기 어렵습니다. 단순히 ChatGPT를 자동화한 것과 무엇이 다른지, 어떤 구조로 작동하는지 개념부터 정리했습니다.

1. Agent vs LLM — 무엇이 다른가

LLM(Large Language Model)은 입력을 받으면 한 번 응답하고 끝납니다. Agent는 목표를 달성할 때까지 스스로 행동을 반복합니다. 핵심 차이는 루프입니다.

LLM (단발 호출)AI Agent
실행 방식1회 입력 → 1회 출력목표 달성까지 루프 반복
툴 사용없음API, DB, 코드 실행 등 호출 가능
메모리컨텍스트 윈도우만단기 + 장기 + 벡터 메모리
계획없음목표를 서브태스크로 분해
자율성낮음높음 (스스로 다음 행동 결정)

예를 들어 "최근 1주일 뉴스를 요약해줘"라는 요청을 받았을 때, LLM은 학습 데이터 안에서만 답합니다. Agent는 웹 검색 툴을 호출하고, 결과를 읽고, 요약을 작성합니다. 필요하면 여러 번 검색을 반복합니다.

2. Agent 실행 루프 — ReAct 패턴

현재 가장 널리 쓰이는 Agent 패턴은 ReAct (Reasoning + Acting)입니다. 생각하고, 행동하고, 관찰하는 루프를 반복합니다.

1. Perceive
입력 수신 — 사용자 요청, 트리거, 스케줄 이벤트 등
2. Think
LLM이 현재 상태를 분석하고 다음 행동을 결정합니다.
3. Act
툴 호출 — 웹 검색, API 요청, DB 쿼리, 코드 실행 등
4. Observe
툴 실행 결과를 컨텍스트(메모리)에 추가합니다.
5. Evaluate
목표 달성 여부를 판단하고, 미달이면 2번으로 돌아갑니다.
6. Output
최종 결과를 반환·저장·알림합니다.

이 루프를 코드로 표현하면 아래와 같습니다.

while not goal_achieved:
    thought = llm.think(context, goal)   # 2. 다음 행동 결정
    action  = parse_action(thought)       # 3. 툴 선택
    result  = execute_tool(action)        # 3. 툴 실행
    context.add(result)                   # 4. 결과를 메모리에 추가
    goal_achieved = llm.evaluate(context) # 5. 목표 달성 여부 판단

return context.final_answer() # 6. 최종 출력

3. 메모리 구조

Agent는 상황에 따라 3가지 메모리를 조합해서 사용합니다.

Short-term memory

현재 실행 중인 컨텍스트 윈도우. 대화 기록, 툴 호출 결과가 쌓입니다. LLM이 직접 참조하며, 세션이 끝나면 사라집니다.

Long-term memory

DB에 저장된 영구 기록. 과거 실행 결과, 사용자 설정, 누적 데이터를 담습니다. PostgreSQL, Redis 등 사용.

Semantic memory

텍스트를 임베딩으로 저장합니다. "이것과 비슷한 내용 찾아줘" 같은 의미 기반 검색에 쓰입니다. pgvector, Pinecone 등.

4. 툴 (Tool / Function Calling)

Agent가 LLM 단독으로는 할 수 없는 일을 가능하게 하는 핵심 요소입니다. LLM은 "어떤 툴을 어떤 인자로 호출할지"를 결정하고, 실제 실행은 외부 시스템이 담당합니다.

정보 수집

  • 웹 검색 (Google, Bing API)
  • 웹 페이지 크롤링
  • DB 쿼리 (SQL)
  • 파일 읽기·쓰기

실행·연산

  • Python 코드 실행
  • 수학 계산
  • 이미지 생성·분석
  • 외부 API 호출

커뮤니케이션

  • 이메일 전송
  • Slack·Telegram 메시지
  • 캘린더 이벤트 생성
  • 알림 발송

제어·자동화

  • 브라우저 자동화 (Playwright)
  • CLI 명령 실행
  • 다른 Agent 호출
  • 워크플로우 트리거

Function Calling은 LLM이 툴을 호출하는 방식을 표준화한 인터페이스입니다. Claude API 기준 예시입니다.

tools = [{
    "name": "web_search",
    "description": "Search the web for recent information",
    "input_schema": {
        "type": "object",
        "properties": { "query": {"type": "string", "description": "Search query"} },
        "required": ["query"]
    }
}]

response = anthropic.messages.create( model=“claude-sonnet-4-20250514”, tools=tools, messages=[{“role”: “user”, “content”: “최근 AI Agent 관련 뉴스를 요약해줘”}] )

LLM이 위 툴의 호출 여부와 query를 스스로 결정합니다

5. Agent의 종류

구조와 목적에 따라 여러 유형으로 나뉩니다.

ReAct Agent
가장 일반적인 단일 AgentReasoning + Acting 루프. 툴을 사용해 단일 목표를 달성합니다. LangChain, LlamaIndex의 기본 Agent 구조.
Plan-and-Execute
계획을 먼저 세우고 순서대로 실행복잡한 멀티스텝 태스크에 적합. Planner가 서브태스크 목록을 만들고 Executor가 하나씩 처리합니다.
Multi-Agent
여러 Agent가 협력하는 시스템Orchestrator가 태스크를 분배하고 Specialist Agent들이 각자 담당 영역을 처리합니다. AutoGen, CrewAI 패턴.
Autonomous Agent
사람 개입 없이 장기 실행스케줄로 트리거되어 스스로 목표를 설정하고 실행합니다. 24시간 운영되는 데이터 파이프라인·모니터링에 사용.

6. 주요 프레임워크

프레임워크언어특징
LangChainPython / JS가장 널리 쓰임. Agent, Chain, Memory, Tool 추상화 제공. 레퍼런스와 생태계가 큼.
LlamaIndexPythonRAG(Retrieval-Augmented Generation)와 데이터 연결에 강점. 문서 기반 Agent에 적합.
AutoGenPythonMicrosoft. Multi-Agent 대화 프레임워크. Agent끼리 대화하며 문제를 해결.
CrewAIPython역할 기반 Multi-Agent. 각 Agent에 역할·목표·배경을 부여하고 팀처럼 협업.
LangGraphPythonLangChain 팀. 그래프로 Agent 흐름을 정의. 복잡한 상태 관리와 루프 제어에 적합.
n8nNo-code시각적 워크플로우. 코드 없이 Agent 오케스트레이션 가능. 셀프 호스팅 지원.
프레임워크 선택 기준: 단순 자동화라면 n8n이 빠릅니다. Python으로 제어가 필요하면 LangChain 또는 LangGraph. 여러 Agent가 협업하는 구조라면 CrewAI나 AutoGen을 고려합니다.

7. 설계할 때 고려할 것들

루프 제한 (Max iterations)

Agent가 목표를 달성하지 못하면 무한 루프에 빠질 수 있습니다. 최대 반복 횟수를 반드시 두어야 합니다. 보통 10~20회로 제한합니다.

툴 에러 처리

외부 API는 언제든 실패할 수 있습니다. 툴 호출 실패 시 Agent가 다른 방법을 시도하거나, 우아하게 종료하도록 설계해야 합니다.

컨텍스트 윈도우 관리

루프가 반복될수록 컨텍스트가 쌓여 토큰 한도를 넘깁니다. 오래된 관찰 결과를 요약하거나 잘라 내는 전략이 필요합니다.

비용 관리

LLM API 호출은 루프마다 발생합니다. 복잡한 태스크는 수십 번 호출될 수 있으므로, 캐싱과 모델 선택(무거운 모델 vs 가벼운 모델)을 의도적으로 설계해야 합니다.

Human-in-the-loop

결제, 이메일 발송, DB 수정처럼 중요한 행동은 자동 실행 전에 사람 확인을 받도록 두는 것이 안전합니다.


AI Agent는 아직 빠르게 발전하는 영역입니다. 지금의 패턴과 프레임워크가 1년 뒤에는 달라질 수 있습니다. "루프 + 툴 + 메모리"라는 본질을 이해하면, 어떤 프레임워크가 나와도 적응할 수 있습니다.