Gemini#
Platform V Vector DB (далее - Vector DB) совместим с API модели вложения Gemini и ее официальным Python SDK, который можно установить так же, как любой другой пакет.
Gemini - это новая линейка моделей Google PaLM, выпущенная в декабре 2023 года. Новые модели вложения заменяют предыдущую модель вложения Gecko.
В последних моделях дополнительный параметр, task_type, может передаваться при вызове API. Этот параметр служит для обозначения предполагаемого назначения используемых вложений.
API модели вложения поддерживает различные типы задач, описанные следующим образом:
retrieval_query: запрос в поисковой/извлеченной среде;retrieval_document: документ из корпуса данных, подлежащий поиску;semantic_similarity: семантическое сходство текстов;classification: вложения, предназначенные для классификации текстов;clustering: созданные вложения будут использоваться для кластеризации;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 |