Gemini#

Platform V Vector DB (далее - Vector DB) совместим с API модели вложения Gemini и ее официальным Python SDK, который можно установить так же, как любой другой пакет.

Gemini - это новая линейка моделей Google PaLM, выпущенная в декабре 2023 года. Новые модели вложения заменяют предыдущую модель вложения Gecko.

В последних моделях дополнительный параметр, task_type, может передаваться при вызове API. Этот параметр служит для обозначения предполагаемого назначения используемых вложений.

API модели вложения поддерживает различные типы задач, описанные следующим образом:

  1. retrieval_query: запрос в поисковой/извлеченной среде;

  2. retrieval_document: документ из корпуса данных, подлежащий поиску;

  3. semantic_similarity: семантическое сходство текстов;

  4. classification: вложения, предназначенные для классификации текстов;

  5. clustering: созданные вложения будут использоваться для кластеризации;

  6. task_type_unspecified: неопределенное значение, которое по умолчанию примет одно из других значений.

Если создаете приложение для семантического поиска, например RAG, следует использовать task_type="retrieval_document" для индексируемых документов и task_type="retrieval_query" для поисковых запросов.

Следующий пример показывает, как сделать это с помощью Vector DB:

Настройка#

pip install google-generativeai

Посмотрите, как использовать API модели вложения для вложения документа для извлечения.

Следующий пример демонстрирует, как встроить документ с использованием models/embedding-001 с типом задачи retrieval_document:

Вложение документа#

import google.generativeai as gemini_client
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, PointStruct, VectorParams

collection_name = "example_collection"

GEMINI_API_KEY = "YOUR GEMINI API KEY"  # add your key here

client = QdrantClient(url="http://localhost:6333")
gemini_client.configure(api_key=GEMINI_API_KEY)
texts = [
    "Qdrant is a vector database that is compatible with Gemini.",
    "Gemini is a new family of Google PaLM models, released in December 2023.",
]

results = [
    gemini_client.embed_content(
        model="models/embedding-001",
        content=sentence,
        task_type="retrieval_document",
        title="Qdrant x Gemini",
    )
    for sentence in texts
]

Создание точек и индексация документов с помощью Vector DB#

Создание точек#

points = [
    PointStruct(
        id=idx,
        vector=response['embedding'],
        payload={"text": text},
    )
    for idx, (response, text) in enumerate(zip(results, texts))
]

Создание коллекции#

client.create_collection(collection_name, vectors_config=
    VectorParams(
        size=768,
        distance=Distance.COSINE,
    )
)

Добавление точек в коллекцию#

client.upsert(collection_name, points)

Поиск документов с помощью Vector DB#

Когда документы проиндексированы, можно искать наиболее релевантные документы, используя ту же модель с типом задачи retrieval_query:

client.search(
    collection_name=collection_name,
    query_vector=gemini_client.embed_content(
        model="models/embedding-001",
        content="Is Qdrant compatible with Gemini?",
        task_type="retrieval_query",
    )["embedding"],
)

Использование моделей вложения Gemini с двоичной квантизацией#

Можно использовать модели вложения Gemini с двоичной квантизацией — техникой, позволяющей уменьшить размер вложений в 32 раза без существенной потери качества результатов поиска.

В этой таблице приведены результаты поиска с моделью models/embedding-001 с двоичной квантизацией по сравнению с исходной моделью:

При избыточности выборки 3 и лимите 100 имеется 95%-ный отзыв относительно точных ближайших соседей с включенным пересчетом.

Избыточность выборки

1

1

2

2

3

3

Пересчет

Ложь

Истина

Ложь

Истина

Ложь

Истина

Лимит

10

0.523333

0.831111

0.523333

0.915556

0.523333

0.950000

20

0.510000

0.836667

0.510000

0.912222

0.510000

0.937778

50

0.489111

0.841556

0.489111

0.913333

0.488444

0.947111

100

0.485778

0.846556

0.485556

0.929000

0.486000

0.956333