Milvus
Zilliz
  • Home
  • Blog
  • 임베딩 기능을 소개합니다: Milvus 2.6이 벡터화 및 시맨틱 검색을 간소화하는 방법

임베딩 기능을 소개합니다: Milvus 2.6이 벡터화 및 시맨틱 검색을 간소화하는 방법

  • Engineering
December 03, 2025
Xuqi Yang

벡터 검색 애플리케이션을 구축해 본 적이 있다면 이미 워크플로우에 대해 잘 알고 계실 것입니다. 데이터를 저장하기 전에 먼저 임베딩 모델을 사용하여 데이터를 벡터로 변환하고, 정리 및 포맷을 지정한 다음, 마지막으로 벡터 데이터베이스에 수집해야 합니다. 모든 쿼리도 입력을 임베드하고 유사성 검색을 실행한 다음 결과 ID를 원본 문서나 레코드에 다시 매핑하는 동일한 과정을 거칩니다. 이 방법은 효과가 있지만 전처리 스크립트, 임베딩 파이프라인, 글루 코드가 분산되어 있어 유지 관리해야 합니다.

고성능 오픈 소스 벡터 데이터베이스인Milvus는 이제 이 모든 것을 간소화하기 위한 중요한 단계를 밟고 있습니다. Milvus 2.6에는 임베딩 기능 이라고도 하는 데이터 인, 데이터 아웃 기능이 도입되어 OpenAI, AWS Bedrock, Google Vertex AI, Hugging Face와 같은 주요 모델 제공업체에 직접 연결할 수 있는 임베딩 기능이 내장되어 있습니다. 이제 자체 임베딩 인프라를 관리하는 대신 Milvus가 이러한 모델을 대신 호출할 수 있습니다. 또한 원시 텍스트(그리고 곧 다른 데이터 유형)를 사용하여 삽입하고 쿼리할 수 있으며, Milvus는 쓰기 및 쿼리 시점에 벡터화를 자동으로 처리합니다.

이 글의 나머지 부분에서는 데이터 입력, 데이터 출력의 내부 작동 방식, 공급자 및 임베딩 함수를 구성하는 방법, 그리고 이를 사용하여 벡터 검색 워크플로를 엔드투엔드로 간소화하는 방법에 대해 자세히 살펴보겠습니다.

데이터 인, 데이터 아웃이란 무엇인가요?

