챗GPT API와 RAG 패턴으로 우리 회사 문서를 학습한 챗봇
안녕하세요! 데이터와 AI 기술에 관심 있는 여러분을 위해 오늘은 정말 흥미로운 주제를 가져왔습니다. 바로 우리 회사 내부 문서를 똑똑하게 학습해서 질문에 척척 답변하는 AI 챗봇을 만드는 방법인데요. 'ChatGPT는 이미 똑똑한데, 굳이 우리 회사 문서를 학습시켜야 할까?'라고 생각하실 수도 있습니다. 하지만 ChatGPT와 같은 대규모 언어 모델(LLM)은 가장 최신의 정보나 회사 내부의 중요한 정보는 알지 못한다는 치명적인 단점이 있습니다.(GPT-5의 기준 knowledge cutoff는 2024년 9월 30일입니다.)
이 문제를 해결하기 위해 최근 가장 주목받는 기술이 바로 RAG(Retrieval-Augmented Generation), 즉 '검색 증강 생성' 패턴입니다. RAG는 LLM이 답변을 생성할 때, 우리에게 필요한 외부 지식(예: 회사 내부 문서)을 실시간으로 검색해서 그 내용을 참고하여 더 정확하고 신뢰도 높은 답변을 만들도록 돕는 기술입니다.
이번 블로그 포스팅에서는 RAG 패턴의 기본 개념부터 실제 챗봇을 구축하는 과정까지, 초보자도 쉽게 따라 할 수 있도록 차근차근 설명해 드리겠습니다.
RAG, 왜 필요하고 어떻게 작동하나요?
LLM은 방대한 양의 텍스트 데이터로 학습하여 놀라운 언어 능력을 보여주지만, 몇 가지 명확한 한계를 가집니다.
최신성 부족: 학습된 시점 이후의 정보는 알지 못합니다.
환각(Hallucination): 그럴듯하지만 사실이 아닌 정보를 만들어내는 경우가 있습니다.
전문성 부재: 특정 도메인(예: 법률, 의료, 우리 회사 내부 규정)에 대한 깊이 있는 지식이 부족합니다.
RAG는 바로 이 지점에서 LLM의 부족한 부분을 채워주는 강력한 해결사 역할을 합니다. 사용자의 질문이 들어오면, LLM이 바로 답변을 생성하는 것이 아니라 먼저 관련된 정보를 외부 데이터베이스에서 검색합니다. 그리고 검색된 정보와 원래 질문을 함께 LLM에게 전달하여, 이 내용을 바탕으로 답변을 생성하게 하는 것이죠. 덕분에 답변의 정확도와 신뢰도가 비약적으로 향상되고, LLM이 어떤 문서를 참고했는지 출처를 함께 제시할 수 있어 사용자가 직접 사실을 확인할 수도 있습니다.
RAG 시스템은 크게 세 단계로 작동합니다.
검색 (Retrieval): 사용자의 질문과 의미적으로 가장 유사한 문서를 데이터베이스에서 찾습니다. 이때 문장의 의미를 벡터(숫자의 배열)로 변환하여 유사도를 계산하는
벡터 검색 기술이 핵심적으로 사용됩니다.
증강 (Augmented): 검색된 여러 문서 중에서 불필요한 정보는 제거하고, 핵심 내용을 요약하거나 순서를 재배치하여 LLM이 가장 잘 이해할 수 있는 형태로 정보를 가공합니다.
생성 (Generation): 가공된 정보와 원래 질문을 바탕으로 LLM이 최종 답변을 생성합니다.
실전! RAG 기반 AI 챗봇 구축 프로세스
자, 이제 개념을 알았으니 직접 RAG 챗봇을 만드는 과정을 단계별로 살펴볼까요? 전체 프로세스는 다음과 같습니다.
1단계: 데이터 수집 및 전처리
먼저 챗봇이 학습할 우리 회사 문서들을 준비해야 합니다. PDF, 워드, 웹페이지 등 다양한 형태의 문서가 있겠죠. 이 문서들에서 순수한 텍스트만 추출하고, HTML 태그나 불필요한 특수문자를 제거하는 전처리 과정을 거칩니다. 그리고 너무 긴 문서는 LLM이 처리하기 좋게 적절한 크기의 단락이나 문장으로 쪼개는 작업도 필요합니다.
2단계: 임베딩 및 벡터 DB 구축
전처리된 텍스트 데이터를 LLM이 이해할 수 있는 벡터(Vector)로 변환해야 합니다. 이 과정을 임베딩(Embedding)이라고 부릅니다. OpenAI의 text-embedding-3나 허깅페이스(Hugging Face)에 공개된 SBERT 같은 임베딩 모델을 사용해 텍스트를 고차원의 숫자 벡터로 만듭니다.
이렇게 생성된 벡터들은 벡터 데이터베이스(Vector DB)에 저장하여 빠르고 효율적으로 검색할 수 있도록 합니다. FAISS, Weaviate, Elasticsearch 등 다양한 벡터 DB가 있으며, 각 도구의 장단점을 고려하여 우리 시스템에 맞는 것을 선택해야 합니다.
FAISS: Meta에서 개발한 라이브러리로, 대규모 벡터 데이터를 매우 빠르게 검색하는 데 최적화되어 있습니다.
Weaviate: LLM 시스템과의 통합이 쉽고, 클라우드 환경에서 운영하기 편리하게 설계된 벡터 DB입니다.
OpenSearch: AWS에서 관리되는 오픈소스 분기 프로젝트이므로, 클라우드 친화적이다.
3단계: 검색 모듈 구현
사용자 질문이 들어오면, 이 질문 역시 임베딩 모델을 통해 벡터로 변환합니다. 그리고 이 '질문 벡터'와 벡터 DB에 저장된 '문서 벡터'들 간의 의미적 유사도를 계산하여 가장 관련성 높은 문서를 찾아냅니다.
단순히 키워드가 일치하는 문서를 찾는 키워드 검색과 의미가 비슷한 문서를 찾는 벡터 검색을 함께 사용하는 하이브리드 검색 전략을 사용하면 검색 정확도를 더욱 높일 수 있습니다.
4단계: 프롬프트 구성 및 LLM 호출
이제 검색된 문서의 내용을 바탕으로 LLM에게 전달할 프롬프트(Prompt)를 구성합니다. 프롬프트는 LLM이 최적의 답변을 생성하도록 이끄는 '지시문'과 같습니다.
예를 들어, 다음과 같은 형태로 프롬프트를 설계할 수 있습니다.
"당신은 우리 회사 규정을 친절하게 설명해 주는 AI 비서입니다. 다음 '문서 내용'을 참고하여 사용자의 '질문'에 답변해 주세요. 만약 문서 내용으로 답변할 수 없다면, '정보를 찾을 수 없습니다'라고 솔직하게 말해주세요."
[문서 내용]
(2단계에서 검색된 문서의 텍스트가 여기에 들어갑니다)
[질문]
(사용자가 입력한 실제 질문이 여기에 들어갑니다)
이렇게 구성된 프롬프트를 ChatGPT API나 Claude, LLaMA 같은 LLM에 전달하여 최종 답변을 생성하게 합니다. 어떤 LLM을 선택할지에 따라 성능, 비용, 라이선스 조건이 모두 다르므로 신중한 선택이 필요합니다.
5단계: 시스템 평가 및 개선
챗봇을 만들었다고 끝이 아닙니다. 챗봇의 성능을 지속적으로 평가하고 개선해야 합니다. RAG 시스템의 평가는 크게 검색(Retrieval) 품질과 생성(Generation) 품질로 나누어 진행합니다.
검색 품질 평가: 사용자의 질문에 얼마나 관련성 높은 문서를 잘 찾아내는지를 평가합니다. 주로 검색 결과 상위 K개에 정답이 포함될 확률(Recall@K), 정답이 검색 결과 상위에 얼마나 위치하는지(MRR), 검색 순위의 정확성(NDCG) 등과 같은 표준 지표를 사용해 정량적으로 측정합니다.
생성 품질 평가: 검색된 문서를 바탕으로 생성한 답변이 얼마나 정확하고 신뢰할 수 있는지를 평가하는 것이 핵심입니다. 특히 생성된 답변이 원본 문서의 내용과 모순되지 않고 사실에 기반했는지, 즉 사실 일관성(Factual Consistency)과 정합성(Faithfulness)을 확인하는 것이 매우 중요합니다. 이를 위해 최근에는 GPT-4와 같은 고성능 LLM을 평가자로 활용하는 자동화된 평가 방식(LLM-as-a-Judge)을 도입하거나 ,
사용자 피드백 루프, 인간 평가, A/B 테스트 등을 병행하여 실제 환경에서의 답변 품질을 종합적으로 검증합니다.
사용자 피드백을 수집하여 검색 랭킹을 조정하거나, 프롬프트를 개선하는 등 지속적인 튜닝을 통해 챗봇의 성능을 완성해 나가야 합니다.
비용 절감, 어떻게 할 수 있을까요?
LLM API는 사용하는 만큼 비용이 발생하기 때문에, 상용 서비스를 생각한다면 비용 최적화는 매우 중요합니다. 몇 가지 효과적인 전략을 소개해 드립니다.
프롬프트 최적화: "JSON 형식으로만 답해줘" 와 같이 응답 형식을 명확히 지정하여 불필요한 토큰 생성을 줄일 수 있습니다.
캐싱(Caching): 동일한 질문이 반복적으로 들어올 경우, 매번 LLM을 호출하지 않고 이전에 생성된 답변을 저장해 두었다가 재사용합니다.
다중 모델 조합: 간단한 질문은 가볍고 저렴한 모델(예: Mistral Small)로 처리하고, 복잡한 질문에만 고성능 모델(예: GPT-4o)을 사용하는 모델 라우팅 전략을 사용합니다.
맺음말
지금까지 RAG 패턴을 활용하여 우리 회사만의 맞춤형 AI 챗봇을 만드는 방법을 알아보았습니다. RAG는 LLM의 한계를 보완하고, 신뢰할 수 있는 정보를 바탕으로 정확한 답변을 제공하는 강력하고 실용적인 방법입니다.
오늘 소개해 드린 내용은 RAG의 기본적인 구축 과정입니다. 실제 상용 서비스를 개발하기 위해서는 어떤 임베딩 모델을 선택해야 우리 데이터에 가장 적합할지, 수많은 문서들을 어떻게 효율적으로 벡터 DB에 저장하고 최적화할지, API 호출 비용과 인프라 운영 비용을 어떻게 최소화할지 등 훨씬 더 깊이 있는 고민이 필요합니다.
이러한 심화 기술과 상용 서비스를 위한 아키텍처 설계 전략에 대해 더 자세히 알고 싶으시다면, 이 글의 바탕이 된 책에서 더욱 상세한 내용을 확인해 보시는 것을 추천합니다. 여러분도 RAG를 통해 업무 효율을 획기적으로 높이는 AI 동료를 만들어보세요!
이 책은 데이터 사이언스의 기초 이론을 시작으로 데이터 엔지니어링, 모델 운영, 시스템 아키텍처 설계, 운영 전략에 이르는 흐름을 폭넓게 다룹니다. 로그 설계, 마이크로서비스 전환, 성능 최적화, 보안, 비용 관리 등 실무에서 자주 접하는 주제를 포함하여, 다양한 직무의 실무자가 참고할 수 있는 아키텍처 중심의 실전 해법을 제시합니다.