Agentic AI Design Patterns

CH17-AI가 답하기 전에 '생각'하게 만드는 법 — 추론 기법 CoT·ToT·ReAct 완전 해부

빌드 피벗(Build Pivot) 2026. 6. 13. 08:14
반응형
AGENTIC AI DESIGN PATTERNS · 17
AI가 답하기 전에 '생각'하게 만드는 법 — 추론 기법(Reasoning Techniques)
단계별 사고의 사슬(CoT), 여러 갈래를 탐색하는 사고의 나무(ToT), 추론·행동을 잇는 ReAct 루프, 스스로 채점하고 고치는 Self-Correction, 자율 연구 에이전트 Deep Research, 그리고 '작은 모델 + 긴 추론'의 Scaling Inference Law까지
🟢 입문~중급 ⏱️ 약 25분 🔧 Python · LangChain · LangGraph · Gemini 🏢 엔터프라이즈 🗓️ 최종 검토 2026-06-13

TL;DR — 일반 LLM은 입력 → 출력 한 방에 답합니다. 복잡한 문제에서 이게 무너집니다. 추론 기법은 그 사이에 입력 → 생각 → (행동 → 관찰 →) 출력의 단계를 끼워 넣어 정확도와 설명 가능성을 끌어올리는 설계입니다. CoT(단계별 사고)·ToT(다중 경로 탐색)·ReAct(추론+행동)·Self-Correction(자기 교정)·Deep Research(자율 연구) 다섯 기법을 LangChain·LangGraph로 구현하며, 핵심 트레이드오프는 하나입니다 — 정확도가 오르면 비용·지연도 오른다. 그래서 "언제 어떤 기법을 쓸지"를 고르는 것이 추론 설계의 절반입니다.

1. 왜 추론 기법인가 — 좋은 좌석을 골랐다면, 이제 깊이 사고할 차례

지난 편에서 우리는 에이전트에게 상황에 맞는 좋은 좌석을 골라주는 법(자원 인식 최적화)을 배웠습니다. 쉬운 일은 싼 모델, 어려운 일은 비싼 모델로 보내는 라우팅이었죠. 그런데 좌석이 좋다고 승객이 저절로 깊이 생각하지는 않습니다. 비싼 모델조차 복잡한 문제 앞에서는 자주 틀립니다. 이번 편의 질문은 한 단계 더 안쪽입니다 — "모델이 답을 내기 전에, 어떻게 더 깊이 사고하게 만들 것인가?"

문제의 뿌리는 LLM의 기본 동작 방식에 있습니다. 일반적인 LLM은 입력 → 출력, 즉 "한 번에 답을 내놓는" 구조입니다. 교재의 예시처럼 "123 × 456은?"이라고 물으면 모델은 "56088"을 한 방에 뱉습니다 — 맞을 수도, 틀릴 수도 있고, 왜 그렇게 답했는지 과정이 없습니다. 기업이 가장 답답해하는 지점이 바로 여기죠. "AI가 왜 그렇게 답했는지 설명이 안 돼요."

🙅 답만 적는 학생 (일반 LLM)
"56088" — 과정 없이 결론만, 맞는지 알 수 없음
복잡한 문제에서 실패 — 다단계 추론을 한 번에 압축
디버깅 불가 — 어디서 틀렸는지 추적할 수 없음
설명 불가 — "왜 그렇게 답했나요?"에 답할 수 없음
🧮 풀이과정을 적는 학생 (추론 기법)
123 × (400+50+6) — 문제를 작은 단계로 분해
49,200 + 6,150 + 738 — 중간 결과를 명시적으로 출력
= 56,088 — 단계가 보이니 검증·디버깅 가능
설명 가능한 AI — 추론 과정이 곧 근거이자 신뢰
그림 1. 답만 적기 vs 풀이과정 적기 — 추론 기법은 '생각 과정'을 구조로 드러낸다

