Langchain#
Langchain - библиотека, которая значительно упрощает разработку приложений на основе больших языковых моделей. Она унифицирует интерфейсы различных библиотек, включая основных поставщиков встраиваемых решений и Vector DB. Используя Langchain можно сосредоточиться на бизнес задачах вместо написания шаблонного кода.
Langchain распространяет интеграцию с Vector DB в виде партнерского пакета.
Она может быть установлена с помощью pip:
pip install langchain-qdrant
Интеграция поддерживает поиск релевантных документов с использованием плотных/средних и гибридных методов поиска.
Vector DB выступает в роли векторного индекса, который может хранить вложения вместе с документами, использованными для их генерации. Есть несколько способов его использования, но вызов QdrantVectorStore.from_texts или QdrantVectorStore.from_documents вероятно является самым простым способом начать работу:
from langchain_qdrant import QdrantVectorStore
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
doc_store = QdrantVectorStore.from_texts(
texts, embeddings, url="<qdrant-url>", api_key="<qdrant-api-key>", collection_name="texts"
)
Использование существующей коллекции#
Чтобы получить экземпляр langchain_qdrant.QdrantVectorStore без загрузки каких-либо новых документов или текстов, можно использовать метод QdrantVectorStore.from_existing_collection().
doc_store = QdrantVectorStore.from_existing_collection(
embeddings=embeddings,
collection_name="my_documents",
url="<qdrant-url>",
api_key="<qdrant-api-key>",
)
Локальный режим#
Клиент Python позволяет запускать тот же самый код в локальном режиме без запуска сервера Vector DB. Это отлично подходит для тестирования и отладки, а также для хранения небольшого количества векторов. Вложения могут полностью храниться в памяти или сохраняться на диске.
Хранение в оперативной памяти#
Для некоторых тестовых сценариев и быстрых экспериментов может понадобиться сохранять все данные только в памяти, так что они теряются при уничтожении клиента — обычно в конце скрипта/тетради.
qdrant = QdrantVectorStore.from_documents(
docs,
embeddings,
location=":memory:", # Local mode with in-memory storage only
collection_name="my_documents",
)
Хранение на диске#
Локальный режим, без использования сервера Vector DB, также может хранить векторы на диске, чтобы они сохранялись между запусками.
qdrant = Qdrant.from_documents(
docs,
embeddings,
path="/tmp/local_qdrant",
collection_name="my_documents",
)
Развертывание серверной части#
Независимо от того, какой выбран запуск QdrantVectorStore (локально с помощью контейнера Docker Docker-контейнер или развернете кластер Kubernetes с официальной диаграммой Helm официальная диаграмма Helm), способ подключения к такому экземпляру будет идентичным. Потребуется предоставить URL-адрес, указывающий на сервис.
url = "<---qdrant url here --->"
qdrant = QdrantVectorStore.from_documents(
docs,
embeddings,
url,
prefer_grpc=True,
collection_name="my_documents",
)
Поиск по подобию#
QdrantVectorStore поддерживает три режима поиска по подобию. Они могут быть настроены с помощью параметра retrieval_mode при настройке класса.
Плотный векторный поиск (по умолчанию);
Раскладочный векторный поиск;
Гибридный поиск.
Плотный векторный поиск#
Чтобы искать только по плотным векторам,
Параметр
retrieval_modeдолжен быть установлен в значениеRetrievalMode.DENSE(по умолчанию).Значение плотные вложения должно быть предоставлено для параметра
embedding.from langchain_qdrant import RetrievalMode qdrant = QdrantVectorStore.from_documents( docs, embedding=embeddings, location=":memory:", collection_name="my_documents", retrieval_mode=RetrievalMode.DENSE, ) query = "What did the president say about Ketanji Brown Jackson" found_docs = qdrant.similarity_search(query)
Раскладочный векторный поиск#
Чтобы выполнять поиск только по разреженным векторам,
Параметр
retrieval_modeследует установить в значениеRetrievalMode.SPARSE.Реализация интерфейса SparseEmbeddings, использующая любого поставщика разреженных вложений, должна быть предоставлена в качестве значения параметра
sparse_embedding.
Пакет langchain-qdrant предоставляет реализацию на базе FastEmbed FastEmbed из коробки.
Чтобы использовать ее, установите пакет FastEmbed.
from langchain_qdrant import FastEmbedSparse, RetrievalMode
sparse_embeddings = FastEmbedSparse(model_name="Qdrant/BM25")
qdrant = QdrantVectorStore.from_documents(
docs,
sparse_embedding=sparse_embeddings,
location=":memory:",
collection_name="my_documents",
retrieval_mode=RetrievalMode.SPARSE,
)
query = "What did the president say about Ketanji Brown Jackson"
found_docs = qdrant.similarity_search(query)
Гибридный векторный поиск#
Чтобы выполнить гибридный поиск с использованием плотных и разреженных векторов со слиянием оценок,
Параметр
retrieval_modeнеобходимо установить в значениеRetrievalMode.HYBRID.Значение плотные вложения должно быть предоставлено для параметра
embedding.Реализация интерфейса SparseEmbeddings, использующая любого поставщика разреженных вложений, должна быть предоставлена в качестве значения параметра
sparse_embedding.from langchain_qdrant import FastEmbedSparse, RetrievalMode sparse_embeddings = FastEmbedSparse(model_name="Qdrant/bm25") qdrant = QdrantVectorStore.from_documents( docs, embedding=embeddings, sparse_embedding=sparse_embeddings, location=":memory:", collection_name="my_documents", retrieval_mode=RetrievalMode.HYBRID, ) query = "What did the president say about Ketanji Brown Jackson" found_docs = qdrant.similarity_search(query)
Обратите внимание если ранее добавили документы в режиме HYBRID, можно переключаться на любой режим извлечения во время поиска. Поскольку оба типа векторов доступны в коллекции.
Дополнительная документация#
Больше о работе Vector DB в приложении на основе Langchain можно в статье Вопросы и ответы с Langchain и Vector DB без шаблонов.
Дополнительную информацию также можно найти в документации Langchain документация Langchain.