Milvus 2.6의 데이터 인, 데이터 아웃은 외부 전처리 서비스 없이 데이터 변환과 임베딩 생성을 내부적으로 처리할 수 있는 프레임워크인 새로운 함수 모듈을 기반으로 합니다. (디자인 제안은 깃허브 이슈 #35856에서 확인할 수 있습니다.) 이 모듈을 통해 Milvus는 원시 입력 데이터를 가져와 임베딩 공급자를 직접 호출하고 결과 벡터를 자동으로 컬렉션에 기록할 수 있습니다.

함수 모듈은 높은 수준에서 임베딩 생성을 기본 데이터베이스 기능으로 전환합니다. 별도의 임베딩 파이프라인, 백그라운드 워커 또는 리랭커 서비스를 실행하는 대신, Milvus는 이제 구성된 제공자에게 요청을 전송하고 임베딩을 검색한 다음 데이터와 함께 저장하는 작업을 모두 수집 경로 내에서 수행합니다. 따라서 자체 임베딩 인프라를 관리하는 데 따른 운영 오버헤드가 제거됩니다.

데이터 인, 데이터 아웃은 Milvus 워크플로우에 세 가지 주요 개선 사항을 도입합니다:

  • 원시 데이터 직접 삽입 - 이제 처리되지 않은 텍스트, 이미지 또는 기타 데이터 유형을 Milvus에 직접 삽입할 수 있습니다. 미리 벡터로 변환할 필요가 없습니다.

  • 하나의 임베딩 기능 구성 - Milvus에서 임베딩 모델을 구성하면 전체 임베딩 프로세스를 자동으로 관리합니다. Milvus는 OpenAI, AWS Bedrock, Google Vertex AI, Cohere, Hugging Face 등 다양한 모델 제공업체와 원활하게 통합됩니다.

  • 원시입력으로 쿼리 - 이제 원시 텍스트 또는 기타 콘텐츠 기반 쿼리를 사용하여 시맨틱 검색을 수행할 수 있습니다. Milvus는 구성된 동일한 모델을 사용하여 임베딩을 즉시 생성하고 유사성 검색을 수행하며 관련 결과를 반환합니다.

간단히 말해, Milvus는 이제 데이터를 자동으로 임베드하고 선택적으로 순위를 재조정합니다. 벡터화는 데이터베이스에 내장된 기능이므로 외부 임베딩 서비스나 사용자 지정 전처리 로직이 필요하지 않습니다.

데이터 인, 데이터 아웃의 작동 방식

아래 다이어그램은 Milvus 내에서 데이터 인, 데이터 아웃이 작동하는 방식을 보여줍니다.

데이터 인, 데이터 아웃 워크플로는 6가지 주요 단계로 나눌 수 있습니다:

  1. 데이터 입력 - 사용자가 텍스트, 이미지 또는 기타 콘텐츠 유형과 같은 원시 데이터를 외부 전처리 없이 Milvus에 직접 삽입합니다.

  2. 임베딩생성 - 함수 모듈은 타사 API를 통해 구성된 임베딩 모델을 자동으로 호출하여 원시 입력을 실시간으로 벡터 임베딩으로 변환합니다.

  3. 임베딩저장 - Milvus는 생성된 임베딩을 컬렉션 내의 지정된 벡터 필드에 기록하여 유사도 검색 작업에 사용할 수 있도록 합니다.

  4. 쿼리 제출 - 사용자가 입력 단계와 마찬가지로 Milvus에 원시 텍스트 또는 콘텐츠 기반 쿼리를 발행합니다.

  5. 시맨틱검색 - Milvus는 구성된 동일한 모델을 사용하여 쿼리를 임베드하고 저장된 벡터에 대해 유사성 검색을 실행하여 가장 가까운 시맨틱 일치 항목을 결정합니다.

  6. 결과 반환 - Milvus는 원본 데이터에 다시 매핑된 가장 유사한 상위 k개의 결과를 애플리케이션에 직접 반환합니다.

데이터 입력, 데이터 출력 구성 방법

전제 조건

  • 최신 버전의 Milvus 2.6을 설치합니다.

  • 지원되는 제공업체(예: OpenAI, AWS Bedrock 또는 Cohere)에서 임베딩 API 키를 준비합니다. 이 예제에서는 임베딩 제공업체로 Cohere를 사용합니다.

milvus.yaml 구성 수정

Docker Compose와 함께 Milvus를 실행하는 경우, milvus.yaml 파일을 수정하여 Function 모듈을 활성화해야 합니다. 지침은 공식 문서를 참조하세요: (다른 배포 방법에 대한 지침은 여기에서 확인할 수 있습니다).

구성 파일에서 credentialfunction 섹션을 찾습니다.

그런 다음 apikey1.apikeyproviders.cohere 필드를 업데이트합니다.

...
credential:
  aksk1:
    access_key_id:  # Your access_key_id
    secret_access_key:  # Your secret_access_key
  apikey1:
    apikey: "***********************" # Edit this section
  gcp1:
    credential_json:  # base64 based gcp credential data
# Any configuration related to functions
function:
  textEmbedding:
    providers:
                        ...
      cohere: # Edit the section below
        credential:  apikey1 # The name in the crendential configuration item
        enable: true # Whether to enable cohere model service
        url:  "https://api.cohere.com/v2/embed" # Your cohere embedding url, Default is the official embedding url
      ...
...

이러한 변경이 완료되면 Milvus를 다시 시작하여 업데이트된 구성을 적용합니다.

데이터 입력, 데이터 출력 기능 사용 방법

1. 컬렉션에 대한 스키마 정의

임베딩 기능을 사용하려면 컬렉션 스키마에 최소 3개의 필드가 포함되어야 합니다:

  • 기본 키 필드(id ) - 컬렉션의 각 엔티티를 고유하게 식별합니다.

  • 스칼라 필드(document ) - 원본 원시 데이터를 저장합니다.

  • 벡터 필드 (dense ) - 생성된 벡터 임베딩을 저장합니다.

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, OpenAI's text-embedding-3-small model outputs 1536-dimensional vectors.
# For dense vector, data type can be FLOAT_VECTOR or INT8_VECTOR
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1536) # Set dim according to the embedding model you use.

