W10 Vector RAG · 기업 리포트 AI 챗봇 0%
🧠 추가 학습 · RAG 도입
추가 학습

Vector RAG 기초 — 여신 규정집 AI 챗봇

PDF → 청킹 → 임베딩 → Qdrant → GPT 질의응답

PDF 파싱
청킹
임베딩
Qdrant
GPT
약 90분
What is RAG? · 완전히 새로운 개념

🧠 RAG란 무엇인가?

RAG = Retrieval-Augmented Generation
한국어로 "찾아서 읽고 답하기". AI가 자체 지식만으로 답하는 대신, 내부 문서를 먼저 검색해서 근거 있는 답변을 생성합니다.
💡 도서관 사서에 비유하면?
기존 AI (W4~W6)
사서가 자기 기억에 의존해서 답변.

"여신 한도요? 아마… 5억인 것 같은데요?"

→ 맞을 수도, 틀릴 수도 (할루시네이션)
RAG
사서가 책장에서 규정집을 꺼내 읽고 답변.

"여신취급세칙 제23조 2항에 의거, 개인사업자 신용대출 한도는 3억원입니다."

출처 명시, 정확도 극대화

🔧 RAG 파이프라인 2단계

RAG = 색인 단계 (1회) + 질의 단계 (반복)
📥 1단계: 색인 (Ingestion) — 문서를 AI가 검색할 수 있게 준비
📄 PDF
규정집
✂️ 청킹
잘게 나눔
🔢 임베딩
벡터 변환
💾 Qdrant
벡터 저장
❓ 2단계: 질의 (Query) — 질문하면 답 찾기
❓ 질문
"한도는?"
🔢 질문
벡터 변환
🤖 GPT
답변 생성
✅ 답변
+출처
핵심: 1단계(색인)는 문서가 바뀔 때만 1번 실행. 2단계(질의)는 질문할 때마다 반복 실행. 오늘은 두 단계 모두 n8n으로 만듭니다.
Key Terms · 꼭 알아야 할 용어 3개

📖 RAG 핵심 용어 3개

✂️
청킹 (Chunking) — 문서를 잘게 나누기
규정집 200페이지를 AI가 다룰 수 있는 크기로 분할

규정집 PDF는 수백 페이지입니다. AI에게 전체를 한 번에 보낼 수 없으므로, 의미 단위로 잘게 나눕니다 (보통 500~1000자씩).

📄 여신취급세칙 → ✂️ 청킹 결과
제23조 (개인사업자 신용대출) ① 개인사업자에 대한 신용대출의 최대 한도는 3억원으로 한다. ② 단, 연매출 10억원 이상이고 신용등급 A 이상인 경우 5억원까지 가능하다. ③ 대출 기간은 최대 5년으로 하며, 1년 단위로 연장 심사를 실시한다...
✂️ 청킹 (500자 단위)
제23조 (개인사업자 신용대출) ① 개인사업자에 대한 신용대출의 최대 한도는 3억원으로 한다. ② 단, 연매출 10억원 이상이고 신용등급 A 이상인 경우 5억원까지 가능하다.
③ 대출 기간은 최대 5년으로 하며, 1년 단위로 연장 심사를 실시한다. ④ 연장 심사 시 최근 1년간 연체 이력이 있는 경우 한도를 50% 축소한다...
비유: 두꺼운 백과사전을 낱장 카드로 만드는 것과 같습니다. 나중에 필요한 카드만 꺼내서 읽을 수 있게요.
🔢
임베딩 (Embedding) — 텍스트를 숫자로 변환
컴퓨터가 "의미 유사도"를 계산할 수 있게 변환

임베딩은 텍스트를 숫자 벡터(긴 숫자 목록)로 바꾸는 것입니다. 비슷한 의미의 텍스트는 비슷한 숫자가 됩니다.

// 임베딩 예시 (실제로는 1536개의 숫자) "대출 한도" → [0.12, -0.34, 0.78, 0.45, ...] "여신 최대금액" → [0.11, -0.33, 0.77, 0.44, ...] ← 비슷한 숫자! "오늘 날씨" → [-0.89, 0.56, 0.12, -0.67, ...] ← 완전 다른 숫자
비유: GPS 좌표처럼, 의미가 비슷한 텍스트는 "의미 공간"에서 가까운 위치에 놓입니다. "대출 한도"와 "여신 최대금액"은 거의 같은 위치, "오늘 날씨"는 완전히 먼 위치에 있습니다.
🔍
벡터 검색 (Vector Search) — 의미로 찾기
키워드가 아닌 "의미 유사도"로 관련 문서 찾기

질문도 임베딩 → 저장된 청크 벡터와 거리 비교 → 가장 가까운(의미가 비슷한) 청크를 찾아옵니다.

키워드 검색 vs 벡터 검색
키워드: "대출 한도" 검색 → "대출"과 "한도"라는 단어가 있는 문서만 찾음
벡터: "대출 한도" 검색 → "여신 최대 금액"이라고 적힌 문서도 찾음! (같은 의미니까)

