본문 바로가기
WIKI 기술 지식 베이스

Bedrock

원문 보기 위키 갱신

Milvus 2.6.x와 호환돼요.

이 문서에서는 Milvus에서 Amazon Bedrock 임베딩 함수를 구성하고 사용하는 방법을 설명해요.

출처: Milvus 문서

본문

임베딩 모델 선택 (Choose an embedding model)

Milvus는 Amazon Bedrock이 제공하는 임베딩 모델을 지원해요. 현재 사용 가능한 임베딩 모델은 다음과 같아요.

모델 이름 차원 최대 토큰 설명
amazon.titan-embed-text-v2:0 1,024 (기본값), 512, 256 8,192 RAG, 문서 검색, reranking, 분류 등

자세한 내용은 Amazon Titan Text Embeddings models를 참고하세요.

자격 증명 구성 (Configure credentials)

Milvus는 임베딩을 요청하기 전에 Bedrock 접근 자격 증명을 알고 있어야 해요. Milvus는 자격 증명을 구성하는 두 가지 방법을 제공해요.

  • 설정 파일 (권장): milvus.yaml에 자격 증명을 저장하면 매번 재시작하고 모든 노드가 자동으로 가져와요.
  • 환경 변수: 배포 시점에 자격 증명을 주입해요. Docker Compose에 이상적이에요.

아래 두 가지 방법 중 하나를 선택하세요. 설정 파일은 베어메탈과 VM에서 관리하기 쉽고, 환경 변수 방식은 컨테이너 워크플로우에 잘 맞아요.

같은 제공자에 대한 자격 증명이 설정 파일과 환경 변수 양쪽에 있다면 Milvus는 항상 milvus.yaml의 값을 사용하고 환경 변수는 무시해요.

옵션 1: 설정 파일 (권장 & 우선순위 높음)

자격 증명을 milvus.yaml에 넣어 두세요. Milvus는 시작 시 읽고, 같은 제공자에 대한 환경 변수를 덮어써요.

credential: 아래에 자격 증명을 선언해요.

하나 또는 여러 자격 증명을 나열할 수 있어요. 각각 나중에 참조할 라벨을 지어 주세요.

# milvus.yaml
credential:
  aksk_dev:            # dev environment
    access_key_id: <YOUR_DEV_ACCESS_KEY_ID>
    secret_access_key: <YOUR_DEV_SECRET_ACCESS_KEY>
  aksk_prod:           # production environment
    access_key_id: <YOUR_PROD_ACCESS_KEY_ID>    
    secret_access_key: <YOUR_PROD_SECRET_ACCESS_KEY>

이곳에 자격 증명을 넣으면 재시작해도 유지되고, 라벨만 바꿔 자격 증명을 전환할 수 있어요.

Milvus가 서비스 호출에 사용할 자격 증명을 지정해요.

같은 파일에서 Bedrock 제공자를 사용하려는 라벨로 지정해요.

function:
  textEmbedding:
    providers:
      bedrock:
        credential: aksk_dev      # ← choose any label you defined above

이렇게 하면 Milvus가 Bedrock 임베딩 서비스에 보내는 모든 요청에 특정 자격 증명이 바인딩돼요.

옵션 2: 환경 변수

Docker Compose로 Milvus를 실행하고 시크릿을 파일과 이미지 밖에 두는 것을 선호할 때 이 방법을 사용해요.

Milvus는 milvus.yaml에서 제공자에 대한 자격 증명을 찾지 못할 때만 환경 변수로 폴백해요.

변수 필수 여부 설명
MILVUSAI_BEDROCK_ACCESS_KEY_ID Yes Bedrock 서비스 인증에 사용하는 AWS access key ID예요.
MILVUSAI_BEDROCK_SECRET_ACCESS_KEY Yes access key ID에 대응하는 AWS secret access key예요.

docker-compose.yaml 파일에서 MILVUSAI_OPENAI_API_KEY 환경 변수를 설정해요.

# docker-compose.yaml (standalone service section)
standalone:
  # ... other configurations ...
  environment:
    # ... other environment variables ...
    # Set the environment variable pointing to the Bedrock embedding service inside the container
    MILVUSAI_BEDROCK_ACCESS_KEY_ID: <MILVUSAI_BEDROCK_ACCESS_KEY_ID>
    MILVUSAI_BEDROCK_SECRET_ACCESS_KEY: <MILVUSAI_BEDROCK_SECRET_ACCESS_KEY>

environment: 블록은 키를 Milvus 컨테이너에만 주입하고 호스트 OS는 건드리지 않아요. 자세한 내용은 Configure Milvus with Docker Compose를 참고하세요.

임베딩 함수 사용 (Use embedding function)

자격 증명을 구성했다면 다음 단계에 따라 임베딩 함수를 정의하고 사용해요.

1단계: 스키마 필드 정의

임베딩 함수를 사용하려면 특정 스키마로 컬렉션을 만들어요. 이 스키마에는 최소 세 가지 필드가 필요해요.

  • 컬렉션의 각 엔티티를 고유하게 식별하는 기본 필드
  • 임베딩할 원본 데이터를 저장하는 스칼라 필드
  • 함수가 스칼라 필드에 대해 생성한 벡터 임베딩을 저장하기 위해 예약된 벡터 필드

다음 예시는 텍스트 데이터를 저장할 스칼라 필드 "document" 하나와 Function 모듈이 생성할 임베딩을 저장할 벡터 필드 "dense" 하나를 가진 스키마를 정의해요. 벡터 차원(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.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1024)

2단계: 스키마에 함수 추가

Milvus의 Function 모듈은 스칼라 필드에 저장된 원본 데이터를 자동으로 임베딩으로 변환하고, 명시적으로 정의된 벡터 필드에 저장해요.

아래 예시는 스칼라 필드 "document"를 임베딩으로 변환하고, 결과 벡터를 앞서 정의한 "dense" 벡터 필드에 저장하는 Function 모듈(bedrk)을 추가해요.

임베딩 함수를 정의했다면 컬렉션 스키마에 추가해요. 이렇게 설정하면 Milvus가 지정된 임베딩 함수를 사용해 텍스트 데이터에서 임베딩을 처리하고 저장해요.

# Define embedding function specifically for OpenAI provider
text_embedding_function = Function(
    name="bedrk",                                   # Unique identifier for this embedding function
    function_type=FunctionType.TEXTEMBEDDING,       # Indicates a text embedding function
    input_field_names=["document"],                 # Scalar field(s) containing text data to embed
    output_field_names=["dense"],                   # Vector field(s) for storing embeddings
    params={                                      # Provider-specific embedding parameters (function-level)
        "provider": "bedrock",                      # Must be set to "bedrock"
        "model_name": "amazon.titan-embed-text-v2:0",    # Specifies the embedding model to use
        "region": "us-east-2",                           # Required: AWS region where the Bedrock service is hosted     
        # Optional parameters:
        # "credential": "aksk_dev",               # Optional: Credential label specified in milvus.yaml
        # "dim": "1024",                          # Output dimension of the vector embeddings after truncation
        # "normalize": "true",                    # Whether to normalize the output embeddings
    }
)

# Add the configured embedding function to your existing collection schema
schema.add_function(text_embedding_function)

다음 단계 (Next steps)

임베딩 함수를 구성한 뒤에는 Function Overview를 참고해 인덱스 구성, 데이터 삽입 예시, 시맨틱 검색 연산에 대한 추가 지침을 확인해요.

더 알아보기 (Learn more)