구글 제미니
모델을 선택하고 Gemini API 키로 Milvus를 구성하여 Milvus에 Google Gemini 임베딩 모델을 사용하세요.
임베딩 모델 선택하기
밀버스는 구글 제미니에서 제공하는 임베딩 모델을 지원합니다. 아래는 현재 사용 가능한 Gemini 임베딩 모델을 빠르게 참조할 수 있습니다:
모델 이름 |
크기 |
최대 토큰 |
설명 |
|---|---|---|---|
제미니 임베딩-001 |
기본값: 3,072(권장: 768, 1,536 또는 3,072) |
8,192 |
유연한 치수를 가진 텍스트 임베딩 모델로, 마트료시카 표현 학습(MRL)을 사용하여 학습되었습니다. |
gemini-embedding-2 |
기본값: 3,072(권장: 768, 1,536 또는 3,072) |
8,192 |
통합된 임베딩 공간에서 텍스트, 이미지, 동영상, 오디오 및 문서를 지원하는 Google 최초의 네이티브 멀티모달 임베딩 모델입니다. |
두 모델 모두 dim 매개변수를 통해 유연한 출력 크기를 허용하는 마트로시카 표현 학습(MRL) 기법을 사용하여 학습됩니다. 768개 차원으로 시작하여 필요한 경우 1,536개 또는 3,072개까지 확장하는 것이 좋습니다. 자세한 내용은 Gemini 임베딩 모델을 참조하세요.
Gemini 임베딩 모델은 특정 사용 사례에 맞게 임베딩을 최적화하는 작업 유형 파라미터도 지원합니다. Milvus는 작업에 따라 작업 유형을 자동으로 설정합니다:
삽입/삽입:
RETRIEVAL_DOCUMENT검색:
RETRIEVAL_QUERY
task 파라미터를 명시적으로 지정하여 이를 재정의할 수 있습니다(예: SEMANTIC_SIMILARITY, CLASSIFICATION, CLUSTERING).
자격 증명 구성
Milvus는 임베딩을 요청하기 전에 사용자의 Gemini API 키를 알고 있어야 합니다. Milvus는 두 가지 방법으로 자격 증명을 구성할 수 있습니다:
구성 파일(권장): API 키를
milvus.yaml에 저장하여 재시작할 때마다 노드가 자동으로 가져옵니다.환경 변수: 배포 시점에 키를 주입하는 방법(Docker Compose에 이상적).
아래 두 가지 방법 중 하나를 선택하세요. 구성 파일은 베어메탈 및 가상 머신에서 유지 관리가 더 쉬운 반면, 환경 변수 경로는 컨테이너 워크플로우에 적합합니다.
동일한 공급자에 대한 API 키가 구성 파일과 환경 변수 모두에 있는 경우, Milvus는 항상 milvus.yaml 의 값을 사용하고 환경 변수는 무시합니다.
옵션 1: 구성 파일(권장 및 우선순위 높음)
API 키를 milvus.yaml; Milvus는 시작 시 이 키를 읽고 동일한 공급자에 대한 모든 환경 변수를 재정의합니다.
자격 증명 아래에 키를 선언하세요:
하나 또는 여러 개의 API 키를 나열할 수 있으며, 각 키에 나중에 참조할 레이블을 지정할 수 있습니다.
# milvus.yaml credential: apikey_dev: # dev environment apikey: <YOUR_DEV_KEY> apikey_prod: # production environment apikey: <YOUR_PROD_KEY>API 키를 여기에 넣으면 재시작 시에도 영구적으로 유지되며 레이블을 변경하는 것만으로 키를 전환할 수 있습니다.
Milvus에게 Gemini 호출에 사용할 키 알려주기
같은 파일에서 Gemini 공급자가 사용할 레이블을 가리키도록 지정하세요.
function: textEmbedding: providers: gemini: credential: apikey_dev # ← choose any label you defined above이렇게 하면 Milvus가 Gemini 임베딩 엔드포인트로 보내는 모든 요청에 특정 키가 바인딩됩니다.
옵션 2: 환경 변수
Docker Compose와 함께 Milvus를 실행하고 파일과 이미지에서 비밀을 유지하려는 경우 이 방법을 사용하세요.
Milvus는 milvus.yaml 에서 공급자에 대한 키를 찾을 수 없는 경우에만 환경 변수로 되돌아갑니다.
변수 |
필수 |
설명 |
|---|---|---|
MILVUS_GEMINI_API_KEY |
예 |
각 Milvus 컨테이너 내에서 Gemini 키를 사용할 수 있도록 설정합니다(milvus.yaml에 Gemini 키가 있는 경우 무시됨). |
docker-compose.yaml 파일에서 MILVUS_GEMINI_API_KEY 환경 변수를 설정합니다.
# docker-compose.yaml (standalone service section)
standalone:
# ... other configurations ...
environment:
# ... other environment variables ...
# Set the environment variable pointing to the Gemini API key inside the container
MILVUS_GEMINI_API_KEY: <YOUR_GEMINI_API_KEY>
environment: 블록은 Milvus 컨테이너에만 키를 주입하며 호스트 OS는 그대로 유지합니다. 자세한 내용은 Docker Compose로 Milvus 구성을 참조하세요.
1단계: 텍스트 임베딩 기능으로 컬렉션 만들기
스키마 필드 정의
임베딩 함수를 사용하려면 특정 스키마로 컬렉션을 만듭니다. 이 스키마에는 최소 3개의 필수 필드가 포함되어야 합니다:
컬렉션의 각 엔티티를 고유하게 식별하는 기본 필드.
임베드할 원시 데이터를 저장하는
VARCHAR필드.텍스트 임베딩 함수가
VARCHAR필드에 대해 생성할 고밀도 벡터 임베딩을 저장하기 위해 예약된 벡터 필드.
다음 예제에서는 텍스트 데이터를 저장하는 스칼라 필드( "document" ) 1개와 함수 모듈에서 생성할 임베딩을 저장하는 벡터 필드( "dense" ) 1개가 있는 스키마를 정의합니다. 선택한 임베딩 모델의 출력과 일치하도록 벡터 차원(dim)을 설정하는 것을 잊지 마세요.
from pymilvus import MilvusClient, DataType, Function, FunctionType
# Initialize Milvus client
client = MilvusClient(
uri="http://localhost:19530",
)
# Create a new schema for the collection
schema = client.create_schema()
# Add primary field "id"
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
# Add scalar field "document" for storing textual data
schema.add_field("document", DataType.VARCHAR, max_length=9000)
# Add vector field "dense" for storing embeddings.
# IMPORTANT: Set dim to match the exact output dimension of the embedding model.
# For instance, Gemini's gemini-embedding-001 model outputs 3072-dimensional vectors by default,
# but can be shortened to 768 or 1536 dimensions.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=768)
텍스트 임베딩 함수 정의하기
텍스트 임베딩 함수는 VARCHAR 필드에 저장된 원시 데이터를 임베딩으로 자동 변환하여 명시적으로 정의된 벡터 필드에 저장합니다.
아래 예시에서는 스칼라 필드 "document" 를 임베딩으로 변환하여 결과 벡터를 앞서 정의한 "dense" 벡터 필드에 저장하는 함수 모듈(gemini_embedding)을 추가합니다.
# Define embedding function (example: Gemini provider)
text_embedding_function = Function(
name="gemini_embedding", # Unique identifier for this embedding function
function_type=FunctionType.TEXTEMBEDDING, # Type of embedding function
input_field_names=["document"], # Scalar field to embed
output_field_names=["dense"], # Vector field to store embeddings
params={ # Provider-specific configuration (highest priority)
"provider": "gemini", # Embedding model provider
"model_name": "gemini-embedding-001", # Embedding model
# Optional parameters:
# "credential": "apikey_dev", # Optional: Credential label specified in milvus.yaml
# "dim": "768", # Optional: Output vector dimension (default 3072)
# "task": "RETRIEVAL_DOCUMENT", # Optional: Task type for embedding optimization
}
)
# Add the embedding function to your schema
schema.add_function(text_embedding_function)
작업 매개변수에 대해 지원되는 작업 유형:
RETRIEVAL_DOCUMENT- 문서 인덱싱을 위해 임베딩을 최적화합니다(삽입/삽입의 경우 기본값).RETRIEVAL_QUERY- 쿼리 검색을 위해 임베딩을 최적화합니다(검색의 경우 기본값).SEMANTIC_SIMILARITY- 텍스트 유사성 측정을 위해 임베딩을 최적화합니다.CLASSIFICATION- 텍스트 분류를 위해 임베딩을 최적화합니다.CLUSTERING- 클러스터링을 위해 임베딩을 최적화합니다.
명시적으로 설정하지 않으면 Milvus는 삽입/삽입 시 RETRIEVAL_DOCUMENT, 검색 시 RETRIEVAL_QUERY 을 자동으로 사용합니다.
색인 구성
필요한 필드와 내장 함수로 스키마를 정의한 후 컬렉션의 인덱스를 설정하세요. 이 과정을 간소화하기 위해 AUTOINDEX 을 index_type 으로 사용하면 Milvus가 데이터 구조에 따라 가장 적합한 인덱스 유형을 선택하고 구성할 수 있습니다.
# Prepare index parameters
index_params = client.prepare_index_params()
# Add AUTOINDEX to automatically select optimal indexing method
index_params.add_index(
field_name="dense",
index_type="AUTOINDEX",
metric_type="COSINE"
)
컬렉션 만들기
이제 정의한 스키마 및 인덱스 매개변수를 사용하여 컬렉션을 생성합니다.
# Create collection named "demo"
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)
2단계: 데이터 삽입
컬렉션과 인덱스를 설정했으면 이제 원시 데이터를 삽입할 준비가 되었습니다. 이 과정에서는 원시 텍스트만 제공하면 됩니다. 앞서 정의한 함수 모듈이 각 텍스트 항목에 해당하는 스파스 벡터를 자동으로 생성합니다.
# Insert sample documents
client.insert('demo', [
{'id': 1, 'document': 'Milvus simplifies semantic search through embeddings.'},
{'id': 2, 'document': 'Vector embeddings convert text into searchable numeric data.'},
{'id': 3, 'document': 'Semantic search helps users find relevant information quickly.'},
])
3단계: 텍스트로 검색
데이터를 입력한 후 원시 쿼리 텍스트를 사용하여 시맨틱 검색을 수행합니다. Milvus는 자동으로 쿼리를 임베딩 벡터로 변환하고 유사도에 따라 관련 문서를 검색한 후 가장 일치하는 결과를 반환합니다.
# Perform semantic search
results = client.search(
collection_name='demo',
data=['How does Milvus handle semantic search?'], # Use text query rather than query vector
anns_field='dense', # Use the vector field that stores embeddings
limit=1,
output_fields=['document'],
)
print(results)