Gemini File Search로 간편하게 RAG 구현하기

RAG(Retrieval-Augmented Generation) 를 구현하려면 벡터 DB를 구축하고, 임베딩 모델을 선택하고, 청킹 전략을 수립하는 등 복잡한 과정을 거쳐야 했습니다. 그런데 구글의 Gemini File Search를 사용하면 이러한 과정을 API 호출 몇 번으로 간단하게 처리할 수 있습니다.

RAG 구축의 어려움

기존에 RAG를 구축하려면 많은 작업이 필요했습니다:

  • 벡터 DB 설정 및 운영 (Pinecone, Weaviate 등)
  • 임베딩 파이프라인 구축 및 관리
  • 인덱스 최적화
  • 많은 시간과 비용

Gemini File Search는 이러한 복잡한 과정을 내부적으로 처리해줍니다. 파일을 업로드하면 자동으로 청크로 나누고, 벡터화하고, 인덱싱합니다. 덕분에 개발자는 인프라 구축보다는 비즈니스 로직 구현에 집중할 수 있습니다.

의미 기반 검색

File Search는 단순한 키워드 매칭이 아닌 의미 기반 검색을 제공합니다. 예를 들어 “재생 에너지 비용” 이라고 검색하면, 문서에 해당 단어가 직접 포함되어 있지 않더라도 “태양광 패널 가격 하락” 과 같이 의미상 유사한 내용을 찾아냅니다.

의미 기반 검색이 가능한 이유:

  • 모든 텍스트가 고차원 벡터 공간의 점으로 변환됨
  • 의미가 비슷한 텍스트는 벡터 공간에서 가까이 위치
  • 검색 시 쿼리와 가장 가까운 벡터를 찾아 관련 내용을 반환

간단한 사용 방법

실제 코드로 살펴보겠습니다:

from google import genai
from google.genai import types
import time

client = genai.Client()

# Store 만들고
file_search_store = client.file_search_stores.create(
    config={'display_name': 'my-knowledge-base'}
)

# 파일 던지고
operation = client.file_search_stores.upload_to_file_search_store(
    file='company_docs.pdf',
    file_search_store_name=file_search_store.name,
    config={'display_name': 'Q4-strategy'}
)

# 처리 대기
while not operation.done:
    time.sleep(5)
    operation = client.operations.get(operation)

# 질문하면 끝
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Q4 전략의 핵심은?",
    config=types.GenerateContentConfig(
        tools=[file_search=(
            file_search_store_names=[file_search_store.name]
        )]
    )
)

정말 간단합니다. 벡터 DB 설정, 임베딩 모델 학습, 복잡한 설정 파일이 모두 필요 없습니다.

메타데이터를 활용한 필터링

문서가 많을 때는 메타데이터를 활용하여 원하는 문서만 정확하게 검색할 수 있습니다:

# 파일에 태그 달기
op = client.file_search_stores.import_file(
    file_search_store_name=file_search_store.name,
    file_name=sample_file.name,
    custom_metadata=[
        {"key": "department", "string_value": "engineering"},
        {"key": "year", "numeric_value": 2024},
        {"key": "confidential", "string_value": "false"}
    ]
)

# 정확히 필터링해서 검색
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="2024년 엔지니어링팀 성과는?",
    config=types.GenerateContentConfig(
        tools=[types.Tool(
            file_search=types.FileSearch(
                file_search_store_names=[file_search_store.name],
                metadata_filter="department=engineering AND year=2024"
            )
        )]
    )
)

인용 정보 제공

File Search는 답변과 함께 출처 정보를 제공합니다. 어느 문서의 어느 부분에서 정보를 가져왔는지 정확히 확인할 수 있습니다.

print(response.candidates[0].grounding_metadata)

기업 환경에서는 AI 답변의 신뢰성이 매우 중요합니다. 단순히 “AI가 이렇게 답했다”가 아니라, 구체적인 출처를 제시할 수 있어야 합니다.

청킹 전략 커스터마이징

기본 설정이 맞지 않는다면 청킹 전략을 직접 설정할 수도 있습니다:

operation = client.file_search_stores.upload_to_file_search_store(
    file='technical_doc.pdf',
    file_search_store_name=file_search_store.name,
    config={
        'chunking_config': {
            'white_space_config': {
                'max_tokens_per_chunk': 200,  # 청크 크기
                'max_overlap_tokens': 20       # 중복 토큰
            }
        }
    }
)

문서의 특성에 따라 청크 크기를 조절할 수 있습니다:

  • 기술 문서: 작은 청크로 설정
  • 긴 글/스토리: 큰 청크로 설정

합리적인 가격 정책

비용 구조:

  • 인덱싱 비용: 100만 토큰당 $0.15
  • 저장 비용: 무료
  • 검색 시 임베딩 비용: 무료

벡터 DB 인스턴스를 24시간 운영할 필요가 없어 고정 비용 부담이 없습니다. 트래픽이 없으면 비용도 발생하지 않는 완전한 서버리스 모델입니다.

저장 용량:

티어 용량
무료 티어 1GB
Tier 1 10GB
Tier 2 100GB
Tier 3 1TB

알아두어야 할 제약사항

물론 제약사항도 있습니다:

  • 파일당 최대 100MB
  • 각 Store는 20GB 미만 권장

대규모 엔터프라이즈라면?

File Search는 “파일 기반 대화형 검색” 에 최적화되어 있습니다. 다음과 같은 경우에는 Vertex AI Search를 고려하는 것이 좋습니다:

  • 전사적 지식 검색 시스템 구축
  • 세밀한 권한 제어가 필요한 경우
  • 대용량 데이터 처리가 필요한 경우

Store 관리 방법

# 새 Store 만들기
store = client.file_search_stores.create(
    config={'display_name': 'customer-support-kb'}
)

# 전체 목록 보기
for s in client.file_search_stores.list():
    print(s)

# 필요없으면 삭제
client.file_search_stores.delete(
    name='fileSearchStores/old-store',
    config={'force': True}
)

여러 개의 Store를 만들어 부서별, 프로젝트별로 지식을 분리하여 관리할 수 있습니다.

마치며

Gemini File Search를 사용하면 RAG 시스템을 훨씬 쉽게 구축할 수 있습니다. 예전에는 대기업이나 큰 리소스를 가진 팀에서만 가능했던 일이지만, 이제는 스타트업이나 개인 개발자도 고성능 지식 검색 시스템을 만들 수 있게 되었습니다.

주요 장점 정리:

  • ✅ 벡터 DB 운영 불필요
  • ✅ 복잡한 설정 제거
  • ✅ 서버리스 비용 구조
  • ✅ 의미 기반 검색
  • ✅ 영구 저장소 제공
  • ✅ 인용 정보 제공

벡터 DB를 직접 운영하고 관리하는 데 시간을 쓰기보다는, 인프라는 구글에 맡기고 실제로 사용자에게 필요한 기능을 개발하는 데 집중할 수 있다는 점이 큰 장점이라고 생각합니다.

RAG 시스템 구축을 고려하고 계신다면 Gemini File Search를 한번 사용해보시는 것을 추천드립니다.

피드백은 언제나 환영입니다. 😊