LabHub

블로그

LLM 에이전트 실전 완전 가이드: ReAct, Plan-Execute, Tool Use, 다중 에이전트 (2025)

Season 4 Ep 3 — RAG가 "재료", 프롬프트가 "지시"라면 에이전트는 "반복 행동"이다. 한 번의 질의·응답이 아니라 루프 돌리는 AI를 제품에 녹이는 법.

Prologue — "에이전트"라는 단어의 인플레이션

2024년 한 해 "AI agent"라는 단어는 너무 남발되었다. 단일 LLM 호출에 도구 하나 붙이면 "에이전트"라고 부르는 회사부터, 수십 개 툴을 쓰는 자율 시스템까지 모두 같은 이름으로 팔렸다.

이 글에선 에이전트를 다음과 같이 정의한다.

에이전트 = 목표를 받아, 자체 판단으로 툴(또는 다른 에이전트)을 반복 호출하며, 관찰 결과를 바탕으로 다음 행동을 결정하는 시스템.

즉 "반복", "판단", "관찰"이 핵심. 이 세 조건을 충족하지 않으면 그건 "도구 쓰는 LLM"이지 에이전트가 아니다. 에이전트가 "필요 없을 때 쓰면" 비용과 지연만 늘어난다. Ep 3은 경계를 명확히 그으면서 실전 구현법을 정리한다.


1장 · 에이전트 vs 워크플로우 — 경계 긋기

1.1 스펙트럼

단계특징
0. 단일 LLM 호출입력 → 응답. 툴 없음요약, 번역
1. Tool-augmented LLM1회 도구 호출 허용계산기 붙인 QA
2. 결정적 워크플로우정해진 순서로 도구들 호출"RAG → LLM → 포맷" 파이프라인
3. Planner + Executor계획 세우고 실행, 실패 시 재계획조사 봇
4. 반복 에이전트 (ReAct)관찰에 따라 매 스텝 판단코딩 에이전트
5. 다중 에이전트역할 나눠서 협업연구팀 시뮬레이션

2025년의 중요한 깨달음: 대부분의 제품 문제는 0–2단계로 충분히 풀린다. 3단계 이상은 높은 판단 복잡도 + 실패 허용도가 있을 때만 정당화된다.

1.2 언제 에이전트인가

1.3 언제 에이전트가 아닌가


2장 · ReAct — 추론과 행동의 루프

2.1 기본 형태

Reasoning + Acting(Yao et al., 2022).

Thought: 사용자가 X에 대한 최신 정보를 원한다. 검색이 필요.
Action: web_search("X 2025 기준")
Observation: [검색 결과 5]
Thought: 이 중 2번째가 가장 관련성 높다. 내용을 열어본다.
Action: fetch_url("https://...")
Observation: [본문]
Thought: 충분한 정보를 얻었다. 정리해서 답한다.
Action: final_answer("X에 대한 2025년 현황은 …")

2.2 구현 방식

2.3 LangGraph로 ReAct

from langgraph.prebuilt import create_react_agent

tools = [web_search_tool, calculator_tool, fetch_url_tool]
agent = create_react_agent(llm, tools, state_schema=State)

result = agent.invoke({"messages": [("user", query)]})

LangGraph는 상태 머신 기반이라 체크포인트·재시도·인간 승인 삽입이 쉽다.

2.4 ReAct의 한계

→ 2장 5절의 가드레일 필수.

2.5 가드레일


3장 · Plan-and-Execute, Reflexion — 고차 패턴

3.1 Plan-and-Execute

단계:

  1. Planner: 작업을 여러 서브 태스크로 쪼갠 계획 작성
  2. Executor: 각 서브 태스크 실행 (툴 호출 or 하위 에이전트)
  3. Replanner: 결과 확인 후 계획 조정

장점:

적합 태스크: 조사/리서치, 데이터 분석 리포트, 다단계 배포.

3.2 Reflexion

자기 비판 루프. 매 시도 후 "무엇을 잘못했나?" 메모를 남기고 다음 시도에 반영.

3.3 선택 가이드

문제 유형추천 패턴
단순 QA + 1–2 툴ReAct
복잡 조사·다단계 작업Plan-and-Execute
코딩·시행착오ReAct + Reflexion
다중 참여자 시뮬레이션다중 에이전트
결과 포맷 엄격결정적 워크플로우 (에이전트 아님)

4장 · Tool Use 설계 원칙

4.1 Tool = API 계약

4.2 좋은 Tool 예

{
  "name": "search_confluence",
  "description": "사내 위키에서 키워드로 문서를 검색한다. 최대 10건 반환. 페이지 본문 미포함, 제목·경로·스니펫만.",
  "parameters": {
    "type": "object",
    "required": ["query"],
    "properties": {
      "query": { "type": "string", "description": "검색어. 한국어/영어 가능" },
      "space": { "type": "string", "description": "선택적 space key. 예: 'ENG', 'PROD'" },
      "limit": { "type": "integer", "minimum": 1, "maximum": 10, "default": 5 }
    }
  }
}

4.3 Tool 개수와 명칭

4.4 반환값 설계

4.5 위험한 툴

"LLM이 stdin에 들어오는 대로 실행"은 사고의 지름길.


