구글의 새로운 EmbeddingGemma 모델을 활용하면 인터넷 연결 없이도 개인 문서를 안전하게 검색하고 질의응답할 수 있는 로컬 AI 시스템을 쉽게 구축할 수 있습니다.
데이터 프라이버시가 중요해지면서 AI 시스템도 변화하고 있습니다. 민감한 문서를 외부 서버로 보내지 않고도 똑똑한 AI 검색 기능을 사용할 수 있다면 어떨까요? 구글이 최근 공개한 EmbeddingGemma 모델이 바로 이런 요구를 해결해줍니다.

이 글은 The Unwind AI의 튜토리얼을 바탕으로 EmbeddingGemma와 Llama 3.2를 활용한 완전 로컬 RAG 시스템 구축 방법을 소개합니다.
EmbeddingGemma가 특별한 이유
작지만 강력한 성능
EmbeddingGemma는 308M 파라미터의 작은 모델이지만 놀라운 성능을 보여줍니다. MTEB(Massive Text Embedding Benchmark)에서 500M 파라미터 이하 다국어 임베딩 모델 중 1위를 차지했습니다.
핵심 특징:
- 경량화: 양자화 시 200MB 미만 RAM 사용
- 다국어 지원: 100개 이상 언어 처리
- 유연한 차원: 768차원부터 128차원까지 조절 가능
- 빠른 처리: EdgeTPU에서 15ms 이내 임베딩 생성
프라이버시 중심 설계
기존 AI 서비스들과 달리 EmbeddingGemma는 완전히 오프라인에서 동작합니다. 문서를 외부로 전송할 필요가 없어 민감한 정보를 안전하게 보호할 수 있습니다.
로컬 Agentic RAG 시스템 구축하기
시스템 구성 요소
우리가 만들 시스템은 세 가지 핵심 구성 요소로 이루어집니다:
- EmbeddingGemma: 문서와 질문을 벡터로 변환
- LanceDB: 벡터 데이터베이스로 로컬 저장
- Llama 3.2: 검색된 정보를 바탕으로 답변 생성
필요한 준비사항
시작하기 전에 다음이 필요합니다:
- Python 3.10 이상
- Ollama 설치
- 기본적인 Python 프로그래밍 지식
환경 설정
먼저 저장소를 복제하고 필요한 패키지를 설치합니다:
git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git
cd rag_tutorials/agentic_rag_embedding_gemma
pip install -r requirements.txt
Ollama에서 필요한 모델들을 다운로드합니다:
ollama pull embeddinggemma:latest
ollama pull llama3.2:latest
핵심 코드 구현
1. 기본 라이브러리 임포트
import streamlit as st
from agno.agent import Agent
from agno.embedder.ollama import OllamaEmbedder
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.models.ollama import Ollama
from agno.vectordb.lancedb import LanceDb, SearchType
2. 지식 베이스 설정
@st.cache_resource
def load_knowledge_base(urls):
knowledge_base = PDFUrlKnowledgeBase(
urls=urls,
vector_db=LanceDb(
table_name="recipes",
uri="tmp/lancedb",
search_type=SearchType.vector,
embedder=OllamaEmbedder(id="embeddinggemma:latest", dimensions=768),
),
)
knowledge_base.load()
return knowledge_base
이 코드는 EmbeddingGemma를 임베딩 모델로 사용하는 지식 베이스를 만듭니다. 768차원 벡터를 생성하여 문서의 의미를 정확하게 표현합니다.
3. Agentic RAG 에이전트 생성
agent = Agent(
model=Ollama(id="llama3.2:latest"),
knowledge=kb,
instructions=[
"Search the knowledge base for relevant information and base your answers on it.",
"Be clear, and generate well-structured answers.",
"Use clear headings, bullet points, or numbered lists where appropriate.",
],
search_knowledge=True,
show_tool_calls=False,
markdown=True,
)
에이전트는 질문을 받으면 자동으로 지식 베이스를 검색하고 관련 정보를 찾아 답변을 생성합니다.
시스템 동작 원리