이것이 RAG가 강력한 이유입니다. 규정에 "대출 한도"가 아니라 "여신 한도"로 적혀 있어도 찾아냅니다.
Context

🏢 상황 설정: 규정 검색에 30분

📚
오하늘 심사역
ER은행 여신심사팀 · 4년차
"담보 인정 비율이 몇 %였더라?" — 규정집 PDF를 열고 목차를 보고, Ctrl+F로 검색하고, 여러 조항을 비교해서 답을 찾습니다. 한 건당 10~30분. 하루에 이런 질문이 5번이면 2시간 이상이 규정 검색에 소모됩니다.

🎯 완성하면 이렇게 동작합니다

🤖 ER은행 규정 챗봇
Q
오하늘 심사역
개인사업자 신용대출 최대 한도는 얼마인가요?
A
규정 챗봇 (GPT + RAG)
개인사업자 신용대출의 최대 한도는 3억원입니다. 다만, 연매출 10억원 이상이고 신용등급 A 이상인 경우 5억원까지 가능합니다.
📌 출처: 여신취급세칙 제23조 제1항, 제2항 (p.47)
Q
오하늘 심사역
담보 인정 비율 LTV는 몇 %야?
A
규정 챗봇 (GPT + RAG)
부동산 담보 인정 비율(LTV)은 아파트 70%, 일반 주택 60%, 상업용 부동산 50%입니다.
📌 출처: 여신취급세칙 제31조 제3항 [별표 2] (p.62)
Step-by-Step · 모범답안 가이드

🔧 실습 (80분)

📌 오늘의 실습은 2개의 워크플로를 만듭니다
워크플로 ①: 색인 파이프라인 (PDF → 청킹 → 임베딩 → Qdrant) — 규정집 업로드 시 실행
워크플로 ②: 질의 파이프라인 (질문 → 벡터 검색 → GPT 답변) — 반복 사용
1
🆕 Qdrant 준비 — 벡터 DB 설정
⏱ 약 15분 · 무료 계정 생성 + 벡터 테이블 만들기
🆕 New Tool

Qdrant란?

Qdrant는 무료로 시작할 수 있는 벡터 데이터베이스입니다. 여기에 규정집 청크를 벡터(숫자)로 저장하면, 나중에 질문과 유사한 청크를 빠르게 찾을 수 있습니다.

1. Qdrant.com → 무료 계정 생성

2. API KeyCluster Endpoint를 복사

3. "Create a Free Cluster": ERBank

4. "Create Collection": Company-Report

5. n8n Credentials에 "Qdrant" 등록

⚠️ vector(1536)이 뭔가요?
OpenAI의 임베딩 모델(text-embedding-3-small)이 텍스트를 1536개의 숫자로 변환합니다. 그 숫자들을 저장하는 공간입니다. 숫자 자체는 몰라도 됩니다 — n8n이 자동으로 처리합니다!
2
워크플로 ① — PDF 파싱 + 청킹
⏱ 약 15분 · 규정 PDF를 텍스트로 추출하고 잘게 나누기

📝 워크플로 구성

// 워크플로 ① 색인 파이프라인 ① GoogleDrive Trigger - On changes involving a specific folder ← 폴더에 파일이 추가되면 자동 감지 ② GoogleDrive - Download file ← 추가된 파일 다운로드 ③ Extract From File ← PDF 내용을 텍스트로 추출 ④ Code (청킹) ← 텍스트를 500자 청크로 분할 ⑤ Qdrant (Insert) ← 벡터 DB에 저장

Code 노드 — 청킹 로직

// Code 노드 — 텍스트를 500자 청크로 분할 const text = $input.first().json.text; // PDF에서 추출된 텍스트 const chunkSize = 1000; // 글자 수 기준 (조절 가능) const overlap = 200; // 겹침 (문맥 유지용) let chunks = []; for (let i = 0; i < text.length; i += (chunkSize - overlap)) { chunks.push({ chunk: text.slice(i, i + chunkSize) }); } return chunks.map(c => ({ json: c }));
💡 overlap(겹침)이 왜 필요한가요?
"제23조 ② 단, 연매출 10억원 이상이고"에서 잘리면 뒷내용이 사라집니다. 200자를 겹쳐서 자르면 앞 청크의 마지막 200자가 다음 청크의 시작 50자와 겹칩니다. 이렇게 하면 문장이 중간에 끊기는 것을 방지합니다.
3
임베딩 생성 + Qdrant 저장
⏱ 약 15분 · 🆕 Embedding + 벡터 DB 쓰기
🆕 Embedding

Qdrant 노드 — 임베딩 생성

// Qdrant - Upsert Points 노드 설정 Credential: Qdrant API Key Resource: point Operation: Upsert Points Collection Name: regulations Points: {{ [ { id: $itemIndex, payload: { text: $json.chunk }, vector: { dense: { // 유사도 벡터 text: $json.chunk, model: "sentence-transformers/all-minilm-l6-v2" }, sparse: { // 키워드 벡터 text: $json.chunk, model: "qdrant/bm25" } } } ].toJsonString() }} Wait: true Ordering: Weak

✅ 임베딩 완료 확인

