카테고리 없음

Google FileSearch 기술로 RAG 구현 - Google Antigravity 활용

djai 2025. 12. 8. 10:22
반응형

Gemini API의 최신 'File Search' 기능을 백엔드로 사용하고, Google의 새로운 **Agentic IDE인 'Antigravity'**를 개발 환경으로 활용하여 RAG(검색 증강 생성) 시스템을 구현하고 싶으신 것으로 이해됩니다.

2025년 11월 공개된 Google Antigravity는 개발자가 에이전트와 협업하여 코드를 작성하는 새로운 플랫폼이며, File Search는 벡터 DB 없이도 RAG를 구현할 수 있게 해주는 완전 관리형 도구입니다. 이 두 가지를 결합한 구현 가이드를 정리해 드립니다.


1. 기술 개념 정의

 

Introducing the File Search Tool in Gemini API

File Search is a fully managed Retrieval Augmented Generation (RAG) system built directly into the Gemini API.

blog.google

 

  • Google File Search (Backend): Gemini API에 내장된 RAG 엔진입니다. 개발자가 문서를 업로드하면 구글이 자동으로 **청킹(Chunking), 임베딩(Embedding), 벡터 저장(Vector Storage)**을 모두 처리해 줍니다. 별도의 벡터 DB(Pinecone, Chroma 등)를 구축할 필요가 없는 것이 핵심입니다.
  • Google Antigravity (Frontend/Dev Tool): VS Code 기반의 새로운 AI 에이전트 IDE입니다. 단순히 코드를 추천하는 것을 넘어, "파일 검색 RAG 시스템을 만들어줘"라고 명령하면 프로젝트 구조 생성부터 코드 작성, 패키지 설치까지 에이전트가 수행합니다.

2. Antigravity를 활용한 구현 절차

Antigravity IDE를 실행하고 에이전트에게 지시하여 File Search RAG를 구축하는 과정입니다.

Step 1: Antigravity에서 프로젝트 생성

Antigravity를 실행하고 Command + I (또는 에이전트 채팅창)를 눌러 다음과 같이 자연어로 지시합니다.

"Python을 사용하여 Google Gemini API의 'File Search' 기능을 테스트하는 프로젝트를 만들어줘. 가상 환경을 설정하고 google-genai 라이브러리를 설치해 줘."

Antigravity 에이전트는 자동으로 폴더를 만들고 venv 설정 및 pip install google-genai 명령어를 터미널에서 실행할 것입니다.

Step 2: File Search 구현 코드 (에이전트가 작성할 코드)

Antigravity 에이전트에게 "PDF 파일을 업로드하고 내용을 질문할 수 있는 main.py를 작성해 줘"라고 요청하면, 에이전트는 아래와 유사한 최신 SDK(google-genai) 코드를 작성합니다.

Python
 
import os
import time
from google import genai

# API 키 설정 (Antigravity의 .env 파일 관리 기능을 활용하세요)
os.environ["GOOGLE_API_KEY"] = "YOUR_GEMINI_API_KEY"

client = genai.Client()

def run_file_search_rag(file_path, query):
    # 1. 파일 업로드 (MIME 타입 자동 감지)
    print(f"Uploading {file_path}...")
    file_upload = client.files.upload(path=file_path)

    # 파일 처리가 완료될 때까지 대기
    while file_upload.state.name == "PROCESSING":
        print("Processing file...")
        time.sleep(2)
        file_upload = client.files.get(name=file_upload.name)

    if file_upload.state.name == "FAILED":
        raise ValueError("File upload failed.")

    print(f"File ready: {file_upload.name}")

    # 2. File Search 도구 설정 (자동으로 임베딩 및 검색 인덱싱 생성)
    # 별도의 Vector DB 구축 없이, 업로드된 파일이 지식 베이스가 됨
    
    # 3. 모델 생성 및 질의 (RAG 수행)
    print("Generating answer...")
    response = client.models.generate_content(
        model="gemini-1.5-flash", # 또는 gemini-1.5-pro
        contents=query,
        tools=[{"google_search_retrieval": {"dynamic_retrieval_config": {"mode": "dynamic"}}}], # 웹 검색이 아닌 파일 검색 설정 필요
        # 실제 File Search용 설정은 아래와 같습니다:
        config={
            "tools": [{
                "file_search": {}  # 이 부분이 핵심입니다.
            }]
        }
    )
    
    # 문맥(Context)을 주입하기 위해 chat 세션을 사용하는 것이 일반적입니다.
    chat = client.chats.create(
        model="gemini-1.5-flash",
        config={
            "tools": [{"file_search": {}}]
        }
    )
    
    # 업로드한 파일을 현재 채팅 세션의 리소스로 연결하지 않고, 
    # 최신 SDK에서는 보통 'FileSearchStore'를 생성하여 관리합니다.
    
    return response.text

