핵심 요약
2026년 시점 LLM 에이전트 시스템은 단일 호출이 아니라 여러 단계 + 도구 + 검증의 복합체. 잘 알려진 7가지 패턴을 적합 워크로드와 함께 정리한다.
- ReAct — 가장 단순. 추론+행동 반복
- Reflexion — 자기 반성으로 정확도 향상
- Chain-of-Thought (CoT) — 단순 추론 강화
- Tree-of-Thoughts — 분기 탐색
- Plan-and-Execute — 계획 + 실행 분리
- MCP-Tool — 표준 도구 호출
- Multi-Agent — 역할 분담
1. ReAct (Reasoning + Acting)
Thought: 사용자가 코드의 N+1을 찾으라고 했다. 먼저 코드를 읽어야 한다.
Action: read_file(path="src/users.ts")
Observation: ...코드 내용...
Thought: forEach 안에 await가 있어 N+1 가능성. 확인하자.
Action: grep(pattern="forEach.*await", path="src")
Observation: 3곳 발견
Thought: 충분한 정보. 답변 작성.
Answer: 다음 3곳에서 N+1 패턴이 발견됨...가장 단순. 도구 호출이 필요한 거의 모든 워크로드 baseline.
2. Reflexion — 자기 반성
첫 답변 → 자체 비평 → 개선 답변. 정확도가 평균 15~25%p 상승.
# Step 1: 초안
draft = llm("코드 리뷰: ...")
# Step 2: 비평
critique = llm(f"다음 답변의 약점·놓친 점:\n{draft}")
# Step 3: 개선
final = llm(f"다음 답변을 critique 반영해 개선:\n초안: {draft}\n비평: {critique}")3. Chain-of-Thought
"단계별로 생각해보세요" 같은 프롬프트로 추론 표시. GPT-5.5·Opus 4.7은 이미 자동으로 CoT 사용. 명시적으로 강제할 때만 의미 있음.
4. Tree-of-Thoughts
여러 분기를 동시에 탐색 → 평가 → 가장 좋은 가지 선택. 비용 5~10배. 수학·논리 퍼즐에서만 의미.
# 3개 후보 생성
candidates = [llm(prompt) for _ in range(3)]
# 자체 평가
scores = [llm(f"0~10점으로 평가: {c}") for c in candidates]
# 최고점 선택
best = candidates[scores.index(max(scores))]5. Plan-and-Execute
큰 작업을 (1) 계획 단계 → (2) 단계별 실행으로 분리. 복잡한 멀티스텝 작업의 표준.
# Step 1: Plan
plan = llm("다음 작업의 단계 목록:\n{task}")
# "1. ... 2. ... 3. ..."
# Step 2: Execute each step
results = []
for step in parse_plan(plan):
result = execute_step(step)
results.append(result)
# Step 3: Synthesize
final = llm(f"결과 통합:\n{results}")6. MCP-Tool 패턴
도구를 MCP 서버로 표준화. 모델 종속성 없음.
from mcp import Client
async with Client("npx @mcp/filesystem /data") as fs:
tools = await fs.list_tools()
# [read_file, write_file, list_dir, ...]
# LLM에게 tools spec 전달, function_call 응답을 fs.call로 실행
response = llm.with_tools(tools)
if response.tool_call:
result = await fs.call(response.tool_call.name, response.tool_call.args)7. Multi-Agent
역할별 에이전트 분담. 각 에이전트는 자기 영역에 특화된 시스템 프롬프트.
planner = Agent(role="계획", model="opus-4.7")
coder = Agent(role="구현", model="sonnet-4.6")
tester = Agent(role="테스트", model="haiku-3.5")
reviewer = Agent(role="리뷰", model="opus-4.7")
plan = planner.run(task)
code = coder.run(plan)
tests = tester.run(code)
feedback = reviewer.run(code, tests)
if feedback.needs_fix:
code = coder.run(plan, feedback)
# ...패턴 선택 매트릭스
| 워크로드 | 1순위 | 2순위 |
|---|---|---|
| 코드 작성·디버깅 | ReAct + MCP-Tool | Multi-Agent |
| 복잡한 분석 | Plan-and-Execute | Reflexion |
| 고품질 글쓰기 | Reflexion | Multi-Agent |
| 수학·논리 | Tree-of-Thoughts | Plan-and-Execute |
| RAG 답변 | ReAct | Reflexion (검증 강화) |
비용·정확도 트레이드오프
| 패턴 | 호출 수 | 정확도 향상 | 지연 |
|---|---|---|---|
| 단순 호출 | 1x | baseline | 1x |
| ReAct (3 step) | 3~5x | +10%p | 3~5x |
| Reflexion | 3x | +15~25%p | 3x |
| Plan-Execute | 5~10x | +20~35%p | 5~10x |
| Tree-of-Thoughts | 10~20x | +5~15%p | 10~20x |
| Multi-Agent | 5~15x | +25~40%p | 5~15x (병렬화 가능) |
실전 권장
- 대부분 워크로드는 ReAct + MCP-Tool로 충분
- 품질이 비용보다 중요한 곳만 Reflexion·Multi-Agent
- Tree-of-Thoughts는 거의 안 씀 (비용 대비 효과 낮음)
- 패턴 결합 가능: Multi-Agent 안에서 각 에이전트가 ReAct
자주 묻는 질문
LangGraph·CrewAI 등 프레임워크가 필수?
아니다. 위 패턴은 표준 SDK로 직접 구현 가능. 프레임워크는 가독성·재사용 좋지만 lock-in 리스크.
패턴 vs 단일 호출 어느 시점에서 갈리나?
작업 단계 ≥ 3 또는 도구 호출 ≥ 2회 필요하면 패턴 사용. 단순 Q&A는 단일 호출이 답.
Reflexion이 항상 좋은 결과를 내나?
아니다. 단순 작업은 첫 답변이 이미 정답. 비평이 오히려 over-thinking 만들 수 있음. 복잡 작업에서만 효과 큼.

댓글 0