5장 · 상태 관리와 메모리

5.1 상태의 종류

5.2 Short-term 전략

5.3 Long-term 메모리

5.4 LangGraph 체크포인트

LangGraph는 각 노드 실행 후 상태를 checkpointer(SQLite, Postgres 등)에 저장한다. 장점:


6장 · 다중 에이전트 — 패턴과 함정

6.1 패턴

6.2 장점

6.3 함정

"에이전트 하나면 충분한데 셋으로 쪼갰다"는 2025년 팀들의 가장 흔한 후회.

6.4 선택 원칙

다중 에이전트가 정당화되려면 (역할 이질성 + 병렬성 필요 + 단일 에이전트로 프롬프트가 감당 안 됨) 셋 중 둘 이상 충족해야 한다.


7장 · LangGraph · DSPy · OpenAI Agents · Claude Agent

7.1 LangGraph

7.2 DSPy

7.3 OpenAI Assistants / Responses API

7.4 Claude Agent / Claude Code

7.5 MCP와의 관계

Model Context Protocol(MCP)은 모델 ↔ 툴/데이터 소스의 표준 인터페이스. 에이전트 프레임워크는 MCP 서버를 툴로 바로 쓰면, 툴 생태계 재사용이 가능해진다.

[에이전트 프레임워크]  <—— Tool use ——>  [MCP 클라이언트]
                            [MCP 서버들: GitHub, Slack, 사내 DB, 파일시스템]

즉 LangGraph 에이전트든 Claude Agent든, 대부분의 사내 도구 연결은 MCP 서버 한 번 만들어두면 공유된다.


8장 · 관측성 (Observability)

8.1 왜 에이전트 관측성은 특히 어려운가

8.2 필수 Trace 정보

8.3 도구

8.4 Replay

LangGraph의 체크포인트는 과거 실행을 재생할 수 있게 한다. "왜 이 에이전트가 엉뚱한 답을 했지?"를 1시간 후에도 분석 가능. 에이전트 디버깅의 최고 무기.


9장 · 실패·루프 방지의 엔지니어링

9.1 대표 실패 모드

9.2 방어 설계

9.3 Human-in-the-loop 디자인


10장 · 실전 케이스 3

10.1 코딩 에이전트 (Claude Code 유형)

운영 팁:

10.2 고객 지원 에이전트

운영 팁:

10.3 데이터 분석 에이전트

운영 팁:


11장 · 한국어·한국 환경 특수성

11.1 한국어 Tool use

11.2 엔터프라이즈 연결

11.3 규제


12장 · 평가 — 에이전트는 어떻게 측정하나

12.1 평가 차원

12.2 평가셋 구축

12.3 자동 평가


13장 · 보안 체크리스트


14장 · 체크리스트 — 에이전트 런칭 전 12가지


15장 · 안티패턴 10선

15.1 "에이전트로 만들어두면 나중에 도움될 것"

지금 안 필요한 복잡도는 나중에도 안 필요하다.

15.2 툴 30개 한 에이전트에 몰기

선택 정확도 급락. 카테고리별 에이전트로 분산.

15.3 Max iterations 없음

무한 루프는 시간 문제. 반드시 상한.

15.4 모델·프롬프트만 바꾸고 평가셋 없음

Ep 1·Ep 2 교훈이 에이전트에도 그대로 적용.

15.5 모든 중간 결과를 LLM에 다시 넣기

컨텍스트 폭발. 요약·선택 필수.

15.6 에러 메시지를 그대로 노출

사용자가 내부 스택 트레이스를 보게 하지 말 것.

15.7 자동 커밋/자동 송신

사람이 한 번은 봐야 한다. 특히 초기.

15.8 인간 승인 UX를 나중에

사후에 붙이면 UX가 어색해진다. 첫 설계부터.

15.9 다중 에이전트를 근거 없이 도입

오케스트레이션 복잡도·비용 3–10배. 꼭 필요할 때만.

15.10 MCP 서버 권한을 넓게

"편의상 write 다 주자" → 사고의 시작. 최소 권한.


16장 · 다음 글 예고 — Season 4 Ep 4: "Fine-tuning 완전 가이드"

Ep 1(RAG)·Ep 2(프롬프트)·Ep 3(에이전트)는 모델을 그대로 쓰는 세계였다. Ep 4는 모델 자체를 바꾸는 길.

"모델을 바꿀 때 vs 안 바꿀 때"의 경계선이 흐릿한 팀이 아직 많다. Ep 4에서 선명하게 긋는다.

다음 글에서 만나자.


요약: 2025년 에이전트는 "남용하면 독, 잘 쓰면 약"이다. 스펙트럼에서 0–2단계(LLM+툴·워크플로우)로 먼저 풀고, 판단 복잡도와 실패 허용도가 충분할 때만 3단계 이상으로 간다. ReAct·Plan-Execute·Reflexion은 태스크 유형으로 선택하고, 툴은 10개 이하·최소 권한·샌드박스, 상태는 체크포인트로 복구, 관측은 Trace + Replay, 위험 동작은 인간 승인. 단일 에이전트로 가능한 걸 셋으로 쪼개지 말 것. 그리고 평가셋 없는 에이전트 운영은 지뢰밭 산책이다.

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다