Google Gemini
Используйте модель встраивания Google Gemini с Milvus, выбрав модель и настроив Milvus с помощью ключа API Gemini.
Выберите модель встраивания
Milvus поддерживает модели встраивания, предоставляемые Google Gemini. Ниже приведены доступные на данный момент модели встраивания Gemini для быстрого ознакомления:
Название модели |
Размеры |
Максимальное количество токенов |
Описание |
|---|---|---|---|
gemini-embedding-001 |
По умолчанию: 3,072 (рекомендуется: 768, 1,536 или 3,072) |
8,192 |
Модель встраивания текста с гибкой размерностью, обученная с помощью Matryoshka Representation Learning (MRL). |
gemini-embedding-2 |
По умолчанию: 3,072 (рекомендуется: 768, 1,536 или 3,072) |
8,192 |
Первая собственная мультимодальная модель встраивания Google, поддерживающая текст, изображения, видео, аудио и документы в едином пространстве встраивания. |
Обе модели обучаются с помощью техники Matryoshka Representation Learning (MRL), которая позволяет гибко настраивать размеры выходных данных с помощью параметра dim. Рекомендуется начинать с размерности 768 и при необходимости увеличивать до 1 536 или 3 072. Более подробную информацию см. в разделе Модели встраивания Gemini.
Модели встраивания Gemini также поддерживают параметр типа задачи, который оптимизирует встраивания для конкретных случаев использования. Milvus автоматически устанавливает тип задачи в зависимости от операции:
Insert / Upsert:
RETRIEVAL_DOCUMENTПоиск:
RETRIEVAL_QUERY
Вы можете переопределить это, явно указав параметр task (например, SEMANTIC_SIMILARITY, CLASSIFICATION, CLUSTERING).
Настройка учетных данных
Milvus должен знать ваш ключ API Gemini, прежде чем он сможет запрашивать вставки. Milvus предоставляет два способа настройки учетных данных:
Файл конфигурации (рекомендуется): Храните ключ API в
milvus.yaml, чтобы при каждом перезапуске узла он автоматически подхватывался.Переменные окружения: Вводим ключ во время развертывания - идеально для Docker Compose.
Выберите один из двух описанных ниже методов - конфигурационный файл проще поддерживать на пустом металле и виртуальных машинах, а маршрут с переменными окружения подходит для контейнерных рабочих процессов.
Если ключ API для одного и того же провайдера присутствует и в файле конфигурации, и в переменной окружения, Milvus всегда использует значение в milvus.yaml и игнорирует переменную окружения.
Вариант 1: Конфигурационный файл (рекомендуется и имеет более высокий приоритет)
Храните ваши API-ключи в milvus.yaml; Milvus считывает их при запуске и переопределяет любую переменную окружения для того же провайдера.
Объявите ключи в разделе credential:
Вы можете перечислить один или много 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: Переменная среды
Используйте этот метод, если вы запускаете Milvus с Docker Compose и предпочитаете держать секреты вне файлов и образов.
Milvus возвращается к переменной окружения только в том случае, если ключ для провайдера не найден в milvus.yaml.
Переменная |
Требуется |
Описание |
|---|---|---|
MILVUS_GEMINI_API_KEY |
Да |
Делает ключ Gemini доступным внутри каждого контейнера Milvus (игнорируется, если ключ для Gemini существует в milvus.yaml). |
В файле 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, оставляя вашу хостовую ОС нетронутой. Подробнее см. в разделе Настройка Milvus с помощью Docker Compose.
Шаг 1: Создайте коллекцию с функцией вставки текста
Определите поля схемы
Чтобы использовать функцию встраивания, создайте коллекцию с определенной схемой. Эта схема должна включать как минимум три необходимых поля:
Основное поле, которое уникально идентифицирует каждую сущность в коллекции.
Поле
VARCHAR, в котором хранятся исходные данные для встраивания.Векторное поле, зарезервированное для хранения плотных векторных вкраплений, которые функция встраивания текста будет генерировать для поля
VARCHAR.
Следующий пример определяет схему с одним скалярным полем "document" для хранения текстовых данных и одним векторным полем "dense" для хранения вкраплений, которые будут сгенерированы модулем Function. Не забудьте задать размерность вектора (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, во вкрапления и сохраняет их в явно заданном векторном поле.
В приведенном ниже примере добавляется модуль Function (gemini_embedding), который преобразует скалярное поле "document" в эмбеддинги, сохраняя полученные векторы в определенном ранее векторном поле "dense".
# 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)
Поддерживаемые типы задач для параметра task:
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: Вставка данных
После настройки коллекции и индекса вы готовы к вставке исходных данных. В этом процессе вам нужно только предоставить исходный текст. Модуль Function, который мы определили ранее, автоматически генерирует соответствующий разреженный вектор для каждой текстовой записи.
# 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)
Дополнительные сведения об операциях поиска и запроса см. в разделе Базовый векторный поиск и запрос.