핵심 통찰은 한 문장입니다 — "복잡한 문제는 한 번에 답하기 어렵다. 단계로 쪼개면 정확도가 오르고, 과정이 보이면 신뢰가 생긴다." 이번 편은 그 '생각의 골격'을 만드는 다섯 가지 도구 — CoT·ToT·ReAct·Self-Correction·Deep Research — 를 하나씩 펼쳐 봅니다. 추론 기법은 곧 설명 가능한 AI(Explainable AI)의 핵심이기도 합니다.

2. 개념과 오해 — 수학 시험장의 다섯 가지 학생

📌 한 줄 정의 — 추론 기법(Reasoning Techniques)은 문제를 해결하기 위해 AI의 '생각 과정'을 구조화하는 설계 방법론입니다. 단순 입력 → 출력 대신 입력 → 생각 → (행동 → 관찰 →) 출력의 단계를 끼워 넣어, 복잡한 문제의 정확도와 설명 가능성을 끌어올립니다.

교재의 비유가 다섯 기법의 차이를 한눈에 잡아줍니다. 같은 시험 문제를 푸는 다섯 종류의 학생을 떠올려 보세요. 누구는 혼자 풀고, 누구는 여러 방법을 시도하고, 누구는 계산기를 꺼냅니다.

📝 CoT
사고의 사슬
풀이과정을 한 줄로 적는 학생. 단계별로 차근차근.
🌳 ToT
사고의 나무
여러 풀이법을 시도·비교하고 최선을 고르는 학생.
🔧 ReAct
추론+행동
계산기·자료(도구)를 꺼내 쓰면서 푸는 학생.
🔄 Self-Correct
자기 교정
답안을 검토하고 스스로 고쳐 다시 내는 학생.
🔬 Deep Research
자율 연구
자료를 모으고 종합해 보고서까지 쓰는 학생.
그림 2. 수학 시험장의 다섯 학생 = 다섯 추론 기법 — '어떻게 생각하느냐'가 기법을 가른다

탐정으로 바꿔도 같습니다. CoT는 혼자 추리하는 셜록 홈즈, ToT는 여러 가설을 세우고 각각 검증하는 탐정, ReAct는 현장 증거를 수집하며 추리하는 탐정이죠. 시작 전에, 자주 만나는 오해 세 가지를 짚습니다.

오해 ① "CoT는 그냥 프롬프트에 '단계별로 생각해'라고 쓰면 끝 아닌가요?"
절반만 맞습니다. "Let's think step by step" 한 줄이 시작점인 건 맞지만, 실무에서는 구조화된 프롬프트 설계 + 결과 검증 메커니즘이 함께 가야 합니다. 단계를 유도하는 것과, 그 단계가 실제로 옳은지 확인하는 것은 다른 일입니다(그래서 7절 Self-Correction이 따로 있습니다).
오해 ② "ReAct랑 CoT는 같은 거 아닌가요?"
결정적으로 다릅니다. CoT는 '생각'만 합니다 — 모델 머릿속 지식으로만 추론하죠. ReAct는 '생각 + 행동 + 관찰'의 루프입니다 — 검색하고, 계산하고, API를 호출해 외부 세계의 실시간 정보를 끌어옵니다. "오늘 환율은?" 같은 질문은 CoT로는 불가능하고 ReAct만 답할 수 있습니다.
오해 ③ "추론을 시키면 항상 느리고 비싸지는 거 아닌가요?"
방향은 맞지만 반전이 있습니다 — Scaling Inference Law(9절). "작은 모델 + 더 많은 추론 시간"이 "큰 모델 한 방"과 맞먹을 수 있습니다. 즉 추론은 단순 비용이 아니라, 지연을 더 사서 모델 크기(비용)를 아끼는 거래가 될 수 있습니다. 16편의 비용 설계가 여기서 다시 만납니다.

3. 추론 기법 지도 — 정확도와 비용은 함께 오른다

