한줄 요약: LLM이 "생각(Reasoning)"과 "행동(Acting)"을 교차하며 외부 환경과 상호작용하게 하여, 추론만 또는 행동만의 한계를 모두 극복한 에이전트 패턴의 원형.
| 항목 | 내용 |
|---|---|
| 저자 | Shunyu Yao, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, Yuan Cao |
| 소속 | Princeton University, Google Brain |
| 발표 | ICLR 2023 |
| 링크 | arxiv.org/abs/2210.03629 |
| 키워드 | Reasoning, Acting, Agent, Tool Use, Grounding |
Reasoning만 (CoT):
LLM이 내부 지식으로만 추론 → 사실 오류, 환각 발생
예: "바락 오바마의 출생지의 인구는?" → 잘못된 도시 인구를 "추론"
Acting만 (기존 에이전트):
관찰 → 행동 → 관찰 → 행동 (생각 없이)
예: 검색 → 결과를 보고 바로 다음 검색 → 방향 없는 탐색
핵심 관찰:
사람은 "생각"과 "행동"을 교차한다:
생각: "오바마 출생지를 먼저 찾아야겠다"
행동: 검색("Obama birthplace")
관찰: "Honolulu, Hawaii"
생각: "이제 호놀룰루 인구를 찾아야겠다"
행동: 검색("Honolulu population")
...
Thought → Action → Observation → Thought → Action → ...
예시 (HotPotQA):
Q: "Aside from the Apple Remote, what other device can control
the program that Apple Remote was originally designed to interact with?"
Thought 1: Apple Remote가 원래 어떤 프로그램용인지 찾아야 한다.
Action 1: Search["Apple Remote"]
Observation 1: "The Apple Remote was originally designed to control
Front Row media program..."
Thought 2: Front Row를 제어할 수 있는 다른 장치를 찾아야 한다.
Action 2: Search["Front Row (software)"]
Observation 2: "Front Row could be controlled by Apple Remote
or the keyboard function keys..."
Thought 3: 키보드 기능키가 답이다.
Action 3: Finish["keyboard function keys"]
Acting만 (Thought 없이):
Action 1: Search["Apple Remote other device"]
→ 검색 결과 모호 → 엉뚱한 방향으로 진행
ReAct (Thought 있음):
Thought: "문제를 분해하자: 1) Apple Remote의 대상 프로그램 → 2) 그 프로그램의 다른 제어 방법"
→ 검색 전략이 명확 → 효율적 탐색
Thought의 역할:
1. 목표 분해 (decomposition)
2. 정보 추출 (관찰에서 핵심 추출)
3. 상식 추론 (검색 불필요한 부분 처리)
4. 전략 수정 (실패 시 방향 전환)
Few-shot 예시로 ReAct 패턴 유도:
프롬프트 = [예시 1: 질문 + Thought/Action/Observation 전체 과정]
+ [예시 2: ...]
+ [새 질문]
사용 가능한 Action:
Search[entity]: Wikipedia 검색
Lookup[keyword]: 현재 페이지에서 키워드 찾기
Finish[answer]: 최종 답변 제출
| 방법 | Exact Match |
|---|---|
| Standard prompting | 28.7% |
| CoT (추론만) | 29.4% |
| Act only (행동만) | 25.7% |
| ReAct | 34.2% |
| ReAct + CoT-SC (앙상블) | 35.1% |
→ 추론만도, 행동만도 아닌 결합이 최적
| 방법 | 정확도 |
|---|---|
| CoT | 56.3% |
| Act only | 58.9% |
| ReAct | 64.6% |
| 환경 | Act only | ReAct |
|---|---|---|
| ALFWorld (가정환경) | 45% | 71% |
| WebShop (쇼핑) | 30.1% | 40.0% |
→ 실제 환경 상호작용에서도 Thought가 행동 품질을 향상
CoT만의 실패 유형:
- 환각 (hallucination): 51% — 존재하지 않는 사실을 "추론"
- 추론 오류: 49%
ReAct의 실패 유형:
- 환각: 14% ← 검색으로 사실 확인하므로 대폭 감소
- 검색 실패: 23% — 올바른 정보를 찾지 못함
- 추론 오류: 34%
- 조기 종료: 29%
→ ReAct는 환각을 ~70% 감소시킴 (51% → 14%)
ReAct의 핵심 통찰은 "생각을 말하게 하면 행동이 좋아진다"는 것이다. 이는 인지심리학의 "think-aloud protocol"과 정확히 대응된다. 사람도 문제를 풀 때 소리 내어 생각하면 더 체계적으로 접근하듯, LLM도 Thought를 명시적으로 생성하면 다음 Action이 더 합리적이 된다.
실전에서 ReAct는 거의 모든 에이전트의 뼈대다. LangChain의 AgentExecutor, AutoGPT의 루프, 심지어 ChatGPT의 플러그인 호출도 본질적으로 ReAct 패턴이다. 한 논문이 이렇게 넓은 실전적 영향을 미친 사례는 드물다.
한계로는 "Thought의 품질을 어떻게 보장하는가"가 있다. 모델이 잘못된 Thought를 생성하면 잘못된 Action으로 이어진다. 이 문제를 Reflexion(자기 반성)과 Tree of Thoughts(다중 경로 탐색)가 각각 다른 방식으로 해결하려 시도했다.
관련 논문: Chain-of-Thought, Reflexion, Toolformer, SWE-Agent, Tree of Thoughts