# --- 실제 최신 권장 패턴 (FileSearchStore 사용) ---
def create_store_and_chat(file_paths, user_query):
    # 1. 스토어 생성
    store = client.file_search_stores.create(config={"display_name": "My RAG Store"})
    
    # 2. 파일 업로드 및 스토어에 추가
    for path in file_paths:
        client.files.upload(path=path, config={"file_search_store": store})
        
    # 처리 대기 로직 생략 (실전에서는 필요)
    
    # 3. 모델에 스토어 연결하여 질문
    response = client.models.generate_content(
        model="gemini-1.5-pro",
        contents=user_query,
        config={
            "tools": [{"file_search": {"file_search_store": store}}]
        }
    )
    
    # 인용(Citation) 정보 출력
    print(response.text)
    # print(response.candidates[0].grounding_metadata) # 근거 자료 위치 확인

Step 3: Antigravity의 'Run & Debug' 활용

Antigravity는 에이전트가 터미널 제어 권한을 가집니다.

  • 에러 수정: 만약 실행 중 "Quota exceeded"나 "File processing failed" 에러가 발생하면, 에러 로그를 복사할 필요 없이 에이전트에게 **"방금 난 에러 해결해 줘"**라고 하면 알아서 코드를 수정하거나 대기 로직(time.sleep)을 추가합니다.

3. 왜 이 조합(Antigravity + File Search)인가?

항목 기존 방식 (LangChain + Vector DB) Gemini File Search + Antigravity
복잡도 높음 (Chunking, Embedding, Vector DB 설정 필요) 낮음
비용 Vector DB 호스팅 비용 발생 API 비용 발생
개발 속도 환경 설정에 수 시간 소요 빠름
성능 튜닝에 따라 다름 최적화 되어 있음

4. 핵심 팁 (Pro Tips)

  1. FileSearchStore 활용: 파일을 매번 업로드하면 48시간 뒤에 삭제됩니다. 지속적인 서비스를 위해서는 코드 예시의 두 번째 패턴인 FileSearchStore를 사용하여 영구 저장소(무료)를 만들어야 합니다.
  2. Antigravity의 멀티 에이전트: Antigravity에서 "기획 에이전트"에게 전체 구조를 잡게 하고, "코딩 에이전트"에게 구현을 맡기면 더 복잡한 RAG 파이프라인(예: 전처리 과정 추가)도 쉽게 구축할 수 있습니다.
  3. 인용(Citations): File Search의 가장 큰 장점은 답변이 문서의 어느 부분에서 왔는지 링크를 제공한다는 점입니다. Antigravity에게 "답변 출력 시 인용 출처도 같이 포맷팅해서 출력해 줘"라고 요청해 보세요.

이 구현 방식은 인프라 관리 없이 가장 빠르게 고성능 RAG를 구축하는 방법입니다. Antigravity IDE를 통해 이 과정을 자동화해 보세요.

추가적으로 Gemini File Search의 개념을 시각적으로 잘 설명한 영상이 있어 공유드립니다.

Google Gemini File Search: 벡터 DB 없는 RAG 가이드

 

이 영상은 Google File Search Tool이 기존의 복잡한 RAG 구축 과정을 어떻게 단순화했는지와 실제 데이터 처리 흐름을 이해하는 데 유용합니다.

반응형