본문으로 바로가기
AI

RAG 기반 LLM 애플리케이션 구축하기 — 환각 없는 AI 만들기

A
AlwaysCorp AI연구팀· AI·머신러닝 콘텐츠 전문
||13분 읽기
#RAG#LLM#AI#벡터DB#임베딩#LangChain#ChatGPT#자연어처리#생성형AI#검색증강생성

LLM의 아킬레스건, 환각(Hallucination)

"독도는 일본 영토인가요?"라는 질문에 대해 LLM이 자신만만하게 거짓 정보를 생성한다면 어떨까요? 2023년 뉴욕의 한 변호사가 ChatGPT로 작성한 법률 준비서면에 존재하지 않는 판례 6건이 포함되어 법정 제재를 받은 사건은 LLM 환각(Hallucination)의 위험성을 전 세계에 알렸습니다.

LLM은 훈련 데이터의 패턴을 기반으로 "그럴듯한 다음 토큰"을 생성할 뿐, 사실 여부를 검증하는 메커니즘이 없습니다. Meta AI의 2024년 분석에 따르면 GPT-4 수준의 모델도 사실적 질문에 대해 3~15%의 환각률을 보이며, 도메인 특화 질문에서는 그 비율이 더 높아집니다.

RAG(Retrieval-Augmented Generation)는 이 문제에 대한 가장 실용적인 해결책으로, Lewis et al.(2020, NeurIPS)이 제안한 아키텍처입니다. 핵심 아이디어는 간단합니다: LLM이 답변을 생성하기 전에, 관련 문서를 먼저 검색하여 근거 자료와 함께 제공하는 것입니다.

---

RAG의 작동 원리

전체 파이프라인

RAG 시스템은 크게 두 단계로 구성됩니다. 인덱싱 단계에서는 문서를 청크(chunk)로 분할하고, 각 청크를 임베딩 벡터로 변환한 뒤 벡터 데이터베이스에 저장합니다. 질의 단계에서는 사용자 질문을 동일한 임베딩 모델로 벡터화하고, 벡터 DB에서 유사한 청크를 검색한 뒤, 검색된 문맥과 질문을 함께 LLM에 전달하여 답변을 생성합니다.

이 구조의 장점은 명확합니다. LLM의 지식을 직접 수정하지 않고도(재훈련 없이) 최신 정보를 반영할 수 있고, 답변의 출처를 명시할 수 있으며, 도메인 특화 지식을 주입할 수 있습니다. 모델 미세조정(fine-tuning) 대비 비용이 훨씬 낮다는 것도 실무적으로 큰 이점입니다.

임베딩(Embedding)이란

임베딩은 텍스트를 고차원 벡터 공간의 점으로 변환하는 과정입니다. 의미적으로 유사한 텍스트는 벡터 공간에서 가까운 위치에 놓이게 되므로, 코사인 유사도(cosine similarity) 같은 거리 측정으로 의미적 관련성을 계산할 수 있습니다.

2024년 기준 널리 사용되는 임베딩 모델은 OpenAI의 text-embedding-3-large, Google의 Gecko, 오픈소스 진영의 BGE-M3E5-Mistral 등이 있습니다. 모델 선택 시 차원 수, 최대 토큰 길이, 다국어 지원 여부, 비용을 종합적으로 고려해야 합니다.

RAG 파이프라인 전체 구조 — 인덱싱과 질의 단계
RAG 파이프라인 전체 구조 — 인덱싱과 질의 단계

---

청킹 전략 — RAG 성능의 80%가 여기서 결정된다

왜 청킹이 중요한가

문서를 통째로 임베딩하면 의미가 희석되어 검색 정확도가 떨어지고, 너무 잘게 쪼개면 문맥이 소실됩니다. LlamaIndex의 2024년 벤치마크에 따르면, 청킹 전략만 최적화해도 RAG 시스템의 응답 품질이 40% 이상 향상될 수 있다고 합니다.

주요 청킹 방법

고정 크기 청킹은 가장 단순한 방법으로, 문서를 일정한 토큰 수(예: 512토큰)로 분할합니다. 구현이 쉽지만 문장이나 문단 경계를 무시하므로 문맥이 끊길 수 있습니다. 이를 완화하기 위해 청크 간 오버랩(overlap)을 50~100토큰 정도 두는 것이 일반적입니다.

의미적 청킹(Semantic Chunking)은 문장 간 임베딩 유사도를 계산하여, 의미가 크게 전환되는 지점에서 분할하는 방법입니다. Greg Kamradt가 2023년에 제안한 이 접근법은 고정 크기 방식보다 검색 품질이 우수하지만, 처리 비용이 높습니다.