Qdrant → Collection regulations에 청크 수만큼 행이 들어가 있으면 성공!

4
워크플로 ② — 질의 파이프라인 (질문 → 검색 → 답변)
⏱ 약 25분 · 핵심! 벡터 검색 + GPT 답변 생성
🆕🆕🆕 Core
// 워크플로 ② 질의 파이프라인 구조 ① Chat Trigger ← 질문을 N8N의 Chat으로 수신 ② Qdrant - Query Points ← 질문을 벡터로 변환 및 벡터 스토어 검색 ③ GPT AI Agent ← 청크 기반 답변 생성 ④ Chat Send Message ← 답변 반환

Chat Triiger 질문 수신

// Chat Trigger Options response Mode: Using Response Nodes

n8n에서 Qdrant 검색 호출

// Qdrant 노드 - Query Points Credential: Qdrant API Key Resource: Search Operation: Query Points Collection Name: regulations Query: { "fusion": "rrf"// rrf : dense 및 sparse 벡터스토어로 부터 검색된 결과를 합침 } Score Threshold: 0// 유사도 최소 점수 Limit: 5// 반환 갯수 Offset: 0 With Vector: false With Payload: true Using: Filter: null Prefetch: [ { "query": { "text": "{{ $json.chatInput }}", "model": "sentence-transformers/all-minilm-l6-v2" }, "using": "dense", "limit": 10 }, { "query": { "text": "{{ $json.chatInput }}", "model": "qdrant/bm25" }, "using": "sparse", "limit": 10 } ] Params: null Lookup From: null Consistency: Majority Timeout: 100 Shard Key: null

GPT AI — 출처 기반 답변 생성

📋 System Prompt
당신은 ER은행 여신 규정 전문 상담사입니다. "참고 문서"로 전달한 【검색된 규정 원문】을 근거로 질문에 답변하세요. 【규칙】 - 반드시 검색된 원문에 있는 내용만으로 답변하세요 - "참고문서"로 답변할수 없는 질문은 "해당 내용은 검색된 규정에서 찾을 수 없습니다"라고 답하세요 - 답변 끝에 반드시 출처(조항 번호)를 명시하세요 【응답 형식 — JSON】 { "답변": "개인사업자 신용대출 최대 한도는 3억원입니다.", "출처": "여신취급세칙 제23조 제1항" }
// User Message { "질문": {{ $('When chat message received').item.json.chatInput }} "참고문서": {{ JSON.stringify($json.result.points.map(item => item.payload.text.replaceAll("\n","").trim())) }} }

Chat Send Message

// Chat Send Message Operation: Send Message Message: {{ $json.output }}
5
테스트 — 실제 질문으로 검증!
⏱ 약 10분 · 3가지 질문으로 RAG 성능 확인

Chat으로 아래 질문을 보냅니다:

테스트 질문기대 답변 핵심기대 출처
"운전자금 여신에서 우선 취급해야 하는 자금은?"상업어음할인 등 단기간 내 상환 자금제4조 제1항
"주채무계열 소속 기업체 대출은 중소기업 대출비율 산정에 포함되나요?"포함되지 않음제7조 제2항 제1호
"중소기업대출비율 준수 여부는 얼마나 자주 점검하나요?"1개월마다제7조의2 제1항

🔧 자주 발생하는 문제

검색 결과가 0건이에요
임베딩 워크플로가 정상 실행됐는지, Qdrant regulations collection에 데이터가 있는지 확인. embedding 칼럼이 null이면 OpenAI 임베딩이 실패한 것.
GPT가 리포트에 없는 내용을 지어내요
System Prompt에 "원문에 없는 내용은 답하지 마세요"가 빠졌는지 확인.
Self-Check · 완료 확인

✅ W10 실습 완료 체크리스트

Qdrant에 regulations collection을 생성했다
입베딩 파이프라인이 PDF → 청킹 → 임베딩 → Qdrant 저장을 완료했다
Qdrant regulations 테이블에 청크 데이터가 저장되어 있다
질문을 보내면 관련 청크 Top-5가 검색된다
GPT가 검색된 청크를 근거로 답변하고 출처를 명시한다
3가지 테스트 질문에 대해 정확한 조항을 인용한 답변이 나온다
Key Concepts

📌 핵심 개념 정리

R
RAG (Retrieval-Augmented Generation)
AI가 자체 지식 대신 내부 문서를 검색해서 근거 있는 답변을 생성. 할루시네이션 방지 + 출처 명시가 핵심 장점.
✂️
청킹 (Chunking)
긴 문서를 500~1000자 단위로 분할. 조항 단위가 이상적. overlap(겹침)으로 문장 단절 방지.
🔢
임베딩 (Embedding)
텍스트를 숫자 벡터로 변환. 의미가 유사한 텍스트는 유사한 벡터. "대출 한도" ≈ "여신 최대금액".
🔍
하이브리드 검색 (Hybrid Search)
키워드 및 의미 유사도로 검색. Qdrant가 질문과 가장 유사한 청크를 찾음.
ER은행 AX 업무혁신 과정 · Track 1 · 추가 학습(RAG) 실습 가이드 · 2026