gemini-embedding-2는 텍스트·이미지·비디오·오디오·PDF를 단일 임베딩 공간에 매핑하는 첫 번째 Gemini API 임베딩 모델이다. 이 튜토리얼에서는 에이전트 RAG, 시각 검색, 검색 재랭킹, 클러스터링·분류 시스템을 구축하는 방법을 단계별로 익힌다.
전제 조건
google-genaiPython 패키지 설치- Gemini API 키 설정
- 기본적인 벡터 검색 개념 이해
pip install google-genai numpy1. 멀티모달 입력 임베딩
단일 호출에서 텍스트와 이미지를 함께 임베딩하는 인터리브드(interleaved) 입력을 지원한다.
from google import genai
from google.genai import types
client = genai.Client()
with open('product.png', 'rb') as f:
image_bytes = f.read()
result = client.models.embed_content(
model='gemini-embedding-2',
contents=[
"A product photo",
types.Part.from_bytes(data=image_bytes, mime_type='image/png'),
]
)
print(result.embeddings)단일 호출로 복합 입력을 하나의 집약된 벡터로 표현한다. 모달리티별 임베딩이 필요하면 Batch API를 사용한다.
2. 에이전트 RAG – 태스크 프리픽스로 정확도 높이기
에이전트가 멀티스텝 추론 작업(코드베이스 스캔, 여러 PDF 교차 참조 등)을 수행할 때 태스크 프리픽스(task prefix)를 사용하면 임베딩 품질이 향상된다.
def prepare_query(content: str, task: str = "question answering") -> str:
"""에이전트 태스크에 맞는 쿼리 프리픽스 생성"""
return f"task: {task} | query: {content}"
# 지원 태스크: question answering, fact checking, code retrieval, search result
def prepare_document(content: str, title: str = "none") -> str:
"""비대칭 검색을 위한 문서 프리픽스 생성"""
return f"title: {title} | text: {content}"인덱스 생성 시와 쿼리 시 모두 동일한 프리픽스를 적용해야 한다.
실제 효과: Harvey(법률 AI 플랫폼)는 Recall@20 정확도를 3% 향상했고, Supermemory는 Recall@1 정확도를 40% 향상했다.
3. 멀티모달 시각 검색
이미지 기반 검색에는 search result 태스크 프리픽스를 사용한다.
def prepare_visual_search_query(content) -> str:
return f"task: search result | query: {content}"Nuuly(의류 렌탈)는 창고 현장에서 찍은 사진으로 카탈로그 미태그 제품을 식별하는 시스템에 Gemini Embedding 2를 적용해 Match@20 정확도를 60% → 87%로, 전체 제품 식별 성공률을 74% → 90% 이상으로 높였다.
4. 검색 재랭킹
초기 검색 결과를 임베딩 기반 유사도로 재정렬해 최적의 답변을 선별한다.
import numpy as np
def dot_product(a: np.ndarray, b: np.ndarray):
return (np.array(a) @ np.array(b).T)
# 검색 결과 임베딩 생성
def get_embeddings(texts: list[str]):
results = []
for text in texts:
r = client.models.embed_content(model='gemini-embedding-2', contents=text)
results.append(r.embeddings[0].values)
return np.array(results)
summaries = ["결과1 요약", "결과2 요약", "결과3 요약"]
query = "사용자 쿼리"
search_res = get_embeddings(summaries)
embedded_query = get_embeddings([query])
# 유사도 계산 및 최적 결과 선택
sim_value = dot_product(search_res, embedded_query)
best_match_index = np.argmax(sim_value)LLM으로 가설 답변을 먼저 생성하고, 그 임베딩을 검색 결과와 비교해 가장 근접한 결과를 선택하면 재랭킹 품질이 더 높아진다.
5. 클러스터링·분류·이상 탐지
대칭 태스크(쿼리와 문서에 동일한 프리픽스 적용)는 클러스터링, 감성 분석, 이상 탐지에 활용한다.
def prepare_symmetric(content: str, task: str) -> str:
# task: clustering | sentence similarity | classification
return f"task: {task} | query: {content}"비대칭 태스크(질문-답변 검색)와 달리 쿼리와 문서에 동일한 프리픽스를 사용해야 한다.
6. 효율적인 임베딩 저장
Gemini Embedding 2는 MRL(Matryoshka Representation Learning)로 학습되어 기본 3072차원 벡터를 더 작은 크기로 잘라내도 높은 정확도를 유지한다.
result = client.models.embed_content(
model="gemini-embedding-2",
contents="What is the meaning of life?",
config={"output_dimensionality": 768} # 권장: 1536 또는 768
)차원 축소 효과:
- 스토리지 비용 감소: 3072 → 768차원 시 4배 압축
- Batch API 적용 시: 기본 가격의 50%로 고처리량 임베딩 생성 가능
지원 벡터 DB: Pinecone, Weaviate, Qdrant, ChromaDB, Google Agent Platform Vector Search
활용 사례 정리
| 사용 사례 | 태스크 프리픽스 | 유형 |
|---|---|---|
| 에이전트 RAG (Q&A) | question answering | 비대칭 |
| 팩트 체킹 | fact checking | 비대칭 |
| 코드 검색 | code retrieval | 비대칭 |
| 시각 검색 | search result | 비대칭 |
| 클러스터링 | clustering | 대칭 |
| 유사도 분석 | sentence similarity | 대칭 |
| 텍스트 분류 | classification | 대칭 |
참고 자료
- Building with Gemini Embedding 2: Agentic multimodal RAG and beyond — Google Developers Blog (2026-04-30)
- Gemini Embedding 2 공식 문서 — Google AI
- Search reranking 노트북 — Google Gemini Cookbook