TL;DR — 일반 LLM은 입력 → 출력 한 방에 답합니다. 복잡한 문제에서 이게 무너집니다. 추론 기법은 그 사이에 입력 → 생각 → (행동 → 관찰 →) 출력의 단계를 끼워 넣어 정확도와 설명 가능성을 끌어올리는 설계입니다. CoT(단계별 사고)·ToT(다중 경로 탐색)·ReAct(추론+행동)·Self-Correction(자기 교정)·Deep Research(자율 연구) 다섯 기법을 LangChain·LangGraph로 구현하며, 핵심 트레이드오프는 하나입니다 — 정확도가 오르면 비용·지연도 오른다. 그래서 "언제 어떤 기법을 쓸지"를 고르는 것이 추론 설계의 절반입니다.
1. 왜 추론 기법인가 — 좋은 좌석을 골랐다면, 이제 깊이 사고할 차례
지난 편에서 우리는 에이전트에게 상황에 맞는 좋은 좌석을 골라주는 법(자원 인식 최적화)을 배웠습니다. 쉬운 일은 싼 모델, 어려운 일은 비싼 모델로 보내는 라우팅이었죠. 그런데 좌석이 좋다고 승객이 저절로 깊이 생각하지는 않습니다. 비싼 모델조차 복잡한 문제 앞에서는 자주 틀립니다. 이번 편의 질문은 한 단계 더 안쪽입니다 — "모델이 답을 내기 전에, 어떻게 더 깊이 사고하게 만들 것인가?"
문제의 뿌리는 LLM의 기본 동작 방식에 있습니다. 일반적인 LLM은 입력 → 출력, 즉 "한 번에 답을 내놓는" 구조입니다. 교재의 예시처럼 "123 × 456은?"이라고 물으면 모델은 "56088"을 한 방에 뱉습니다 — 맞을 수도, 틀릴 수도 있고, 왜 그렇게 답했는지 과정이 없습니다. 기업이 가장 답답해하는 지점이 바로 여기죠. "AI가 왜 그렇게 답했는지 설명이 안 돼요."
핵심 통찰은 한 문장입니다 — "복잡한 문제는 한 번에 답하기 어렵다. 단계로 쪼개면 정확도가 오르고, 과정이 보이면 신뢰가 생긴다." 이번 편은 그 '생각의 골격'을 만드는 다섯 가지 도구 — CoT·ToT·ReAct·Self-Correction·Deep Research — 를 하나씩 펼쳐 봅니다. 추론 기법은 곧 설명 가능한 AI(Explainable AI)의 핵심이기도 합니다.
2. 개념과 오해 — 수학 시험장의 다섯 가지 학생
📌 한 줄 정의 — 추론 기법(Reasoning Techniques)은 문제를 해결하기 위해 AI의 '생각 과정'을 구조화하는 설계 방법론입니다. 단순 입력 → 출력 대신 입력 → 생각 → (행동 → 관찰 →) 출력의 단계를 끼워 넣어, 복잡한 문제의 정확도와 설명 가능성을 끌어올립니다.
교재의 비유가 다섯 기법의 차이를 한눈에 잡아줍니다. 같은 시험 문제를 푸는 다섯 종류의 학생을 떠올려 보세요. 누구는 혼자 풀고, 누구는 여러 방법을 시도하고, 누구는 계산기를 꺼냅니다.
탐정으로 바꿔도 같습니다. CoT는 혼자 추리하는 셜록 홈즈, ToT는 여러 가설을 세우고 각각 검증하는 탐정, ReAct는 현장 증거를 수집하며 추리하는 탐정이죠. 시작 전에, 자주 만나는 오해 세 가지를 짚습니다.
3. 추론 기법 지도 — 정확도와 비용은 함께 오른다
본격적으로 기법을 펼치기 전에, 전체 지형을 한 장으로 봅니다. 교재가 정리한 비용-효과 매트릭스가 핵심입니다. 가장 중요한 메시지는 표 전체를 관통하는 한 줄 — 정확도가 오르면 비용과 지연도 함께 오른다. 공짜 점심은 없습니다.
| 기법 | 비용 | 지연 | 정확도 | 적합한 작업 |
|---|---|---|---|---|
| 기본 프롬프트 | 낮음 | 빠름 | 낮음 | 단순 Q&A |
| CoT | 중간 | 보통 | 높음 | 논리적 추론 |
| ToT | 높음 | 느림 | 매우높음 | 전략적 계획 |
| Self-Correction | 중간 | 보통 | 높음 | 콘텐츠 생성 |
| ReAct | 높음 | 느림 | 높음 | 정보 검색 + 추론 |
| PALMs | 중간 | 보통 | 매우높음 | 계산/코딩 |
| CoD/GoD | 매우높음 | 느림 | 매우높음 | 복잡한 의사결정 |
이 글에서는 이 저장소에 실제 구현이 있는 다섯 기법(CoT·ToT·ReAct·Self-Correction·Deep Research)을 4~8절에서 코드와 함께 펼치고, 나머지(PALMs·CoD/GoD)는 개념으로 짚습니다. PALMs는 LLM이 직접 계산하는 대신 코드를 생성·실행해 정확성을 100%로 끌어올리는 기법(5편 도구 사용의 친척)이고, CoD/GoD는 여러 에이전트가 토론·반박하며 가장 견고한 결론을 고르는 기법(7편 멀티 에이전트의 친척)입니다. 먼저, 모든 추론의 출발점인 CoT부터 봅니다.
4. CoT — 사고의 사슬 LangChain
Chain-of-Thought(CoT)는 가장 기본이자 가장 강력한 추론 기법입니다. 복잡한 문제를 작은 단계로 분해하고, 각 단계의 중간 결과를 명시적으로 출력합니다. "철수는 사과 5개가 있었고, 2개를 주고, 3개를 샀다 — 몇 개?" 같은 문제를 한 단계씩 짚어 6개에 도달하는 식이죠.
구현은 세 가지 전략을 둡니다 — Zero-shot(프롬프트만으로 단계 유도), Few-shot(예제로 추론 패턴 학습), Auto-CoT(예제 자동 생성). 이 저장소는 LangChain의 LCEL(LangChain Expression Language) 파이프 연산자로 체인을 조립합니다. prompt | llm | parser 단 한 줄이 "프롬프트 → 모델 호출 → 파싱"의 흐름을 그대로 표현하죠.
더 일관된 결과가 필요하면 Pydantic 구조화 출력을 씁니다. thought_steps(단계 배열)·final_answer·confidence(0~1)를 JSON 스키마로 강제하면, 후속 코드가 추론 단계를 프로그램적으로 다룰 수 있습니다. 효과는 분명합니다 — 적용 전략 문서 기준 Zero-shot CoT는 정확도 +15%, Few-shot CoT는 +25%(비용은 각각 1.5배·3배). 가장 적은 노력으로 가장 큰 정확도 점프를 얻는 출발점입니다.
5. ToT — 사고의 나무 순수 Python · Beam Search
CoT가 일직선 도로라면, Tree-of-Thought(ToT)는 갈림길이 있는 미로입니다. 한 단계에서 여러 접근법(가지)을 동시에 펼치고, 각 가지를 점수로 평가해, 유망한 것만 남기고 나머지는 가지치기(Pruning)합니다. 막다른 길에 도달하면 백트래킹으로 되돌아갈 수도 있죠 — CoT는 절대 못 하는 일입니다.
구현의 심장은 solve()의 Beam Search 루프입니다. 깊이마다 현재 빔의 각 노드에서 자식을 생성하고, 점수가 threshold 이상인 것만 다음 빔 후보로 올린 뒤, 상위 beam_width개만 남깁니다.
빔이 비면 _backtrack()이 가지치기된 노드 중 점수 높은 것을 되살립니다. 대가는 비용입니다 — 여러 경로를 탐색하니 토큰이 5~10배까지 늘 수 있죠(그림 3). 그래서 ToT는 전략 수립·리스크 평가처럼 한 번 잘 결정하는 것이 비용보다 중요한 문제에 씁니다. CoT와의 차이를 표로 정리하면:
| 특징 | CoT (사고의 사슬) | ToT (사고의 나무) |
|---|---|---|
| 탐색 방식 | 단일 경로 (선형) | 다중 경로 (트리) |
| 백트래킹 | 불가능 | 가능 |
| 계산 비용 | 낮음 | 높음 |
| 적합한 문제 | 단순 추론 | 복잡한 전략적 문제 |
| 비유 | 일직선 도로 | 갈림길이 있는 미로 |
6. ReAct — 추론과 행동의 사이클 LangGraph
CoT·ToT가 '머릿속'에서만 생각한다면, ReAct(Reasoning + Acting)는 세상에 손을 뻗습니다. Thought → Action → Observation의 루프를 돌며, 검색하고 계산하고 관찰한 결과로 다음 생각을 조정하죠. "애플의 시가총액과 작년 대비 변화율은?" 같은 질문을 ReAct는 이렇게 풉니다 — 검색(Action)으로 현재 시총을 관찰(Observation)하고, 다시 작년 시총을 검색해, 변화율을 계산해 답합니다.
반복
이 저장소는 ReAct를 두 가지로 구현합니다 — 정규식으로 Action: tool[input]을 파싱하는 순수 Python 버전과, LangGraph StateGraph 버전. 후자가 프로덕션에 가깝습니다. agent 노드(LLM 호출)와 tools 노드(도구 실행)를 조건부 엣지로 잇고, 도구 호출이 더 없으면 종료하죠 — ReAct 루프가 곧 그래프 구조가 됩니다.
ReAct는 5편(도구 사용)의 추론판입니다 — 도구를 언제·왜 쓸지 생각으로 결정하고, 그 결과를 다시 생각에 반영하죠. 실시간 정보가 필요한 고객 문의 응대·실시간 조회에 강력하지만, 루프가 길어지면 비용이 늘고 무한 루프 위험이 있어 max_steps로 천장을 둡니다.
7. Self-Correction — 스스로 채점하고 고친다 LangChain
Self-Correction은 답안을 제출하기 전에 스스로 검토하고 고치는 학생입니다. 생성 → 평가 → 수정 사이클을 품질 임계값에 도달할 때까지 반복하죠. 4편(리플렉션)의 Producer-Critic 모델이 여기서 다차원 품질 게이트로 정교해집니다.
평가는 5개 차원으로 채점합니다 — 정확성(Accuracy)·완성도(Completeness)·명확성(Clarity)·몰입도(Engagement)·간결성(Conciseness). 각 차원이 0~1점이고, 약점·개선 제안이 다음 수정의 가이드가 됩니다. 중요한 건 멈추는 법입니다. 무한 반복은 곧 비용 폭발이니까요. 구현은 세 가지 조기 종료 조건을 둡니다.
정확도 향상 폭이 가장 큰 기법입니다 — 적용 전략 문서 기준 +40%(비용 2~3배). 계약서 검토·재무 리포트처럼 품질이 곧 신뢰인 작업에서 빛납니다. 실제 효과는 13절 케이스 스터디에서 숫자로 봅니다.
8. Deep Research — 자율 연구 에이전트 LangGraph
지금까지의 기법을 한 워크플로우로 묶으면 Deep Research가 됩니다. 사람이 수 시간 걸릴 리서치를 AI가 자율적으로 수행하죠 — 계획을 세우고, 정보를 모으고, 부족한 부분을 스스로 채우고, 보고서까지 씁니다. Google의 gemini-fullstack-langgraph-quickstart에서 영감을 받은 구현으로, 네 명의 전문가(Planner·Researcher·Synthesizer·Reporter)가 협업하는 구조입니다.
LangGraph 버전은 각 단계를 노드로 만들고 current_phase를 기준으로 다음 노드를 고릅니다. 상태(DeepResearchState)에 계획·발견·합성·보고서를 누적하며 흐르죠.
Deep Research는 6편(플래닝)·7편(멀티 에이전트)·14편(RAG)이 추론 위에서 만나는 지점입니다. 시장 조사·경쟁 분석·VoC 인사이트처럼 여러 출처를 종합해 결론을 쓰는 작업을 자동화하죠 — 엔터프라이즈에서 가장 임팩트가 큰 활용처 중 하나입니다(12절).
9. Scaling Inference Law — 작은 모델 + 긴 추론
추론 기법이 비용 설계와 만나는 결정적 지점이 여기입니다. 통념은 "성능 = 모델 크기"였습니다. 그런데 추론 모델 시대의 통찰은 다릅니다 — "큰 모델이 항상 좋은 것은 아니다. 작은 모델 + 더 많은 생각 시간 = 큰 모델과 동등한 성능." 성능을 끌어올리는 축이 '모델 크기' 하나에서 '추론 시간'으로 하나 더 생긴 겁니다.
실무적 의미는 직접적입니다. 핵심은 "Thinking Budget" — 문제 난이도에 따라 추론 시간을 차등 배분하는 것입니다. 단순 질문은 빠르게 끝내고, 복잡한 수학·전략 문제에만 긴 추론을 허용하면 비용 효율적인 배포가 가능해집니다. 16편이 "어떤 모델 좌석에 앉힐까"였다면, 9절은 "그 좌석에서 얼마나 오래 생각하게 할까"입니다 — 둘은 같은 비용-품질 곡선의 두 손잡이입니다.
ℹ️ 교재는 "작은 추론 모델 + 긴 추론 ≈ 대형 모델"을 비용 예시로 설명합니다. 구체 모델명·토큰 단가는 시점에 따라 빠르게 바뀌므로, 이 글은 원리(시간을 사서 크기를 아낀다)에 초점을 둡니다. 최신 단가는 각 제공사 공식 가격 페이지를 확인하세요.
10. 기법 선택 가이드 — 어떤 문제에 무엇을
추론 설계의 절반은 "언제 무엇을 쓸지" 고르는 일입니다. 교재의 의사결정 트리를 따라가면 기법이 자연스럽게 정해집니다. 출발점은 늘 같은 질문 — "이 문제가 정말 복잡한가?" 복잡하지 않다면 추론 기법은 오히려 낭비입니다.
실무에서는 한 기법만 쓰지 않습니다. 조합이 보통이죠 — CoT로 분석하고 Self-Correction으로 품질을 보장하거나, ReAct로 정보를 모으고 CoT로 종합하는 식입니다. ReAct·CoT의 차이를 마지막으로 정리하면, ReAct만이 외부 도구·실시간 정보·동적 계획이 가능합니다 — 이것이 "생각만"과 "생각+행동"을 가르는 선입니다.
11. 프레임워크 비교 — 같은 목표, 다른 추상화
같은 "추론"을 구현해도 프레임워크마다 추상화가 다릅니다. 이 저장소의 다섯 구현이 그 스펙트럼을 보여줍니다 — 선형 파이프(LCEL), 상태 그래프(StateGraph), 그리고 알고리즘을 직접 짠 순수 Python.
| 구현 | 기법 | 추상화 | 핵심 표현 |
|---|---|---|---|
| LangChain LCEL | CoT · Self-Correction | 선형 파이프 | prompt | llm | parser |
| LangGraph StateGraph | ReAct · Deep Research | 상태 그래프 + 조건부 엣지 | add_conditional_edges() |
| 순수 Python | ToT (Beam Search) | 직접 구현한 탐색 알고리즘 | Generator + Evaluator + Beam |
고르는 기준은 제어 흐름의 모양입니다. 입력→출력이 한 방향이면 LCEL이 가장 간결하고, 분기·반복·도구 호출이 얽히면 StateGraph가 자연스럽습니다. 탐색·가지치기처럼 세밀한 알고리즘 제어가 필요하면 순수 Python으로 직접 짜는 것이 오히려 투명합니다. 추상화는 도구일 뿐, 추론의 골격(생각의 단계)은 동일합니다.
12. 엔터프라이즈 — CRM·ERP·Groupware의 추론 자동화
기업의 레거시 고통은 대부분 "복잡한 판단을 즉답하지 못한다"로 수렴합니다 — CRM의 복잡 문의, ERP의 비용 원인 추적, Groupware의 핵심 추출. 다섯 추론 기법은 각 시스템의 어떤 통점에, 어떤 기대효과로 매핑될까요.
| 시스템 | 대표 통점 | 적용 기법 | 기대효과(목표치) |
|---|---|---|---|
| CRM | 복잡 고객 문의 | ReAct (DB조회+추론) | 1차 해결률 70% → 90% |
| 영업 전략 수립 | ToT (다중 전략 탐색) | 계약 성사율 +25% | |
| ERP | 비용 원인 분석 | CoT (계층적 분해) | 분석 시간 70% ↓ |
| 생산 문제 해결 | ReAct (설비 조회+분석) | MTTR 50% 단축 | |
| Groupware | 회의록 액션 아이템 | CoT (대화→결정→액션) | 실행률 60% → 95% |
| 제안서·시장 조사 | Deep Research (종합) | 작성 시간 70% ↓ |
전체 ROI도 인상적입니다. 적용 전략 문서는 단순 LLM 호출(정확도 55%, 분석 4시간, 에스컬레이션 35%, 재작업 25%) 대비, 추론 기법 적용 후 정확도 85%(+30%p), Self-Correction까지 더하면 92%, 분석 시간 1.5시간(62.5%↓), 에스컬레이션 15%(57%↓), 재작업 8%(68%↓)를 목표치로 제시합니다.
물론 리스크 관리가 전제입니다 — ToT의 추론 지연(Beam Width 제한·캐싱), ReAct의 무한 루프(Max Iterations·타임아웃), 그리고 민감한 비즈니스 로직이 추론 과정에 노출되는 위험(중간 사고는 내부 로그로만, 최종 결과만 외부 전달). 추론의 투명성은 강점이지만, 그 투명성을 어디까지 노출할지는 보안 설계의 몫입니다(18편 가드레일에서 이어집니다).
13. 케이스 스터디 — ERP 재무 리포트가 91점에 도달하기까지
Self-Correction의 가치를 한 시나리오로 봅니다. ERP 재무 리포트 자동 생성 — 초안은 늘 어딘가 부족합니다. 수치 오류, 항목 누락, 형식 불일치. 적용 전략 문서의 시나리오는 생성 → 평가 → 수정 사이클이 3번 돌며 품질이 어떻게 오르는지 보여줍니다.
이 시나리오가 이번 편의 축소판입니다. CoT로 비용 항목을 단계별로 분해하고(4편 리플렉션의 Producer-Critic이) Self-Correction의 품질 게이트로 진화하며, 부족하면 다시 도는 루프가 사람의 수동 검토를 대체합니다. 좋은 추론은 곧 "스스로 부족함을 알고, 멈출 줄도 아는" 설계입니다.
14. 베스트 프랙티스 — 쓸지 말지, 그리고 체크리스트
추론 기법도 만능이 아닙니다. 정확도를 사면 비용·지연이 따라온다는 것이 핵심 트레이드오프죠. 그러니 "정말 복잡한 문제인가"를 먼저 물어야 합니다.
도입을 결정했다면 세 가지 안티패턴을 경계하세요. ① 비용 폭발 — 복잡도 분석 없이 모든 요청에 ToT/CoD를 쓰면 토큰이 5~10배로 뜁니다(복잡도 기반 기법 선택 + 캐싱). ② 무한 루프 — ReAct·Self-Correction에 천장이 없으면 영원히 돕니다(Max Iterations + 개선 정체 시 조기 종료). ③ 사고 과정 노출 — 중간 추론에 민감 정보가 새지 않게, 내부 로그와 외부 응답을 분리하세요. 구현이 max_iterations·min_improvement·threshold를 둔 이유입니다.
순서대로 쪼개고(체이닝), 갈래를 나누고(라우팅), 병렬로 돌리고(병렬화), 스스로 비평하고(리플렉션), 도구를 쥐고(도구 사용), 계획하고(플래닝), 팀을 이루고(멀티 에이전트), 기억하고(메모리), 배우고(학습), 표준으로 도구에 연결되고(MCP), 스스로 채점하고(목표 설정), 넘어져도 일어서고(예외 처리), 멈춰야 할 순간 사람을 부르고(휴먼 인 더 루프), 근거로 말하고(RAG), 다른 에이전트와 협업하고(A2A), 비용을 설계하던(자원 인식) 에이전트 — 이번엔 답하기 전에 깊이 생각하는 법(추론 기법)을 배웠습니다. 단계로 쪼개고(CoT), 갈래를 탐색하고(ToT), 도구를 쥐고 행동하고(ReAct), 스스로 고치고(Self-Correction), 자율적으로 연구하는(Deep Research) 다섯 가지 생각의 골격이죠. 그런데 똑똑하게 생각할수록 위험한 출력도 정교해집니다 — 잘못된 정보, 유출, 탈옥. 다음 편은 가드레일(Guardrails): 에이전트의 입력과 출력에 안전벨트를 채우는 법 — PII 보호, 입출력 검증, 탈옥 탐지입니다. 깊이 생각하게 만들었다면, 이제 안전하게 말하게 할 차례입니다.
- Wei et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
- Yao et al. (2023). Tree of Thoughts: Deliberate Problem Solving with LLMs
- Yao et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models
- Gao et al. (2023). PAL: Program-aided Language Models
- LangGraph 공식 문서 — StateGraph·조건부 엣지
- Antonio Gulli, Agentic Design Patterns — Ch.17 Reasoning Techniques
'Agentic AI Design Patterns' 카테고리의 다른 글
| CH20-밀려드는 작업을 AI가 스스로 줄 세우는 법 — 동적 재우선순위화와 SLA 에스컬레이션 실전 설계 (0) | 2026.06.14 |
|---|---|
| CH19-AI 에이전트 평가 3수준과 LLM-as-a-Judge — 정확도부터 Trajectory·드리프트 탐지까지 Python·LangGraph·ADK로 (1) | 2026.06.14 |
| CH16-가장 비싼 모델이 항상 정답은 아니다 — AI 에이전트 비용을 설계하는 자원 인식 최적화 (0) | 2026.06.12 |
| CH15-내 에이전트가 남의 에이전트와 일하게 하라 — 에이전트의 명함, A2A 프로토콜 (0) | 2026.06.11 |
| CH14-환각 대신 근거로 말하게 하라 — AI 에이전트 검색 증강 생성(RAG) 설계 (0) | 2026.06.10 |