계층적 청킹(Hierarchical Chunking)은 문서를 섹션 → 문단 → 문장의 계층 구조로 분할하고, 각 수준에서 독립적으로 검색할 수 있게 합니다. 상위 수준에서 관련 섹션을 먼저 찾고, 하위 수준에서 구체적인 문맥을 추출하는 2단계 검색이 가능합니다.

---

벡터 데이터베이스 선택

주요 벡터 DB 비교

Pinecone은 완전 관리형(fully managed) 서비스로, 인프라 관리 부담 없이 빠르게 시작할 수 있습니다. Weaviate는 하이브리드 검색(벡터 + 키워드)을 기본 지원하며, 자체 호스팅이 가능합니다. Chroma는 로컬 개발에 최적화된 경량 벡터 DB로, 프로토타이핑 단계에서 많이 사용됩니다. Qdrant는 Rust로 구현되어 성능이 뛰어나며, 필터링 기능이 강력합니다.

선택 기준은 데이터 규모, 쿼리 패턴, 운영 환경, 비용에 따라 달라집니다. 1만 건 이하의 소규모 프로젝트라면 Chroma로 시작하고, 프로덕션 규모에서는 Pinecone이나 Qdrant를 검토하는 것이 합리적입니다.

하이브리드 검색의 위력

순수 벡터 검색만으로는 한계가 있습니다. "OAuth 2.0"이라는 키워드를 정확히 찾아야 하는 상황에서 의미적 유사도 기반 검색은 "인증 프로토콜"이나 "토큰 관리" 같은 관련 문서를 반환할 수 있지만, 정확한 키워드 매칭을 보장하지 않습니다.

하이브리드 검색은 벡터 검색(의미적 유사도)과 키워드 검색(BM25 등)을 결합하여 양쪽의 장점을 취하는 방식입니다. Reciprocal Rank Fusion(RRF) 같은 점수 통합 알고리즘을 사용하여 두 검색 결과를 하나의 랭킹으로 합칩니다.

RAG 시스템 벡터 DB 비교와 하이브리드 검색 구조
RAG 시스템 벡터 DB 비교와 하이브리드 검색 구조

---

RAG 평가 — 어떻게 품질을 측정하나

RAGAS 프레임워크

Shahul Es et al.(2023)이 제안한 RAGAS(RAG Assessment)는 RAG 시스템의 품질을 체계적으로 평가하는 프레임워크입니다. 네 가지 핵심 지표를 제공하죠.

Faithfulness(충실도)는 생성된 답변이 검색된 문맥에 기반하는 정도를 측정합니다. 문맥에 없는 내용을 생성하면 점수가 낮아집니다. Answer Relevancy(답변 관련성)는 답변이 질문에 얼마나 적절한지를, Context Precision(문맥 정밀도)는 검색된 문맥 중 실제로 유용한 비율을, Context Recall(문맥 재현율)은 필요한 정보가 검색 결과에 포함되었는지를 측정합니다.

실무 평가 전략

자동 평가 외에도 인간 평가(Human Evaluation)를 병행하는 것이 중요합니다. "LLM-as-a-Judge" 패턴은 GPT-4 같은 강력한 모델을 평가자로 활용하는 방식으로, 인간 평가와 80% 이상의 일치율을 보이면서도 비용과 시간을 크게 절약할 수 있어 빠르게 확산되고 있습니다.

---

Advanced RAG 기법

Query Rewriting은 사용자의 원래 질문을 검색에 최적화된 형태로 재작성하는 기법입니다. "그거 어떻게 하는 거야?"처럼 모호한 질문을 대화 맥락을 반영하여 구체적인 검색 쿼리로 변환합니다.

Self-RAG(Asai et al., 2023)는 모델이 스스로 검색 필요 여부를 판단하고, 검색 결과의 관련성을 평가하며, 생성된 답변의 신뢰도를 자체 점검하는 방식입니다. 불필요한 검색을 줄이고 응답 품질을 높이는 효과가 있습니다.

GraphRAG(Microsoft, 2024)는 문서에서 추출한 엔터티와 관계를 지식 그래프로 구축하고, 이를 검색에 활용하는 방식입니다. 여러 문서에 걸친 복잡한 추론 질문에서 기존 RAG 대비 우수한 성능을 보여주었습니다.

RAG는 LLM의 환각 문제를 해결하는 현실적인 해답이지만, 마법이 아닙니다. 청킹 전략, 임베딩 모델 선택, 검색 파이프라인 최적화, 프롬프트 설계가 모두 맞물려야 좋은 결과가 나옵니다. "쓰레기 문서를 넣으면 쓰레기 답변이 나온다"는 데이터 분석의 격언은 RAG에도 그대로 적용됩니다.
A

AlwaysCorp AI연구팀

AI·머신러닝 콘텐츠 전문

얼웨이즈 블로그에서 유용한 정보와 인사이트를 공유합니다.