52일차 자연어처리6 벡터데이터베이스(크로마, 파이스)

차지예·2025년 8월 3일

생성AI

목록 보기
46/56
post-thumbnail

벡터 데이터베이스(Chroma, FAISS)를 이용한 RAG 챗봇 이론 정리

✅ 1. RAG 챗봇이란?

RAG (Retrieval-Augmented Generation) 모델은 전통적인 생성형 챗봇(Generator)지식 검색기(Retriever)를 결합한 하이브리드 구조입니다.

📌 주요 구성 요소

Retriever: 벡터 데이터베이스에서 관련 문서를 검색

Generator: 검색된 문서를 바탕으로 답변 생성

📌 핵심 아이디어

필요한 정보를 생성 모델이 직접 "기억"하기보다는, 외부에서 찾아와 참조하며 생성하도록 설계됨

✅ 2. 전체 아키텍처 구조 (Step-by-step)

[사용자 질문]
     ↓
[문장 임베딩 (Embedding)]
     ↓
[벡터DB에서 유사 문서 검색 (FAISS / Chroma)]
     ↓
[검색된 문서 + 원 질문 → LLM 입력]
     ↓
[생성 모델(LLM)이 답변 생성]

✅ 3. 벡터 데이터베이스란?

사용자 질문과 문서들을 수치 벡터로 표현한 뒤, 벡터 간 유사도를 바탕으로 가장 관련 있는 문서를 검색하는 시스템입니다.

📌 대표적인 벡터DB 예시

이름특징
FAISSFacebook 개발, 빠르고 확장성 높음
ChromaLangChain 친화적, 메타데이터 지원

✅ 4. 문서 임베딩 과정 (Embedding)

문서 또는 질문을 수치 벡터로 변환합니다.

from langchain.embeddings import OpenAIEmbeddings
embedding = OpenAIEmbeddings()
문서벡터 공간 (e.g., 1536차원)\text{문서} \rightarrow \text{벡터 공간 (e.g., 1536차원)}

✅ 5. 벡터DB 구축 및 저장

🛠 Chroma 예시

from langchain.vectorstores import Chroma
vectordb = Chroma.from_documents(documents, embedding)

🛠 FAISS 예시

from langchain.vectorstores import FAISS
vectordb = FAISS.from_documents(documents, embedding)

✅ 6. 문서 검색 (Retriever)

사용자의 질문도 임베딩하여 벡터DB와 유사도 비교를 통해 관련 문서를 찾습니다.

retriever = vectordb.as_retriever()
related_docs = retriever.get_relevant_documents("사용자 질문")

코사인 유사도(Cosine Similarity)가 주로 사용됩니다.

✅ 7. 생성 모델 (LLM) 연결

🔗 예: OpenAI GPT 사용

from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(temperature=0.2)

✅ 8. QA 체인 (Retriever + Generator 연결)

from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)

✅ 9. 사용자 인터페이스 구성 (예: Gradio)

import gradio as gr

with gr.Blocks() as demo:
chatbot = gr.Chatbot()
msg = gr.Textbox()
msg.submit(lambda q: qa_chain.run(q), inputs=msg, outputs=chatbot)

0개의 댓글