2. 임베딩 함수 정의하기

다음으로 스키마에서 임베딩 함수를 정의합니다.

  • name - 함수에 대한 고유 식별자입니다.

  • function_type - 텍스트 임베딩의 경우 FunctionType.TEXTEMBEDDING 로 설정합니다. Milvus는 FunctionType.BM25FunctionType.RERANK 과 같은 다른 함수 유형도 지원합니다. 자세한 내용은 전체 텍스트 검색감쇠 랭커 개요를 참조하세요.

  • input_field_names - 원시 데이터의 입력 필드를 정의합니다(document).

  • output_field_names - 벡터 임베딩이 저장될 출력 필드를 정의합니다 (dense).

  • params - 임베딩 함수에 대한 구성 매개변수를 포함합니다. providermodel_name 의 값은 milvus.yaml 구성 파일의 해당 항목과 일치해야 합니다.

참고: 각 함수는 서로 다른 변환 로직을 구분하고 충돌을 방지하기 위해 고유한 nameoutput_field_names 을 가져야 합니다.

# Define embedding function (example: OpenAI provider)
text_embedding_function = Function(
    name="cohere_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": "cohere",                 # Embedding model provider
        "model_name": "embed-v4.0",     # Embedding model
        # "credential": "apikey1",            # Optional: Credential label
        # Optional parameters:
        # "dim": "1536",       # Optionally shorten the vector dimension
        # "user": "user123"    # Optional: identifier for API tracking
    }
)
# Add the embedding function to your schema
schema.add_function(text_embedding_function)

3. 색인 구성

필드와 함수가 정의되면 컬렉션에 대한 인덱스를 만듭니다. 여기서는 간단하게 하기 위해 AUTOINDEX 유형을 예로 사용합니다.

# 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" 
)

4. 컬렉션 만들기

정의된 스키마와 인덱스를 사용하여 새 컬렉션을 만듭니다. 이 예에서는 Demo라는 이름의 컬렉션을 만들겠습니다.

# Create collection named "demo"
client.create_collection(
    collection_name='demo', 
    schema=schema, 
    index_params=index_params
)

5. 데이터 삽입

이제 임베딩을 수동으로 생성할 필요 없이 원시 데이터를 Milvus에 직접 삽입할 수 있습니다.

# 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.'},
])

데이터를 삽입한 후 원시 텍스트 쿼리를 사용하여 직접 검색을 수행할 수 있습니다. 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)
# Example output:
# data: ["[{'id': 1, 'distance': 0.8821347951889038, 'entity': {'document': 'Milvus simplifies semantic search through embeddings.'}}]"]

벡터 검색에 대한 자세한 내용은 벡터 검색을 참조하세요: 기본 벡터 검색 쿼리 API를 참조하세요.

Milvus 2.6 시작하기

데이터 인, 데이터 아웃을 통해 Milvus 2.6은 벡터 검색의 단순성을 한 단계 더 끌어올렸습니다. 임베딩 및 리랭크 기능이 Milvus 내에 직접 통합되어 더 이상 외부 전처리를 관리하거나 별도의 임베딩 서비스를 유지할 필요가 없습니다.

사용해 볼 준비가 되셨나요? 지금 바로 Milvus 2.6을 설치하여 데이터 인, 데이터 아웃의 강력한 기능을 직접 경험해 보세요.

궁금한 점이 있거나 기능에 대해 자세히 알아보고 싶으신가요? Discord 채널에 참여하거나 GitHub에 이슈를 제출하세요. 또한 Milvus 오피스 아워를 통해 20분간의 일대일 세션을 예약하여 인사이트, 안내, 질문에 대한 답변을 얻을 수도 있습니다.

Milvus 2.6 기능에 대해 자세히 알아보기

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    계속 읽기