Milvus
Zilliz
  • Home
  • Blog
  • Представляем функцию встраивания: Как Milvus 2.6 оптимизирует векторизацию и семантический поиск

Представляем функцию встраивания: Как Milvus 2.6 оптимизирует векторизацию и семантический поиск

  • Engineering
December 03, 2025
Xuqi Yang

Если вы когда-либо создавали приложение для векторного поиска, вы уже слишком хорошо знаете этот рабочий процесс. Прежде чем хранить данные, их необходимо преобразовать в векторы с помощью модели встраивания, очистить и отформатировать, а затем поместить в векторную базу данных. Каждый запрос также проходит через тот же процесс: встраивание входных данных, поиск по сходству, а затем сопоставление полученных идентификаторов с исходными документами или записями. Это работает, но создает распределенный клубок скриптов предварительной обработки, конвейеров встраивания и "клеящегося" кода, который вам приходится поддерживать.

Milvus, высокопроизводительная векторная база данных с открытым исходным кодом, теперь делает большой шаг к упрощению всего этого. В Milvus 2.6 появилась функция Data-in, Data-out (также известная как Embedding Function)- встроенная возможность встраивания, которая напрямую подключается к основным поставщикам моделей, таким как OpenAI, AWS Bedrock, Google Vertex AI и Hugging Face. Вместо того чтобы управлять собственной инфраструктурой встраивания, Milvus теперь может вызывать эти модели за вас. Вы также можете вставлять и запрашивать необработанный текст - а вскоре и другие типы данных, - в то время как Milvus автоматически обрабатывает векторизацию во время записи и запроса.

В этой статье мы подробнее рассмотрим, как Data-in, Data-out работает под капотом, как настраивать провайдеров и функции встраивания, а также как использовать его для оптимизации рабочих процессов векторного поиска из конца в конец.

Что такое Data-in, Data-out?

Data-in, Data-out в Milvus 2.6 построен на новом модуле Function - фреймворке, который позволяет Milvus обрабатывать преобразование данных и генерировать вставки внутри, без каких-либо внешних сервисов предварительной обработки. (Вы можете следить за предложением по разработке в GitHub issue #35856.) С помощью этого модуля Milvus может принимать необработанные входные данные, напрямую вызывать провайдера встраивания и автоматически записывать полученные векторы в вашу коллекцию.

На высоком уровне модуль Function превращает генерацию встраивания в нативную возможность базы данных. Вместо того чтобы запускать отдельные конвейеры встраивания, фоновые рабочие или реранкерные службы, Milvus теперь отправляет запросы к настроенному провайдеру, получает встраивания и хранит их вместе с данными - все это внутри пути ввода. Это избавляет вас от необходимости управлять собственной инфраструктурой встраивания.

Data-in, Data-out представляет три основных улучшения в рабочем процессе Milvus:

  • Вставка необработанных данных напрямую - теперь вы можете вставлять необработанный текст, изображения или другие типы данных непосредственно в Milvus. Нет необходимости предварительно преобразовывать их в векторы.

  • Настройте одну функцию встраивания - после настройки модели встраивания в Milvus она автоматически управляет всем процессом встраивания. Milvus легко интегрируется с целым рядом поставщиков моделей, включая OpenAI, AWS Bedrock, Google Vertex AI, Cohere и Hugging Face.

  • Запросы с необработанными данными - теперь вы можете выполнять семантический поиск с использованием необработанного текста или других запросов на основе контента. Milvus использует ту же настроенную модель для генерации вкраплений на лету, выполнения поиска по сходству и возврата релевантных результатов.

Короче говоря, Milvus теперь автоматически встраивает - и, по желанию, перестраивает - ваши данные. Векторизация становится встроенной функцией базы данных, устраняя необходимость во внешних сервисах встраивания или пользовательской логике предварительной обработки.

Принцип работы Data-in, Data-out

Приведенная ниже схема иллюстрирует работу Data-in, Data-out в Milvus.

Рабочий процесс Data-in, Data-out можно разбить на шесть основных этапов:

  1. Ввод данных - пользователь вводит необработанные данные - текст, изображения или другие типы контента - непосредственно в Milvus, не выполняя никакой внешней предварительной обработки.

  2. Генерация вкраплений - модуль Function автоматически вызывает настроенную модель вкраплений через свой сторонний API, преобразуя исходные данные в векторные вкрапления в режиме реального времени.

  3. Хранение вкраплений - Milvus записывает сгенерированные вкрапления в указанное векторное поле в вашей коллекции, где они становятся доступны для операций поиска по сходству.

  4. Отправить запрос - пользователь отправляет Milvus запрос в виде текста или контента, как и на этапе ввода.

  5. Семантический поиск - Milvus встраивает запрос, используя ту же настроенную модель, выполняет поиск сходства по сохраненным векторам и определяет ближайшие семантические совпадения.

  6. Возврат результатов - Milvus возвращает топ-к наиболее схожих результатов - с привязкой к исходным данным - непосредственно в приложение.

Как настроить ввод и вывод данных

Необходимые условия

  • Установите последнюю версию Milvus 2.6.

  • Подготовьте ключ API для встраивания от поддерживаемого провайдера (например, OpenAI, AWS Bedrock или Cohere). В этом примере мы будем использовать Cohere в качестве провайдера встраивания.

Измените конфигурацию milvus.yaml.

Если вы используете Milvus с Docker Compose, вам нужно будет изменить файл milvus.yaml, чтобы включить модуль Function. За руководством вы можете обратиться к официальной документации: Configure Milvus with Docker Compose (инструкции для других методов развертывания также можно найти здесь).

В конфигурационном файле найдите разделы credential и function.

Затем обновите поля apikey1.apikey и providers.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. Определите схему для коллекции

Чтобы включить функцию встраивания, схема вашей коллекции должна включать как минимум три поля:

  • Поле первичного ключа (id ) - уникально идентифицирует каждую сущность в коллекции.

  • Скалярное поле (document ) - хранит исходные данные.

  • Поле Vector (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.BM25 и FunctionType.RERANK. Дополнительные сведения см. в разделе Обзор полнотекстового поиска и ранжирования по распаду.

  • input_field_names - Определяет поле ввода для исходных данных (document).

  • output_field_names - Определяет выходное поле, в котором будут храниться векторные вкрапления (dense).

  • params - Содержит параметры конфигурации для функции встраивания. Значения для provider и model_name должны совпадать с соответствующими записями в конфигурационном файле milvus.yaml.

Примечание: Каждая функция должна иметь уникальные name и output_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

Благодаря функции Data-in, Data-out, Milvus 2.6 простота векторного поиска выходит на новый уровень. Благодаря интеграции функций встраивания и повторного ранжирования непосредственно в Milvus, вам больше не нужно управлять внешней предварительной обработкой или поддерживать отдельные службы встраивания.

Готовы попробовать? Установите Milvus 2.6 сегодня и испытайте силу Data-in, Data-out на себе.

У вас есть вопросы или вы хотите получить подробную информацию о какой-либо функции? Присоединяйтесь к нашему каналу Discord или создавайте проблемы на GitHub. Вы также можете забронировать 20-минутную индивидуальную сессию, чтобы получить понимание, руководство и ответы на свои вопросы в Milvus Office Hours.

Подробнее о возможностях 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

    Продолжить чтение