**RAG(Retrieval-Augmented Generation, 검색 증강 생성)**는 모델을 새로 학습시키지 않고도 사내 보안 문서나 최신 자료를 실시간 검색하여 환각 없이 정밀한 답변을 내놓게 만드는 핵심 Enterprise 아키텍처입니다.
1. RAG 핵심 용어 사전 (Glossary)
- Embedding (임베딩): 단어나 문장의 고유한 의미적 특징을 수백~수천 차원의 숫자 벡터(Vector Array)로 변환하는 기법입니다. (비슷한 의미의 문장은 고차원 공간에서 가까운 거리에 위치)
- Vector DB (벡터 데이터베이스): 고차원 임베딩 벡터 간의 거리를 인덱싱하여 밀리초(ms) 단위로 고속 검색하는 전문 DB입니다. (예: ChromaDB, Pinecone, FAISS, Qdrant)
- Cosine Similarity (코사인 유사도): 두 벡터 사이의 각도 코사인 값을 이용해 문장의 의미적 유사도(-1 ~ 1)를 측정하는 수학 공식입니다.
- Chunking (청킹): 긴 문서 텍스트를 검색 효율을 높이기 위해 300~1000자 내외의 작은 단락 조각으로 쪼개는 전처리입니다.
2. RAG 아키텍처의 3단계 작동 흐름
[1. Indexing 단계]
원본 문서 (PDF/Word) ---> 텍스트 분할 (Chunking) ---> Embedding 모델 변환 ---> Vector DB 저장
[2. Retrieval & Generation 단계]
사용자 질문 ---> 질문 Embedding 변환 ---> Vector DB에서 유사 문서 Top-K 검색 ---> Prompt Context 합체 ---> LLM 최종 답변
3. 파이썬 임베딩 생성 및 코사인 유사도 실습 예제
import numpy as np
# 1. OpenAI 임베딩 API 호출 (text-embedding-3-small)
def get_embedding(text):
res = client.embeddings.create(input=text, model="text-embedding-3-small")
return res.data[0].embedding
# 2. 코사인 유사도 계산 함수
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
vec1 = get_embedding("아두이노 마이크로컨트롤러 프로그래밍")
vec2 = get_embedding("임베디드 보드 스케치 코딩")
vec3 = get_embedding("맛있는 맛집 삼겹살 레시피")
print("문장 1과 문장 2 유사도 (연관성 높음):", cosine_similarity(vec1, vec2))
print("문장 1과 문장 3 유사도 (연관성 낮음):", cosine_similarity(vec1, vec3))
4. 자주 묻는 질문 (Q&A)
Q. 키워드 검색(BM25)과 벡터 유사도 검색의 차이는? A. 키워드 검색은 정확히 일치하는 단어 문자가 있어야 찾지만, 벡터 검색은 "노트북이 고장 났어요"라고 검색해도 키워드는 없지만 의미가 통하는 "PC 수리 A/S 안내문"을 찾아내는 장점이 있습니다. 최신 RAG 시스템은 둘을 섞어 쓰는 Hybrid Search를 채택합니다.