[Daily morning study] Chain of Thought(CoT) 프롬프팅과 ReAct 패턴
#daily morning study
Chain of Thought(CoT) 프롬프팅이란?
LLM에 단순히 “정답을 내놓아라”고 하는 게 아니라, 풀이 과정을 단계별로 출력하도록 유도하는 프롬프팅 기법이다.
일반 프롬프팅과의 비교:
[일반 프롬프팅]
Q: 철수는 사탕 5개를 갖고 있었다. 영희에게 2개를 주고, 민수에게 3개를 받았다. 지금 몇 개?
A: 6개
[Chain of Thought 프롬프팅]
Q: 철수는 사탕 5개를 갖고 있었다. 영희에게 2개를 주고, 민수에게 3개를 받았다. 지금 몇 개?
A: 처음에 5개를 갖고 있었다.
영희에게 2개를 주면 5 - 2 = 3개가 된다.
민수에게 3개를 받으면 3 + 3 = 6개가 된다.
따라서 6개.
중간 추론 단계를 명시하면 복잡한 문제에서 정확도가 크게 올라간다.
Few-shot CoT vs Zero-shot CoT
Few-shot CoT
프롬프트에 “추론 과정이 포함된 예시”를 몇 가지 제공하는 방식이다.
예시 1)
Q: 12 + 8은?
A: 12에 8을 더하면 20이다. 정답: 20
예시 2)
Q: 100에서 37을 빼면?
A: 100에서 37을 빼면 63이다. 정답: 63
실제 질문)
Q: 45에 28을 더하면?
A: (모델이 위 패턴을 따라 추론 과정을 출력)
모델이 예시에서 추론 패턴을 학습해 새로운 문제에 적용한다.
Zero-shot CoT
예시 없이 “Let’s think step by step” 같은 단순한 문구 하나로 CoT를 유도하는 방식이다.
Q: 12명이 탄 버스에서 5명이 내리고 3명이 탔다. 지금 몇 명?
A: Let's think step by step.
처음 12명에서 5명이 내리면 12 - 5 = 7명.
여기에 3명이 타면 7 + 3 = 10명.
정답: 10명
GPT-3.5 이후 대형 모델에서 잘 동작하며, 예시를 만드는 수고 없이도 추론 능력을 이끌어낼 수 있다.
CoT가 효과적인 이유
모델이 중간 단계를 토큰으로 출력하면서 작업 메모리(working memory)처럼 사용할 수 있다. 사람이 종이에 풀이 과정을 적으며 계산하는 것과 같은 원리다.
| 특성 | 일반 프롬프팅 | CoT 프롬프팅 |
|---|---|---|
| 추론 단계 | 내부에서 한 번에 | 단계별로 출력 |
| 오류 추적 | 어렵다 | 중간 단계에서 확인 가능 |
| 복잡한 문제 | 정확도 낮음 | 정확도 향상 |
| 토큰 소모 | 적음 | 많음 |
CoT는 특히 수학, 논리 추론, 다단계 계획 문제에서 효과가 두드러진다. 단순한 지식 검색 문제에는 오히려 불필요한 토큰 낭비가 될 수 있다.
ReAct 패턴이란?
Reasoning + Acting을 합친 개념이다. 2022년 Google 논문에서 제안됐다.
CoT가 “생각만 하는” 것이라면, ReAct는 생각(Thought) → 행동(Action) → 관찰(Observation) 사이클을 반복하며 외부 도구나 환경과 상호작용한다.
[ReAct 사이클]
Thought: 현재 상황을 분석하고 다음 행동을 계획
↓
Action: 검색, API 호출, 코드 실행 등 실제 행동
↓
Observation: 행동 결과를 관찰
↓
Thought: 결과를 바탕으로 다시 분석 (반복)
ReAct 동작 예시
“2024년 한국 GDP를 찾아서 2023년과 비교해줘”라는 질문이 들어왔을 때:
Thought: 2024년과 2023년 한국 GDP 수치가 필요하다. 검색이 필요하다.
Action: search("2024 한국 GDP")
Observation: 2024년 한국 GDP는 약 1조 7,000억 달러로 추정됨
Thought: 2023년 수치도 검색해야 한다.
Action: search("2023 한국 GDP")
Observation: 2023년 한국 GDP는 약 1조 6,700억 달러
Thought: 두 수치를 갖고 있으니 비교 분석이 가능하다.
Answer: 2024년 한국 GDP는 약 1조 7,000억 달러로, 2023년 1조 6,700억 달러 대비 약 1.8% 증가했습니다.
모델이 스스로 정보가 부족하다고 판단하고, 도구를 호출하고, 결과를 통합해 최종 답변을 만든다.
CoT와 ReAct 비교
| 항목 | Chain of Thought | ReAct |
|---|---|---|
| 외부 도구 사용 | 없음 | 있음 (검색, API 등) |
| 지식 출처 | 모델 내부 파라미터 | 내부 + 외부 정보 |
| 실시간 정보 | 불가 | 가능 |
| 복잡도 | 낮음 | 높음 |
| 적합한 문제 | 수학, 논리 추론 | 정보 검색, 멀티스텝 태스크 |
Self-Consistency 기법
CoT의 확장 버전이다. 동일한 질문에 대해 여러 번 다른 추론 경로로 답을 생성하고, 가장 많이 나온 답을 최종 답으로 채택한다.
질문: 3 × 7 + 5 = ?
추론 경로 1: 3 × 7 = 21, 21 + 5 = 26 → 26
추론 경로 2: 7 × 3 = 21, 21 + 5 = 26 → 26
추론 경로 3: 5 + 3 × 7 = 5 + 21 = 26 → 26
다수결: 26
단순 CoT보다 정확도가 높아지지만 API 비용이 N배로 증가한다.
Tree of Thoughts (ToT)
CoT → ReAct → ToT로 이어지는 발전 흐름이다.
CoT가 선형적인 추론 경로라면, ToT는 트리 구조로 여러 추론 분기를 동시에 탐색하고 유망한 경로를 골라 깊이 파고드는 방식이다.
[문제]
/ \
[접근법 A] [접근법 B]
/ \ \
[A-1] [A-2] [B-1]
BFS나 DFS 방식으로 추론 트리를 탐색하며, 각 노드에서 “이 경로가 유망한가?”를 자체 평가(self-evaluation)한다. 복잡한 창의적 문제나 전략 계획 문제에서 강점을 보인다.
실무 활용 포인트
CoT를 쓰면 좋은 경우
- 수학 문제, 논리 퍼즐
- 단계별 코드 디버깅
- 긴 텍스트 요약 후 결론 도출
ReAct를 쓰면 좋은 경우
- 최신 정보가 필요한 질문 (검색 도구 연결)
- 여러 API를 순차 호출해야 하는 자동화 태스크
- AI Agent 구현
주의점
- CoT는 토큰 소모가 크므로 단순 질문에는 과할 수 있다.
- ReAct는 도구 호출 실패 시 루프에 빠질 수 있으므로 최대 반복 횟수 제한이 필요하다.
- 모델 크기가 작으면 CoT 효과가 제한적이다. 7B 이하 소형 모델보다 대형 모델에서 효과가 크다.