1. 들어가며
이전 3편에서는 CoT(생각의 사슬), 자기 일관성(Self-Consistency) 등 AI의 '내부 추론' 능력을 극대화하는 기법을 마스터했습니다.
하지만 AI가 2023년 9월까지의 지식만 가지고 있다면 어떨까요? AI가 '오늘의 날씨'를 모르거나, '우리 회사 내부 문서'를 참조할 수 없다면 현업에서 사용하기엔 치명적입니다.
4편에서는 드디어 이 '닫힌 상자(Closed-book)' 같던 AI를 '외부 세계'와 연결합니다. AI에게 **'실시간 정보'(RAG)**를 검색할 '눈'을, **'외부 도구'(ReAct)**를 사용할 '손발'을 달아주는 'AI 에이전트' 기법들을 마스터할 차례입니다.
이제 프롬프트 엔지니어링의 '현업 끝판왕' 기법으로 들어갑니다.

2. RAG (Retrieval Augmented Generation): AI에게 '오픈북' 쥐어주기
LLM의 가장 큰 한계는 '지식의 정지(Static Knowledge)'입니다. (예: ChatGPT 3.5는 2022년 1월까지의 데이터만 학습)
**RAG(검색 증강 생성)**는 이 문제를 해결하는 가장 표준적이고 강력한 "국룰"입니다.
RAG란? LLM이 답변을 생성(Generation)하기 전에, LLM이 모르는 최신 정보나 내부 문서를 **먼저 검색(Retrieval)**하고, 검색된 자료를 프롬프트에 '문맥(Context)'으로 **증강(Augmented)**하여 함께 전달하는 2단계 기술입니다.
마치 AI에게 '폐쇄된 암기 시험(Closed-book)'이 아닌, '참고 자료(오픈북)'를 쥐여주고 시험을 보게 하는 것과 같습니다.
2.1 RAG 현업 워크플로우
- [사전 준비] 지식 창고 구축 (Indexing):
- 미리 우리 회사 내부 문서(PDF, Notion 등)나 최신 뉴스 기사들을 잘게 쪼개어 '벡터 DB(Vector Database)'라는 특수 DB에 저장해 둡니다.
- [1단계] 검색 (Retrieve):
- 사용자가 "어제 발표한 A사 실적 어때?"라고 질문합니다.
- AI는 즉시 답변하지 않습니다. 먼저 벡터 DB에서 'A사 실적'과 가장 **관련성이 높은 문서 조각(예: 어제 자 뉴스 기사)**을 '검색'합니다.
- [2단계] 증강 및 생성 (Augment & Generate):
- AI가 [1단계]에서 찾은 문서 조각을 프롬프트에 '증거'로 끼워 넣고, LLM에게 최종 질문을 던집니다.
2.2 RAG 실전 예시 (뉴스 기사 검색)
### 지시 ###
당신은 냉철한 금융 애널리스트입니다.
아래 [참고 자료]를 바탕으로 [사용자 질문]에 대해
'핵심 결론'과 '근거 수치'를 포함하여 답하세요.
[참고 자료]에 답이 없으면 "정보 없음"이라고만 답해야 합니다.
### 참고 자료 (RAG가 DB에서 검색해 온 내용) ###
[문서 1: 2025년 11월 17일자 'AI 비즈니스' 뉴스]
"오늘 '테크코어(TechCore)' 사는 3분기 실적 발표에서
AI 부문 매출이 전년 대비 150% 성장한 50억 달러를 기록했다고 밝혔다.
이는 시장 예상치인 40억 달러를 크게 상회하는 '어닝 서프라이즈'이다..."
### 사용자 질문 ###
"테크코어 3분기 AI 매출 실적 어때?"
(RAG가 적용된 AI의 정답) 테크코어 3분기 AI 부문 매출은 50억 달러로, 시장 예상치(40억 달러)를 크게 상회하는 '어닝 서프라이즈'를 기록했습니다.
AI의 환각(Hallucination)이 사라지고, '데이터에 기반한' 답변을 생성합니다.
3. ReAct: AI에게 '손발' 달아주기 (Thought-Action Loop)
RAG가 AI에게 '눈(검색)'을 달아줬다면, ReAct는 AI에게 '손발(행동)'을 달아줍니다.
**ReAct (Reasoning + Action)**는 (Yao et al. 2022) AI가 단순 텍스트 답변 대신, **'생각(Thought)'**과 **'행동(Action)'**을 생성하도록 설계된 프레임워크입니다.
ReAct의 핵심: T-A-O 루프
- Thought (생각): 현재 상황을 진단하고, 다음 행동을 '계획'한다.
- Action (행동): 계획에 따라 search[...]나 check_price[...] 같은 '도구(Tool)'를 호출한다.
- Observation (관찰): 도구 호출의 '결과'를 받아본다.
... [1번으로 돌아가] 이 관찰(Observation)을 바탕으로 다시 '생각'한다. (정답이 나올 때까지 반복)
3.1 ReAct 실전 예시 (쇼핑 추천 에이전트)
AI가 search_product(query)와 get_user_location()이라는 두 가지 도구를 쓸 수 있다고 가정해 봅시다.
# 사용자가 ReAct 에이전트에게 질문
Q: "오늘 입기 좋은 반팔 티셔츠 추천해 줘. 3만원 미만으로."
(ReAct 에이전트의 내부 T-A-O 루프)
Thought 1: 사용자가 '반팔 티셔츠'와 '3만원 미만' 조건을 원한다. 그런데 '오늘 입기 좋은'이라는 조건은 '날씨' 정보가 필요하다. 날씨를 먼저 확인해야겠다. Action 1: get_user_location() Observation 1: (도구 결과) {"location": "서울"}
Thought 2: 사용자 위치가 '서울'임을 확인했다. 이제 서울의 '오늘 날씨'를 검색해서 '반팔'이 적절한지 확인해야 한다. Action 2: search_product(query="서울 오늘 날씨") Observation 2: (도구 결과) "서울시 11월 18일 날씨: 최고 5°C, 최저 -2°C. 매우 추움."
Thought 3: 오늘 날씨는 5°C로 매우 춥다. 사용자가 요청한 '반팔 티셔츠'는 '오늘 입기 좋은' 조건에 명백히 모순된다. '3만원 미만'의 '따뜻한 긴팔'을 제안하는 것이 합리적이다. Action 3: search_product(query="긴팔 티셔츠 3만원 미만") Observation 3: (도구 결과) [{"id": 101, "name": "기모 긴팔 티셔츠", "price": 28000}, ...]
Thought 4: '기모 긴팔 티셔츠' (28,000원)를 찾았다. 조건에 맞다. 이제 최종 답변을 생성한다. Action 4: (Finish) "고객님, 오늘 서울 날씨(최고 5°C)는 반팔을 입기에 매우 춥습니다. 대신 3만원 미만으로 구매 가능한 '기모 긴팔 티셔츠'(28,000원)를 추천해 드립니다."
이것이 바로 'AI 에이전트'가 작동하는 방식입니다.
4. ToT (Tree of Thoughts): '하나의 길'이 아닌 '모든 길' 탐색하기
이전에 배운 CoT(생각의 사슬)는 '하나의' 추론 경로만 따릅니다. 만약 그 길이 막다른 길이거나 틀린 길이라면? AI는 실패합니다.
**ToT(생각의 트리)**는 (Yao et el. 2023) CoT를 일반화한 개념으로, 하나의 경로가 아니라 '여러 추론 경로'를 동시에 탐색하는 기법입니다.
ToT의 작동 방식
- Decompose (분해): 문제를 여러 단계로 쪼갭니다.
- Generate (생성): 각 단계에서 '가능한 다음 생각(경로)'을 3~5개씩 생성합니다. (가지치기)
- Evaluate (평가): LLM 스스로 각 경로가 "정답에 도달할 가능성이 있는가?" (예: '확실함', '아마도', '불가능')를 평가합니다.
- Explore (탐색): '불가능'한 경로는 가지치기(Pruning)하고, '확실함/아마도' 경로만 계속 탐색합니다. (DFS 또는 BFS 방식)
4.1 ToT 실전 예시 (논리 퍼즐)
"5리터 물통과 3리터 물통으로 정확히 4리터를 만드는 방법은?" 같은 복잡한 계획/논리 문제에서 ToT는 CoT를 압도합니다.
- (CoT의 실패): Thought 1: 5L 통을 채운다. (5, 0) Thought 2: 5L 통에서 3L 통으로 붓는다. (2, 3) Thought 3: 3L 통을 비운다. (2, 0) Thought 4: 2L를 3L 통에 붓는다. (0, 2) Thought 5: 5L 통을 채운다. (5, 2) Thought 6: 5L 통에서 3L 통을 마저 채운다(1L). 5L 통에 4L가 남는다. (성공) (Note: 이 문제는 CoT로도 운 좋게 풀릴 수 있지만, 조금만 꼬이면 막힙니다.)
- (ToT의 접근): Step 1 (Root): 상태 (0, 0) Step 2 (가지치기):
- Path A: 5L 통 채우기 (5, 0) -> [평가: '가능성 높음']
- Path B: 3L 통 채우기 (0, 3) -> [평가: '가능성 높음'] Step 3 (Path A 탐색):
- Path A-1: (5, 0) -> 5L를 3L로 (2, 3)
- Path A-2: (5, 0) -> 5L 비우기 (0, 0) -> [평가: '무의미', 가지치기] Step 3 (Path B 탐색):
- Path B-1: (0, 3) -> 3L를 5L로 (3, 0)
- Path B-2: (0, 3) -> 3L 비우기 (0, 0) -> [평가: '무의미', 가지치기] Step 4 (Path A-1, Path B-1 동시 탐색): ... (이 과정을 반복하며 최적의 경로를 찾아냄)
ToT는 CoT보다 훨씬 복잡하고 비용이 많이 들지만, 복잡한 전략 게임이나 수학 증명 등 '탐색'이 필요한 문제에서 '미친' 성능을 보여줍니다.
5. PAL (Program-aided Language Models): '말' 대신 '코드'로 생각하기
CoT나 ToT는 AI가 '자연어(말)'로 생각하는 방식입니다. 하지만 AI는 '말'로 수학 계산을 하면 자주 틀립니다. (예: 15 * 12 + 5 = 185인데 200이라고 우김)
**PAL(프로그램 지원 언어 모델)**은 (Gao et al. 2022) 이 문제를 해결하기 위해, AI에게 '자연어' 대신 **'코드(Python)'**로 생각하게 만드는 기법입니다.
PAL의 작동 방식
- [LLM] 추론 -> 코드 생성: LLM이 사용자의 자연어 질문을 '이해'하고, 정답을 '계산'하는 대신, 정답을 '계산하는 코드'를 생성합니다.
- [실행기] 코드 실행: 이 코드를 '파이썬 인터프리터' 같은 외부 실행기가 돌립니다.
- [결과] 정답 반환: 코드의 실행 결과(예: print 값)를 최종 답변으로 사용합니다.
5.1 PAL 실전 예시 (날짜 계산)
# (Bad 👎): CoT (자연어) 방식
Q: "오늘이 2025년 11월 18일이면, 100일 뒤는 무슨 요일이야?"
A: (1) 11월은 30일까지... 12월은 31일까지... (2) 100일을 더하면...
(AI가 높은 확률로 날짜나 요일 계산에서 틀림)
# (Good 👍): PAL (코드) 방식
Q: "오늘이 2025년 11월 18일이면, 100일 뒤는 무슨 요일이야?"
A: (LLM이 아래 '코드'를 생성)
# LLM이 생성한 추론 코드
import datetime
# 1. 기준 날짜 설정
start_date = datetime.date(2025, 11, 18)
# 2. 100일 뒤 날짜 계산
future_date = start_date + datetime.timedelta(days=100)
# 3. 요일 계산 (0=월요일, 1=화요일...)
weekday_index = future_date.weekday()
weekdays = ["월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"]
future_weekday = weekdays[weekday_index]
print(future_weekday)
(파이썬 인터프리터의 실행 결과) 수요일
LLM은 '추론(코딩)'만 하고, '계산(실행)'은 100% 정확한 컴퓨터가 합니다.
6. 그 외 핵심 에이전트 기법 (Reflexion · APE · ART)
- Reflexion (자기 성찰/피드백): ReAct의 T-A-O 루프는 '실패'에 취약합니다. Action이 실패하면(예: Error 404), 에이전트가 멈춥니다. Reflexion은 (Shinn et al. 2023) 여기에 Self-Reflection 단계를 추가합니다.
- (실패 관찰): Observation: Error 404, API endpoint not found.
- (Reflexion): "내 행동이 실패했다. 'v1' 엔드포인트가 문제인 것 같다. 'v2' 엔드포인트로 다시 시도해 봐야겠다."
- (다음 Thought): Thought: 'v2' 엔드포인트를 사용해 다시 API를 호출한다.
- 실패로부터 스스로 학습하고 계획을 수정하는 '회복탄력성'이 생깁니다.
- APE / ART (자동 프롬프트/추론): "이런 복잡한 프롬프트(CoT, ReAct)를 꼭 내가 써야 하나?"에 대한 답입니다.
- APE (Automatic Prompt Engineer): AI에게 '좋은 프롬프트'를 자동으로 생성(최적화)하게 만드는 기법입니다.
- ART (Automatic Reasoning and Tool-use): AI가 '도구 사용 예시 라이브러리'를 학습하여, 우리가 예시를 주지 않아도 '처음 보는 작업'에 대해 스스로 ReAct 추론 체인을 구축하게 만드는 기법입니다.
7. 한눈에 비교: AI 에이전트 프레임워크 요약
| 프레임워크 | 핵심 개념 | 해결하는 문제 | 비유 (Analogy) |
| RAG (Retrieval) | 검색 + 생성 | 최신 정보 부재, 환각(Hallucination) 해결. | "오픈북 시험" (참고서 보고 답하기) |
| ReAct | 추론 + 행동(도구) | API 호출, 계산 등 실질적 행동 수행. | "손발이 달린 AI" (검색하고 클릭하기) |
| ToT (Tree of Thoughts) | 여러 경로 탐색 + 평가 | 막다른 길에서 돌아오기, 전략적 계획 수립. | "체스 두는 AI" (여러 수 앞을 내다봄) |
| PAL (Program-aided) | 자연어 대신 코드로 추론 | 수학 계산 오류, 날짜/시간 로직 해결. | "계산기 두드리는 AI" (파이썬에게 위임) |
| Reflexion | 행동 결과 성찰 + 재시도 | 에러 발생 시 멈추지 않고 스스로 수정. | "오답 노트 쓰는 AI" (실패에서 배움) |
8. 마치며
4편에서는 AI를 '닫힌 상자'에서 꺼내 '외부 세계'와 연결하는 기법들을 알아봤습니다.
- RAG: AI가 모르는 최신/내부 지식을 '검색'
- ReAct/PAL: 계산, API 호출 등 '도구'를 사용
- ToT/Reflexion: '복잡한 계획'과 '실패 복구'
이로써 우리는 AI가 '생각'하고, '검색'하고, '행동'하며 '스스로 학습'하는 'AI 에이전트'의 핵심 부품들을 모두 마스터했습니다.
다음 5편에서는 이 모든 기법을 아우르는 실전 응용편입니다. AI를 활용한 '데이터 생성' 기법과, ReAct/PAL의 구체적인 구현체인 **'Function Calling'**을 마스터하여 우리만의 AI 에이전트를 완성해 보겠습니다.