본격적으로 기법을 펼치기 전에, 전체 지형을 한 장으로 봅니다. 교재가 정리한 비용-효과 매트릭스가 핵심입니다. 가장 중요한 메시지는 표 전체를 관통하는 한 줄 — 정확도가 오르면 비용과 지연도 함께 오른다. 공짜 점심은 없습니다.

기법 비용 지연 정확도 적합한 작업
기본 프롬프트 낮음 빠름 낮음 단순 Q&A
CoT 중간 보통 높음 논리적 추론
ToT 높음 느림 매우높음 전략적 계획
Self-Correction 중간 보통 높음 콘텐츠 생성
ReAct 높음 느림 높음 정보 검색 + 추론
PALMs 중간 보통 매우높음 계산/코딩
CoD/GoD 매우높음 느림 매우높음 복잡한 의사결정
그림 3. 추론 기법 비용-효과 매트릭스 (교재 기준) — 오른쪽으로 갈수록 똑똑하지만 비싸진다

이 글에서는 이 저장소에 실제 구현이 있는 다섯 기법(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개에 도달하는 식이죠.

Input
사과 5개, 2개 주고 3개 삼
Thought A
처음 5개
Thought B
5 − 2 = 3
Thought C
3 + 3 = 6
Answer
6개
단일 경로의 일직선 사슬 — 각 단계가 다음 단계의 입력이 된다(되돌아갈 수는 없다)
그림 4. Chain-of-Thought의 선형 추론 흐름 (교재 사과 예시)

구현은 세 가지 전략을 둡니다 — Zero-shot(프롬프트만으로 단계 유도), Few-shot(예제로 추론 패턴 학습), Auto-CoT(예제 자동 생성). 이 저장소는 LangChain의 LCEL(LangChain Expression Language) 파이프 연산자로 체인을 조립합니다. prompt | llm | parser 단 한 줄이 "프롬프트 → 모델 호출 → 파싱"의 흐름을 그대로 표현하죠.

PYTHON · LangChain LCEL — Zero-shot CoT 체인은 파이프 한 줄
def create_zero_shot_cot_chain(model_name="gemini-2.0-flash"): prompt = ChatPromptTemplate.from_template(ZERO_SHOT_COT_PROMPT) llm = ChatGoogleGenerativeAI(model=model_name, temperature=0.1) # LCEL 파이프: prompt → llm → parser chain = prompt | llm | StrOutputParser() return chain # ZERO_SHOT_COT_PROMPT 끝에는 이 한 줄이 핵심 # "Let's think step by step:"

더 일관된 결과가 필요하면 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는 절대 못 하는 일입니다.

🌳 Root · 문제 분석 (depth 0)
↓ branching_factor = 3 (세 갈래 생성)
경로 A · 0.8 ✅
유망 → 계속 탐색
경로 B · 0.6 ✅
유망 → 계속 탐색
경로 C · 0.3 ❌
threshold(0.4) 미달 → 가지치기
↓ beam_width = 2 (상위 2개만 다음 깊이로)
Generator가 가지를 펼치고, Evaluator가 점수를 매기고, Beam Search가 상위 k개만 유지 — BFS의 폭발도, DFS의 지역 최적해도 피한다
그림 5. Tree-of-Thought의 Beam Search — 생성·평가·가지치기로 탐색 폭을 제어한다

구현의 심장은 solve()의 Beam Search 루프입니다. 깊이마다 현재 빔의 각 노드에서 자식을 생성하고, 점수가 threshold 이상인 것만 다음 빔 후보로 올린 뒤, 상위 beam_width개만 남깁니다.

PYTHON · TreeOfThoughtAgent.solve() — 생성 → 평가 → 가지치기 → 빔 선택
current_beam = [root] for depth in range(1, self.max_depth + 1): next_beam = [] for parent in current_beam: # 1) 자식 사고 생성 (branching_factor개) new_thoughts = self.generator.generate(problem, path, depth, ...) for thought in new_thoughts: # 2) 평가 → 점수·계속여부 score, reasoning, go = self.evaluator.evaluate(problem, thought, path) if go and score >= self.threshold: child.status = NodeStatus.PROMISING; next_beam.append(child) else: child.status = NodeStatus.PRUNED # 가지치기 # 3) Beam Selection: 상위 beam_width개만 유지 next_beam.sort(key=lambda n: n.score, reverse=True) current_beam = next_beam[:self.beam_width]

빔이 비면 _backtrack()이 가지치기된 노드 중 점수 높은 것을 되살립니다. 대가는 비용입니다 — 여러 경로를 탐색하니 토큰이 5~10배까지 늘 수 있죠(그림 3). 그래서 ToT는 전략 수립·리스크 평가처럼 한 번 잘 결정하는 것이 비용보다 중요한 문제에 씁니다. CoT와의 차이를 표로 정리하면:

특징 CoT (사고의 사슬) ToT (사고의 나무)
탐색 방식 단일 경로 (선형) 다중 경로 (트리)
백트래킹 불가능 가능
계산 비용 낮음 높음
적합한 문제 단순 추론 복잡한 전략적 문제
비유 일직선 도로 갈림길이 있는 미로
그림 6. CoT vs ToT — 백트래킹과 다중 경로가 ToT의 힘이자 비용이다

6. ReAct — 추론과 행동의 사이클 LangGraph

CoT·ToT가 '머릿속'에서만 생각한다면, ReAct(Reasoning + Acting)는 세상에 손을 뻗습니다. Thought → Action → Observation의 루프를 돌며, 검색하고 계산하고 관찰한 결과로 다음 생각을 조정하죠. "애플의 시가총액과 작년 대비 변화율은?" 같은 질문을 ReAct는 이렇게 풉니다 — 검색(Action)으로 현재 시총을 관찰(Observation)하고, 다시 작년 시총을 검색해, 변화율을 계산해 답합니다.

💭
Thought
생각
"시총을 찾아야겠다"
🎯
Action
행동(도구 호출)
search[Apple market cap]
👁️
Observation
관찰(결과)
"$3.5조 (집필 시점 예시)"
finish까지
반복
관찰이 부족하면 다시 Thought로 — 외부 세계의 피드백으로 계획을 동적으로 조정한다(무한 루프 방지: max_steps)
그림 7. ReAct 사이클 — 생각(추론)과 도구 호출(행동)이 관찰을 매개로 맞물린다

이 저장소는 ReAct를 두 가지로 구현합니다 — 정규식으로 Action: tool[input]을 파싱하는 순수 Python 버전과, LangGraph StateGraph 버전. 후자가 프로덕션에 가깝습니다. agent 노드(LLM 호출)와 tools 노드(도구 실행)를 조건부 엣지로 잇고, 도구 호출이 더 없으면 종료하죠 — ReAct 루프가 곧 그래프 구조가 됩니다.

PYTHON · LangGraph StateGraph — 조건부 엣지로 ReAct 루프를 그래프로
def should_continue(state) -> Literal["tools", "end"]: last = state["messages"][-1] # 도구 호출이 남아 있으면 tools 노드로, 아니면 종료 if hasattr(last, "tool_calls") and last.tool_calls: return "tools" return "end" graph = StateGraph(AgentState) graph.add_node("agent", call_model) # 추론(LLM) graph.add_node("tools", ToolNode(tools)) # 행동(도구) graph.set_entry_point("agent") graph.add_conditional_edges("agent", should_continue, {"tools": "tools", "end": END}) graph.add_edge("tools", "agent") # 관찰 후 다시 추론으로 ↺

ReAct는 5편(도구 사용)의 추론판입니다 — 도구를 언제·왜 쓸지 생각으로 결정하고, 그 결과를 다시 생각에 반영하죠. 실시간 정보가 필요한 고객 문의 응대·실시간 조회에 강력하지만, 루프가 길어지면 비용이 늘고 무한 루프 위험이 있어 max_steps로 천장을 둡니다.

7. Self-Correction — 스스로 채점하고 고친다 LangChain

Self-Correction은 답안을 제출하기 전에 스스로 검토하고 고치는 학생입니다. 생성 → 평가 → 수정 사이클을 품질 임계값에 도달할 때까지 반복하죠. 4편(리플렉션)의 Producer-Critic 모델이 여기서 다차원 품질 게이트로 정교해집니다.

① 생성 (Generator)
초안 작성
② 평가 (Evaluator)
5차원 채점
품질 게이트?
≥ 0.8 ?
No → ③ 수정 (Reviser)
피드백 반영 후 ②로 되돌아감 ↺
Yes → 최종 출력 ✅
품질 달성, 루프 종료
반복 조건: 점수 < 임계값 AND 반복 < max_iterations — AI가 자신의 출력을 비판하고 개선한다
그림 8. Self-Correction 루프 — 생성·평가·수정과 품질 게이트

평가는 5개 차원으로 채점합니다 — 정확성(Accuracy)·완성도(Completeness)·명확성(Clarity)·몰입도(Engagement)·간결성(Conciseness). 각 차원이 0~1점이고, 약점·개선 제안이 다음 수정의 가이드가 됩니다. 중요한 건 멈추는 법입니다. 무한 반복은 곧 비용 폭발이니까요. 구현은 세 가지 조기 종료 조건을 둡니다.

PYTHON · SelfCorrectionAgent.improve() — 품질 게이트와 조기 종료
for iteration in range(1, self.max_iterations + 1): # 기본 3회 evaluation = self.evaluator.evaluate(current_content, requirements) # 조건 1) 목표 품질 도달 → 종료 if evaluation.overall_score >= self.quality_threshold: # 0.8 break # 조건 2) 개선 정체(수렴) → 종료 if iteration > 1 and (evaluation.overall_score - previous) < self.min_improvement: break # 0.05 미만 # 조건 3) 평가자가 수정 불필요 판단 → 종료 if not evaluation.should_revise: break revised, changes = self.reviser.revise(current_content, requirements, evaluation) current_content = revised

정확도 향상 폭이 가장 큰 기법입니다 — 적용 전략 문서 기준 +40%(비용 2~3배). 계약서 검토·재무 리포트처럼 품질이 곧 신뢰인 작업에서 빛납니다. 실제 효과는 13절 케이스 스터디에서 숫자로 봅니다.

8. Deep Research — 자율 연구 에이전트 LangGraph

지금까지의 기법을 한 워크플로우로 묶으면 Deep Research가 됩니다. 사람이 수 시간 걸릴 리서치를 AI가 자율적으로 수행하죠 — 계획을 세우고, 정보를 모으고, 부족한 부분을 스스로 채우고, 보고서까지 씁니다. Google의 gemini-fullstack-langgraph-quickstart에서 영감을 받은 구현으로, 네 명의 전문가(Planner·Researcher·Synthesizer·Reporter)가 협업하는 구조입니다.

1
Plan
Planner
연구 질문·우선순위 도출
2
Gather
Researcher
질문별 정보 수집
3
Synthesize
Synthesizer
패턴·인사이트 종합
4
Report
Reporter
구조화된 보고서 생성
정보 GAP을 발견하면 추가 검색으로 되돌아가는 반복 정제 — CoT(분석)·ReAct(수집)·Self-Correction(검증)이 한 파이프라인에
그림 9. Deep Research 워크플로우 — Plan → Gather → Synthesize → Report (+ Verify)

LangGraph 버전은 각 단계를 노드로 만들고 current_phase를 기준으로 다음 노드를 고릅니다. 상태(DeepResearchState)에 계획·발견·합성·보고서를 누적하며 흐르죠.

PYTHON · LangGraph — 4개 노드를 상태 전이로 잇는다
graph = StateGraph(DeepResearchState) graph.add_node("plan", plan_research) # Planner graph.add_node("gather", gather_info) # Researcher graph.add_node("synthesize", synthesize_info)# Synthesizer graph.add_node("report", generate_report) # Reporter graph.set_entry_point("plan") graph.add_conditional_edges("plan", should_continue, {"gather": "gather", "end": END}) graph.add_conditional_edges("gather", should_continue, {"synthesize": "synthesize", ...}) graph.add_conditional_edges("synthesize", should_continue, {"report": "report", ...}) graph.add_edge("report", END)

Deep Research는 6편(플래닝)·7편(멀티 에이전트)·14편(RAG)이 추론 위에서 만나는 지점입니다. 시장 조사·경쟁 분석·VoC 인사이트처럼 여러 출처를 종합해 결론을 쓰는 작업을 자동화하죠 — 엔터프라이즈에서 가장 임팩트가 큰 활용처 중 하나입니다(12절).

9. Scaling Inference Law — 작은 모델 + 긴 추론

추론 기법이 비용 설계와 만나는 결정적 지점이 여기입니다. 통념은 "성능 = 모델 크기"였습니다. 그런데 추론 모델 시대의 통찰은 다릅니다 — "큰 모델이 항상 좋은 것은 아니다. 작은 모델 + 더 많은 생각 시간 = 큰 모델과 동등한 성능." 성능을 끌어올리는 축이 '모델 크기' 하나에서 '추론 시간'으로 하나 더 생긴 겁니다.

📏 통념 — 성능은 모델 크기로 산다
더 똑똑하려면 더 크고 비싼 모델로 갈아타야 한다. 비용은 모델 단가에 직결되고, 작은 모델은 '한계가 명확'하다고 본다.
⏱️ Scaling Inference Law
작은 모델에게 추론 시간(Thinking Budget)을 더 주면 큰 모델에 근접한다. 복잡한 문제엔 시간을 더, 단순한 문제엔 빠른 응답을 — 지연을 사서 비용을 아낀다.
그림 10. 성능을 끌어올리는 두 번째 축 — 모델 크기(비용) ⟷ 추론 시간(지연)의 트레이드오프

실무적 의미는 직접적입니다. 핵심은 "Thinking Budget" — 문제 난이도에 따라 추론 시간을 차등 배분하는 것입니다. 단순 질문은 빠르게 끝내고, 복잡한 수학·전략 문제에만 긴 추론을 허용하면 비용 효율적인 배포가 가능해집니다. 16편이 "어떤 모델 좌석에 앉힐까"였다면, 9절은 "그 좌석에서 얼마나 오래 생각하게 할까"입니다 — 둘은 같은 비용-품질 곡선의 두 손잡이입니다.

ℹ️ 교재는 "작은 추론 모델 + 긴 추론 ≈ 대형 모델"을 비용 예시로 설명합니다. 구체 모델명·토큰 단가는 시점에 따라 빠르게 바뀌므로, 이 글은 원리(시간을 사서 크기를 아낀다)에 초점을 둡니다. 최신 단가는 각 제공사 공식 가격 페이지를 확인하세요.

10. 기법 선택 가이드 — 어떤 문제에 무엇을

추론 설계의 절반은 "언제 무엇을 쓸지" 고르는 일입니다. 교재의 의사결정 트리를 따라가면 기법이 자연스럽게 정해집니다. 출발점은 늘 같은 질문 — "이 문제가 정말 복잡한가?" 복잡하지 않다면 추론 기법은 오히려 낭비입니다.

Q. 문제가 복잡한가?
No → 일반 프롬프트 (추론 불필요)
Yes · 외부 도구/정보 필요?
Yes · 정확한 계산 → PALMs
Yes · 그 외 → ReAct
No(도구 불필요) · 여러 경로 탐색?
No → CoT
Yes → ToT
추가 고려: 품질 검증 필요 → + Self-Correction · 다양한 관점 필요 → CoD/GoD · 자율 연구 → Deep Research
그림 11. 추론 기법 선택 의사결정 트리 (교재 기준)

실무에서는 한 기법만 쓰지 않습니다. 조합이 보통이죠 — 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
그림 12. 같은 추론, 다른 추상화 — 선형 흐름은 LCEL, 분기·루프는 StateGraph, 탐색은 순수 Python

고르는 기준은 제어 흐름의 모양입니다. 입력→출력이 한 방향이면 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% ↓
그림 13. 시스템별 추론 기법 매핑과 도입 기대효과 (적용 전략 문서 기준)

전체 ROI도 인상적입니다. 적용 전략 문서는 단순 LLM 호출(정확도 55%, 분석 4시간, 에스컬레이션 35%, 재작업 25%) 대비, 추론 기법 적용 후 정확도 85%(+30%p), Self-Correction까지 더하면 92%, 분석 시간 1.5시간(62.5%↓), 에스컬레이션 15%(57%↓), 재작업 8%(68%↓)를 목표치로 제시합니다.

55% → 85%
복잡 분석 정확도 (+30%p)
4h → 1.5h
평균 분석 시간 (62.5%↓)
~$1.9M
연간 효과 목표 (1,000건/월 기준)
그림 14. 의사결정 품질 ROI 목표치 — 재작업·에스컬레이션·시간 절감의 합산(적용 전략 문서 추정)

물론 리스크 관리가 전제입니다 — ToT의 추론 지연(Beam Width 제한·캐싱), ReAct의 무한 루프(Max Iterations·타임아웃), 그리고 민감한 비즈니스 로직이 추론 과정에 노출되는 위험(중간 사고는 내부 로그로만, 최종 결과만 외부 전달). 추론의 투명성은 강점이지만, 그 투명성을 어디까지 노출할지는 보안 설계의 몫입니다(18편 가드레일에서 이어집니다).

13. 케이스 스터디 — ERP 재무 리포트가 91점에 도달하기까지

Self-Correction의 가치를 한 시나리오로 봅니다. ERP 재무 리포트 자동 생성 — 초안은 늘 어딘가 부족합니다. 수치 오류, 항목 누락, 형식 불일치. 적용 전략 문서의 시나리오는 생성 → 평가 → 수정 사이클이 3번 돌며 품질이 어떻게 오르는지 보여줍니다.

⚠️ 아래 수치는 적용 전략 문서의 도입 기대효과(목표치)·예시 시나리오이며 특정 기업의 실측 결과가 아닙니다.
반복 1 · 초기 생성 62 / 100
 
정확성 70 · 완전성 55 · 일관성 60 — 일부 수치 오류, 주요 항목 누락
반복 2 · 1차 수정 78 / 100
 
정확성 85 · 완전성 75 · 일관성 72 — 수치 수정, 누락 항목 추가
반복 3 · 2차 수정 ✅ 91 / 100 (임계값 85 통과)
 
정확성 95 · 완전성 88 · 일관성 90 — 품질 게이트 통과, 루프 종료
수동 검토 2시간 → 15분 (87.5% 절감) · 재작업 25% → 3%
그림 15. Self-Correction 3회 반복 — 품질 점수가 임계값을 넘을 때까지 스스로 개선(예시 시나리오)

이 시나리오가 이번 편의 축소판입니다. CoT로 비용 항목을 단계별로 분해하고(4편 리플렉션의 Producer-Critic이) Self-Correction의 품질 게이트로 진화하며, 부족하면 다시 도는 루프가 사람의 수동 검토를 대체합니다. 좋은 추론은 곧 "스스로 부족함을 알고, 멈출 줄도 아는" 설계입니다.

14. 베스트 프랙티스 — 쓸지 말지, 그리고 체크리스트

추론 기법도 만능이 아닙니다. 정확도를 사면 비용·지연이 따라온다는 것이 핵심 트레이드오프죠. 그러니 "정말 복잡한 문제인가"를 먼저 물어야 합니다.

✅ 적용해야 할 때
다단계 추론이 필요한 복잡한 문제 (CoT/ToT)
실시간 정보·도구가 필요할 때 (ReAct)
품질·정확성이 신뢰의 핵심일 때 (Self-Correction)
설명 가능성이 요구될 때 (추론 과정 = 근거)
❌ 불필요한 경우
단순 Q&A·사실 조회 — 추론은 과잉
지연에 극도로 민감한 실시간 서비스
토큰 예산이 빠듯할 때 (ToT/CoD는 비쌈)
정답이 하나로 정해진 결정론적 작업
그림 16. 적용 적합성 판단 — 복잡도와 품질 요구가 비용을 정당화할 때만 꺼낸다

도입을 결정했다면 세 가지 안티패턴을 경계하세요. ① 비용 폭발 — 복잡도 분석 없이 모든 요청에 ToT/CoD를 쓰면 토큰이 5~10배로 뜁니다(복잡도 기반 기법 선택 + 캐싱). ② 무한 루프 — ReAct·Self-Correction에 천장이 없으면 영원히 돕니다(Max Iterations + 개선 정체 시 조기 종료). ③ 사고 과정 노출 — 중간 추론에 민감 정보가 새지 않게, 내부 로그와 외부 응답을 분리하세요. 구현이 max_iterations·min_improvement·threshold를 둔 이유입니다.

✅ 추론 기법 도입 체크리스트
☐ 1. 복잡도 판정 먼저 (복잡하지 않으면 일반 프롬프트 — 그림 11)
☐ 2. 기법 선택 (도구 필요→ReAct/PALMs · 다중 경로→ToT · 그 외→CoT)
☐ 3. 품질 게이트 정의 (Self-Correction 차원·임계값 0.8·max 3회)
☐ 4. 무한 루프 방지 (ReAct max_steps · 개선 정체 조기 종료)
☐ 5. 비용 가드레일 (토큰 예산 + 복잡도 기반 기법 선택 + 캐싱)
☐ 6. Thinking Budget 차등 (난이도별 추론 시간 배분 — 그림 10)
☐ 7. 추론 로깅 (session·step·평가 점수 — 디버깅·설명용)
☐ 8. 사고 과정 보안 (중간 추론 내부 로그, 최종 결과만 외부)
☐ 9. 기법 조합 설계 (CoT+Self-Correction, ReAct+CoT 등)
☐ 10. 대시보드 (기법별 정확도·반복 횟수·비용 모니터링)
★ 마치며

순서대로 쪼개고(체이닝), 갈래를 나누고(라우팅), 병렬로 돌리고(병렬화), 스스로 비평하고(리플렉션), 도구를 쥐고(도구 사용), 계획하고(플래닝), 팀을 이루고(멀티 에이전트), 기억하고(메모리), 배우고(학습), 표준으로 도구에 연결되고(MCP), 스스로 채점하고(목표 설정), 넘어져도 일어서고(예외 처리), 멈춰야 할 순간 사람을 부르고(휴먼 인 더 루프), 근거로 말하고(RAG), 다른 에이전트와 협업하고(A2A), 비용을 설계하던(자원 인식) 에이전트 — 이번엔 답하기 전에 깊이 생각하는 법(추론 기법)을 배웠습니다. 단계로 쪼개고(CoT), 갈래를 탐색하고(ToT), 도구를 쥐고 행동하고(ReAct), 스스로 고치고(Self-Correction), 자율적으로 연구하는(Deep Research) 다섯 가지 생각의 골격이죠. 그런데 똑똑하게 생각할수록 위험한 출력도 정교해집니다 — 잘못된 정보, 유출, 탈옥. 다음 편은 가드레일(Guardrails): 에이전트의 입력과 출력에 안전벨트를 채우는 법 — PII 보호, 입출력 검증, 탈옥 탐지입니다. 깊이 생각하게 만들었다면, 이제 안전하게 말하게 할 차례입니다.

#ReasoningTechniques #추론기법 #ChainOfThought #TreeOfThought #ReAct #SelfCorrection #DeepResearch #LangGraph #AI에이전트 #AgenticAI
반응형