1. 문서 처리 과정
PDF 문서를 URL로 추가하면 시스템이 다음과 같이 처리합니다:
- 문서 다운로드: URL에서 PDF를 가져와 텍스트 추출
- 청크 분할: 검색에 최적화된 크기로 문서를 나눔
- 임베딩 생성: EmbeddingGemma가 각 청크를 768차원 벡터로 변환
- 로컬 저장: LanceDB에 벡터와 원본 텍스트를 함께 저장
2. 질의응답 과정
사용자가 질문을 하면:
- 질문 임베딩: EmbeddingGemma가 질문을 벡터로 변환
- 유사도 검색: 저장된 문서 벡터와 비교하여 관련 정보 찾기
- 컨텍스트 생성: 관련도가 높은 문서 청크들을 선별
- 답변 생성: Llama 3.2가 컨텍스트를 바탕으로 답변 작성
3. Agentic 동작의 장점
일반적인 RAG와 달리 Agentic RAG는 더 지능적입니다:
- 자동 판단: 언제 지식 베이스를 검색할지 스스로 결정
- 다단계 추론: 복잡한 질문을 여러 단계로 나누어 처리
- 구조화된 답변: 상황에 맞는 형식으로 답변 구성
애플리케이션 실행하기
완성된 코드를 실행해봅시다:
streamlit run agentic_rag_embeddinggemma.py
브라우저에서 http://localhost:8501
로 접속하면 애플리케이션이 나타납니다. 사이드바에서 PDF URL을 추가하고 질문을 입력해보세요.

실제 활용 사례
기업 환경에서의 활용
- 내부 문서 검색: 회사 매뉴얼, 정책 문서, 기술 문서를 안전하게 검색
- 고객 지원: 민감한 고객 정보를 외부로 보내지 않고 FAQ 시스템 구축
- 연구 개발: 특허 문서나 연구 자료를 보안이 중요한 환경에서 분석
개인 용도
- 학습 노트: 개인 공부 자료나 논문을 체계적으로 정리하고 검색
- 문서 관리: 중요한 계약서, 의료 기록 등을 안전하게 보관하며 검색
- 창작 활동: 소설이나 시나리오 자료를 체계적으로 관리
성능 최적화 팁
메모리 사용량 줄이기
EmbeddingGemma의 Matryoshka 기능을 활용하면 벡터 차원을 줄여 메모리를 절약할 수 있습니다:
# 768차원 대신 256차원 사용
embedder=OllamaEmbedder(id="embeddinggemma:latest", dimensions=256)
검색 품질 향상
- 적절한 청크 크기: 너무 작으면 맥락을 잃고, 너무 크면 정확도가 떨어집니다
- 중복 제거: 비슷한 내용의 문서는 미리 정리해두세요
- 메타데이터 활용: 문서 제목, 날짜 등 추가 정보를 함께 저장하면 검색이 더 정확해집니다
확장 가능성
현재 시스템을 더욱 발전시킬 수 있는 방향들입니다:
다양한 문서 형식 지원: Word, 텍스트 파일, 웹페이지까지 처리 범위를 넓힐 수 있습니다.
고급 질의 기능: 비교, 요약, 다단계 추론 등 복잡한 질문 처리가 가능합니다.
대화 기억 기능: 이전 대화 내용을 기억하여 연속적인 질문에 답할 수 있습니다.
도메인 특화: 의료, 법률, 기술 분야 등 특정 영역에 최적화된 모델로 파인튜닝할 수 있습니다.
마무리
EmbeddingGemma를 활용한 로컬 RAG 시스템은 프라이버시와 성능을 모두 만족시키는 혁신적인 해결책입니다. 작은 크기에도 불구하고 뛰어난 성능을 보여주며, 완전히 오프라인에서 동작한다는 점이 가장 큰 장점입니다.
이제 여러분도 민감한 데이터를 외부로 보내지 않고도 똑똑한 AI 문서 검색 시스템을 만들 수 있습니다. 개인 프로젝트부터 기업 환경까지, 다양한 곳에서 활용해보세요.
참고자료:
Comments