Представляем функцию встраивания: Как Milvus 2.6 оптимизирует векторизацию и семантический поиск
Если вы когда-либо создавали приложение для векторного поиска, вы уже слишком хорошо знаете этот рабочий процесс. Прежде чем хранить данные, их необходимо преобразовать в векторы с помощью модели встраивания, очистить и отформатировать, а затем поместить в векторную базу данных. Каждый запрос также проходит через тот же процесс: встраивание входных данных, поиск по сходству, а затем сопоставление полученных идентификаторов с исходными документами или записями. Это работает, но создает распределенный клубок скриптов предварительной обработки, конвейеров встраивания и "клеящегося" кода, который вам приходится поддерживать.
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 можно разбить на шесть основных этапов:
Ввод данных - пользователь вводит необработанные данные - текст, изображения или другие типы контента - непосредственно в Milvus, не выполняя никакой внешней предварительной обработки.
Генерация вкраплений - модуль Function автоматически вызывает настроенную модель вкраплений через свой сторонний API, преобразуя исходные данные в векторные вкрапления в режиме реального времени.
Хранение вкраплений - Milvus записывает сгенерированные вкрапления в указанное векторное поле в вашей коллекции, где они становятся доступны для операций поиска по сходству.
Отправить запрос - пользователь отправляет Milvus запрос в виде текста или контента, как и на этапе ввода.
Семантический поиск - Milvus встраивает запрос, используя ту же настроенную модель, выполняет поиск сходства по сохраненным векторам и определяет ближайшие семантические совпадения.
Возврат результатов - 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.'},
])
6. Выполнить векторный поиск
После вставки данных вы можете выполнять поиск непосредственно по необработанным текстовым запросам. 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
Представляем Milvus 2.6: доступный векторный поиск в миллиардных масштабах
Измельчение JSON в Milvus: 88,9-кратное ускорение фильтрации JSON с гибкостью
MinHash LSH в Milvus: секретное оружие для борьбы с дубликатами в обучающих данных LLM
Векторный поиск в реальном мире: как эффективно фильтровать, не убивая отзыв
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



