2026.02.11 (수)
RAG 란?
RAG와 firebase 연동하기
RAG (Retrieval-Augmented Generation, 검색 증강 생성) 는 LLM(거대 언어 모델)이 학습하지 않은 외부 데이터를 참조하여 답변의 정확성을 높이는 기술입니다. 기존 LLM의 한계인 할루시네이션(거짓 답변)을 줄이고, 최신 정보나 비공개 데이터(기업 내부 문서 등)를 활용하여 답변할 수 있게 해줍니다.
RAG는 크게 세 단계로 작동한다.
검색 (Retrieval): 사용자의 질문과 관련된 문서를 외부 데이터베이스(벡터 DB 등)에서 찾아낸다.
증강 (Augmentation): 찾아낸 관련 정보를 사용자의 원래 질문과 합쳐서 모델에게 전달할 '맥락(Context)'을 만든다.
생성 (Generation): 모델이 제공된 맥락을 바탕으로 최종 답변을 작성한다.
학습된 데이터에만 의존하는 기존 LLM의 한계를 다음과 같이 보완한다.
환각(Hallucination) 방지: 모델이 모르는 것을 지어내지 않고, 제공된 근거 데이터를 기반으로 답변하게 유도한다
최신 정보 반영: 모델을 매번 새로 학습(Fine-tuning)시키지 않아도, 외부 데이터베이스만 업데이트하면 실시간 정보나 최신 뉴스를 답변에 반영할 수 있다
보안 및 전문성: 기업 내부 문서나 특정 분야의 전문 데이터를 연동하여 보안을 유지하면서도 고도로 전문적인 답변을 생성할 수 있다
RAG의 핵심은 "질문에 맞는 데이터를 찾아(Search), 질문과 함께 AI에게 전달(Prompt)"하는 것
일반적인 텍스트 검색과 달리, AI는 단어의 의미를 수치화한 '벡터(Vector)'를 비교해 검색합니다.
1) Firebase 확장 프로그램 설치: Firebase Console에서 "Vector Search with Firestore" 확장을 설치합니다.
2) 데이터 임베딩(Embedding): PDF나 텍스트 문서를 작은 조각(Chunk)으로 나눈 뒤, Google의 text-embedding-004 모델 등을 사용해 벡터 데이터로 변환하여 Firestore에 저장합니다.
이 확장을 쓰면 특정 컬렉션에 문서를 넣을 때 자동으로 벡터 값을 생성해 줍니다.
Flutter 프로젝트에 필요한 패키지들을 추가하기
dependencies:
firebase_core: ^3.0.0
cloud_firestore: ^5.0.0
firebase_vertex_ai: ^1.0.0 # Firebase용 Gemini SDK
사용자가 질문을 던지면, 그 질문 역시 벡터로 변환하여 Firestore에서 가장 유사한 문서를 찾아오기
// 예시: 유사한 문서 3개 가져오기
final querySnapshot = await FirebaseFirestore.instance
.collection('knowledge_base')
.findNearest(
vectorField: 'embedding',
queryVector: userQueryVector, // 사용자 질문의 벡터값
distanceMeasure: DistanceMeasure.cosine,
limit: 3,
)
.get();
final model = FirebaseVertexAI.instance.generativeModel(model: 'gemini-1.5-flash');
// 검색된 데이터를 맥락(Context)으로 결합
String context = querySnapshot.docs.map((doc) => doc['text']).join('\n');
String fullPrompt = "다음 정보를 바탕으로 답변해줘:\n$context\n\n질문: ${userController.text}";
final response = await model.generateContent([Content.text(fullPrompt)]);
print(response.text); // 증강된 답변 출력