본문 바로가기

Etc/Study

RAG (Retrieval-Augmented Generation)

반응형

🔍 RAG (Retrieval-Augmented Generation)란?

**RAG (Retrieval-Augmented Generation)**은 검색 기반 생성 기법으로, **대규모 언어 모델(LLM)**이 외부 데이터베이스에서 정보를 검색한 후, 해당 정보를 바탕으로 응답을 생성하는 방식입니다.
즉, 단순한 **문장 생성(Text Generation)**이 아니라, **검색(Retrieval)**을 통해 실시간 정보를 활용하여 더욱 정확하고 신뢰할 수 있는 응답을 제공합니다.


🔹 왜 RAG가 중요한가?

일반적인 LLM (예: GPT-4, Claude, Gemini)은 사전에 학습된 데이터를 기반으로 응답을 생성하지만, 최신 정보나 학습 데이터에 없는 내용은 잘못된 정보를 제공할 가능성이 있습니다.

📌 RAG는 이런 문제를 해결하기 위해 두 가지 핵심 단계를 추가합니다.

  1. 검색 (Retrieval) : 외부 데이터베이스 (예: Milvus, FAISS, Pinecone 등)에서 관련 정보를 검색
  2. 생성 (Generation) : 검색된 정보를 활용하여 LLM이 응답을 생성

이 방식 덕분에 LLM이 최신 정보에 접근 가능하며, 보다 정확한 답변을 제공할 수 있습니다.


🔹 RAG의 동작 방식

  1. 질문 입력
    사용자가 질문을 입력하면, 해당 질문을 벡터로 변환합니다. (Embedding 생성)
  2. 검색 (Retrieval Step)
    • 생성된 벡터를 기반으로 벡터 DB (예: Milvus, FAISS, Pinecone)에서 유사한 문서를 검색합니다.
    • 예를 들어, GPT 모델이 2025년 데이터를 학습하지 않았더라도, 최신 문서를 검색하여 반영할 수 있습니다.
  3. 생성 (Generation Step)
    • 검색된 문서 내용을 기반으로 LLM이 답변을 생성합니다.
    • 기존의 LLM보다 근거 기반(Fact-Based) 답변을 제공할 가능성이 높아집니다.

🔹 Milvus로 RAG를 구축한다는 의미?

Milvus는 오픈소스 벡터 데이터베이스로, 고속 벡터 검색을 지원합니다.
즉, Milvus를 활용한 RAG 시스템을 구축한다는 것은 LLM이 질문을 받을 때 Milvus에서 관련 문서를 검색한 후, 이를 기반으로 답변을 생성하는 시스템을 만든다는 의미입니다.

구체적인 과정

  1. 문서를 벡터로 변환 (Embedding)
  2. Milvus에 저장
  3. 사용자가 질문하면 Milvus에서 유사한 정보를 검색
  4. 검색된 데이터를 LLM에 제공하여 답변 생성

🔹 RAG의 장점

최신 정보 반영 : 모델이 학습되지 않은 데이터도 실시간 검색을 통해 답변 가능
보다 정확한 응답 : 단순한 확률적 텍스트 생성이 아니라 검색된 문서를 기반으로 응답
저장공간 절약 : 전체 데이터를 모델에 포함하는 대신, 필요한 정보만 검색하여 활용
도메인 특화 가능 : 특정 산업(예: 법률, 의료, 금융)의 데이터를 벡터 DB에 저장하여 전문적인 답변 가능


🔹 Milvus 기반 RAG 구축 예시

from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType

# Milvus에 연결
connections.connect("default", host="localhost", port="19530")

# 컬렉션 생성 (문서 ID, 벡터 포함)
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768)  # 768차원 벡터
]
schema = CollectionSchema(fields)
collection = Collection("documents", schema)

# 검색 (Retrieval)
query_vector = [0.1, 0.2, ..., 0.9]  # 질문을 벡터로 변환한 값
results = collection.search(query_vector, "embedding", top_k=5)

# 검색된 문서 기반으로 LLM 응답 생성
retrieved_docs = [result.entity for result in results]

 


🔹 결론

  • **RAG (Retrieval-Augmented Generation)**은 LLM이 검색 기반으로 정확한 응답을 생성하는 방식
  • Milvus는 벡터 검색을 위한 데이터베이스로, 빠른 검색과 RAG 최적화를 지원
  • Milvus 기반 RAG는 최신 정보 제공, 정밀한 응답 생성, 도메인 특화 LLM 구축 등에 유용

즉, Milvus를 사용한 RAG 시스템 구축LLM이 검색 기능을 활용하여 최신 정보를 반영하는 지능형 Q&A 시스템을 만드는 것과 같습니다. 😊

반응형

'Etc > Study' 카테고리의 다른 글

자료구조 [Queue, Stack, Heap]  (0) 2025.03.27
Thread & Task  (0) 2025.03.27
Semaphore  (0) 2025.03.27
thread & event loop & task  (0) 2025.03.04