ReAct 패턴 (Reasoning + Acting)
ReAct는 2022년 Yao et al.이 제안한 패턴으로, LLM이 추론(Reasoning) 과 행동(Acting) 을 번갈아 수행합니다.ReAct 루프 상세 예시
사용자 질문: “지난 분기 매출이 가장 높은 제품 3개와 그 이유를 분석해주세요”| 단계 | 내용 |
|---|---|
| Thought 1 | 매출 데이터를 DB에서 조회해야 합니다. SQL을 실행하겠습니다. |
| Action 1 | query_sql("SELECT product_name, SUM(revenue) as total FROM sales WHERE quarter='2025Q4' GROUP BY product_name ORDER BY total DESC LIMIT 3") |
| Observation 1 | 결과: [{“product_name”: “Pro Plan”, “total”: 12억}, {“product_name”: “Enterprise”, “total”: 9.5억}, {“product_name”: “Starter”, “total”: 7.2억}] |
| Thought 2 | 상위 3개 제품을 확인했습니다. 이유를 분석하려면 마케팅 캠페인 데이터도 확인해야 합니다. |
| Action 2 | search_documents("2025 Q4 마케팅 캠페인 결과 보고서") |
| Observation 2 | 문서 발견: “Pro Plan 할인 프로모션(11월), Enterprise 대기업 계약 3건 체결…” |
| Thought 3 | 매출 데이터와 마케팅 정보를 종합하여 분석 보고서를 작성할 수 있습니다. |
| Answer | 최종 분석 보고서 생성 |
주의 ReAct 루프가 무한히 반복되지 않도록 최대 반복 횟수(보통 5~15회)와 타임아웃 을 반드시 설정하세요.
ReAct의 실패 모드
프로덕션 환경에서 ReAct 패턴을 운영하다 보면 반드시 마주치는 실패 모드가 있습니다. 미리 알고 대비하면 디버깅 시간을 대폭 줄일 수 있습니다.1. 무한 루프 (Infinite Loop)
Agent가 같은 도구를 반복 호출하거나, 같은 추론을 되풀이하는 현상입니다.| 원인 | 증상 | 해결법 |
|---|---|---|
| 도구 결과가 Agent의 기대와 다름 | 같은 SQL을 미세하게 바꿔가며 반복 실행 | System Prompt에 “3회 시도 후 실패 보고” 규칙 추가 |
| 종료 조건이 모호함 | ”더 좋은 결과가 있을 수 있다”며 계속 검색 | 명확한 완료 기준을 프롬프트에 명시 |
| 도구 에러를 이해하지 못함 | 에러를 무시하고 같은 호출 반복 | 에러 메시지를 LLM이 이해할 수 있는 형태로 포매팅 |
2. 잘못된 도구 선택 (Wrong Tool Selection)
Agent가 주어진 맥락에 맞지 않는 도구를 선택하여 불필요한 비용과 시간이 발생합니다.| 원인 | 증상 | 해결법 |
|---|---|---|
| 도구 설명이 서로 유사함 | ”search_documents”와 “query_knowledge_base”를 혼동 | 각 도구의 용도 차이를 설명에 명시 |
| 도구 수가 너무 많음 (15개 이상) | 무관한 도구를 자주 선택 | 카테고리별 라우팅 또는 도구 수 축소 |
| 사용자 의도 파악 실패 | ”삭제해줘”를 “조회”로 해석 | Few-shot 예시를 System Prompt에 추가 |
3. 관찰 결과 오해 (Observation Misinterpretation)
도구가 올바른 결과를 반환했지만, Agent가 그 결과를 잘못 해석하는 경우입니다. 이것이 가장 교활한 실패 모드입니다. 겉보기에는 정상적으로 동작하기 때문입니다.| 원인 | 증상 | 해결법 |
|---|---|---|
| 숫자/단위 혼동 | ”1200”을 1,200원으로 해석 (실제는 1,200만원) | 도구 결과에 단위를 명시적으로 포함 |
| 빈 결과 = 없음으로 단정 | 검색 결과 0건을 “데이터가 없다”로 결론 | ”결과 없음 시 다른 검색어 시도” 규칙 추가 |
| 부분 결과를 전체로 착각 | LIMIT 10 결과를 “전체 데이터”로 해석 | 도구 결과에 전체 건수/페이지 정보 포함 |
ReAct vs Plan-and-Execute 의사결정 가이드
실무에서 가장 많이 받는 질문입니다: “우리 사용 사례에는 어떤 패턴이 맞나요?” 아래 의사결정 기준을 참고하세요.| 판단 기준 | ReAct 추천 | Plan-and-Execute 추천 | Multi-Agent 분해 추천 |
|---|---|---|---|
| 예상 단계 수 | 3단계 이하 | 4~9단계 | 10단계 이상 |
| 작업 예측 가능성 | 입력에 따라 경로가 달라짐 | 대부분 정해진 단계를 따름 | 병렬 실행 가능한 독립 하위 작업 존재 |
| 대표 사례 | FAQ 응답, 단순 조회 | 보고서 생성, 데이터 파이프라인 | 크로스 도메인 분석, 복합 워크플로우 |
| 실패 시 복구 | 즉각 재시도 가능 | 계획 수정 후 재실행 | 실패한 Sub-Agent만 재실행 |
| 비용 효율 | 가장 낮음 | 중간 (계획 수립에 추가 토큰) | 가장 높음 (다수 LLM 호출) |
참고 실전 팁: 확신이 없으면 ReAct로 시작 하세요. 그리고 Agent가 자주 길을 잃거나 5단계 이상의 추론이 반복되면, 그때 Plan-and-Execute로 전환합니다. 처음부터 복잡한 패턴을 선택하면 디버깅 비용이 기하급수적으로 증가합니다.
실전 ReAct System Prompt 예시
아래는 프로덕션 환경에서 실제 사용 가능한 수준의 System Prompt입니다. 데이터 분석 Agent를 기준으로 작성했으며, 실패 방지 규칙들이 포함되어 있습니다.성공 핵심 포인트: 좋은 System Prompt는 “무엇을 하라”뿐 아니라 “실패했을 때 어떻게 하라” 를 명시합니다. 실패 대응 규칙이 없는 Agent는 프로덕션에서 반드시 문제를 일으킵니다.
Agent Planning 패턴
ReAct 패턴은 “한 단계씩 생각하고 행동”하는 방식입니다. 하지만 복잡한 작업에는 사전 계획(Planning) 이 필요합니다.Plan-and-Execute 패턴
먼저 전체 계획(단계 목록)을 수립하고, 각 단계를 순차적으로 실행합니다. 실행 중 문제가 발생하면 계획을 수정할 수 있습니다.ReAct vs Plan-and-Execute 비교
| 항목 | ReAct | Plan-and-Execute |
|---|---|---|
| 접근 방식 | 한 단계씩 생각하고 행동 | 먼저 전체 계획 수립 후 실행 |
| 적합한 작업 | 단순한 작업, 적은 단계 | 복잡한 작업, 다수의 단계 |
| 작업 흐름 | 예측 불가능한 흐름 | 구조화된 출력이 필요한 경우 |
| 장점 | 유연, 즉각 반응 | 체계적, 진행 상황 추적 가능 |
| 단점 | 복잡한 작업에서 길을 잃을 수 있음 | 초기 계획 수립에 시간 소요 |
| 대표 구현 | LangGraph ReAct Agent | LangGraph Plan-and-Execute 템플릿 |
참고 LangGraph는 Plan-and-Execute 템플릿을 공식 제공합니다. Planner 노드가 계획을 생성하고, Executor 노드가 실행하며, Replanner 노드가 결과를 보고 계획을 수정하는 구조입니다.
다음: Tool Use / Function Calling →