Want to Become a Sponsor? Contact Us Now!🎉

langchain-tutorials
Utilisation de LangChain avec Qdrant pour la recherche avancée de vecteurs

Utilisation de LangChain avec Qdrant pour la recherche avancée de vecteurs

Published on

Présentation de Qdrant : un moteur de recherche de similarité vectorielle pour LangChain

Dans le monde de la modélisation du langage et des applications basées sur le texte, la capacité à rechercher et récupérer efficacement des vecteurs similaires est cruciale. Que ce soit pour trouver des documents pertinents, faire correspondre les requêtes des utilisateurs ou effectuer une correspondance basée sur la sémantique, disposer d'un moteur de recherche de similarité vectorielle puissant et pratique peut considérablement améliorer les fonctionnalités des applications. C'est là que Qdrant entre en jeu.

Qdrant est un moteur de recherche de similarité vectorielle qui fournit un service prêt pour la production avec une API pratique pour stocker, rechercher et gérer des vecteurs avec une charge utile supplémentaire. Il est conçu pour gérer efficacement des recherches vectorielles à grande échelle et offre des capacités de filtrage étendues pour des besoins de correspondance avancés. Qdrant est particulièrement utile pour les applications qui nécessitent une correspondance basée sur les réseaux neuronaux ou la sémantique, une recherche facettée, et bien plus encore.

Résumé de l'article

  • Qdrant est un moteur de recherche de similarité vectorielle qui fournit un service prêt pour la production avec une API pratique pour stocker, rechercher et gérer des vecteurs avec une charge utile supplémentaire.
  • Il offre des capacités de filtrage étendues et convient aux applications nécessitant des besoins de correspondance avancés.
  • Qdrant peut être utilisé comme un récupérateur dans LangChain pour des recherches de similarité cosinus ou des recherches de marge maximale marginale (MMR).
<AdComponent />

Installation du client Qdrant et configuration de la clé d'API OpenAI

Pour utiliser Qdrant dans LangChain, la première étape consiste à installer le package qdrant-client, qui fournit les bibliothèques client nécessaires pour interagir avec Qdrant. Vous pouvez l'installer en utilisant la commande suivante :

%pip install --upgrade --quiet qdrant-client

Ensuite, vous devez configurer la clé d'API OpenAI, qui est nécessaire pour effectuer des recherches de similarité en utilisant les vecteurs OpenAI. Vous pouvez configurer la clé d'API en utilisant les modules getpass et os en Python :

import getpass
import os
 
os.environ["OPENAI_API_KEY"] = getpass.getpass("Clé d'API OpenAI:")

Chargement et découpage des documents dans LangChain

Une fois que le client Qdrant est installé et que la clé d'API OpenAI est configurée, vous pouvez commencer à charger et découper vos documents dans LangChain. Pour ce faire, vous pouvez utiliser la classe TextLoader fournie par le module de la communauté LangChain pour charger vos documents.

from langchain_community.document_loaders import TextLoader
 
loader = TextLoader("/chemin/vers/vos/documents.txt")
documents = loader.load()

Après avoir chargé les documents, vous pouvez les découper en petites parties en utilisant la classe CharacterTextSplitter fournie par le module de découpage de texte de LangChain. Cela peut être utile lors du traitement de grands documents ou lorsque vous souhaitez effectuer des recherches sur des parties spécifiques du texte.

from langchain_text_splitters import CharacterTextSplitter
 
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

Connexion à Qdrant dans différents modes

Une fois que vos documents sont chargés et divisés, vous pouvez vous connecter à Qdrant dans différents modes en fonction de vos besoins de déploiement. Qdrant prend en charge plusieurs options de déploiement, notamment le mode local, le déploiement sur serveur local et Qdrant Cloud.

Mode local avec stockage en mémoire

En mode local, vous pouvez exécuter Qdrant sans serveur et conserver les données en mémoire uniquement. Ce mode est utile pour des expériences rapides et des tests. Pour vous connecter à Qdrant en mode local avec un stockage en mémoire, vous pouvez utiliser la méthode Qdrant.from_documents et spécifier le paramètre location comme :memory:.

from langchain_community.vectorstores import Qdrant
from langchain_openai import OpenAIEmbeddings
 
embeddings = OpenAIEmbeddings()
 
qdrant = Qdrant.from_documents(docs, embeddings, location=":memory:", collection_name="mes_documents")

Mode local avec stockage sur disque

Si vous souhaitez conserver les données sur disque en mode local, vous pouvez spécifier un chemin où les données Qdrant seront stockées. Cela peut être utile lors du traitement de jeux de données plus volumineux ou lorsque vous devez conserver les données entre les sessions. Pour vous connecter à Qdrant en mode local avec un stockage sur disque, vous pouvez utiliser la méthode Qdrant.from_documents et spécifier le paramètre path.

qdrant = Qdrant.from_documents(docs, embeddings, path="/tmp/local_qdrant", collection_name="mes_documents")

Déploiement sur serveur local

Pour des déploiements à plus grande échelle, vous pouvez vous connecter à une instance de Qdrant exécutée localement avec un conteneur Docker ou un déploiement Kubernetes. Pour vous connecter à Qdrant lors d'un déploiement sur serveur local, vous devez spécifier l'URL de l'instance Qdrant et définir le paramètre prefer_grpc sur True pour de meilleures performances.

url = "<---URL de qdrant ici --->"
qdrant = Qdrant.from_documents(docs, embeddings, url=url, prefer_grpc=True, collection_name="mes_documents")

Qdrant Cloud

Si vous préférez un cluster Qdrant entièrement géré, vous pouvez créer un compte Qdrant Cloud et vous connecter au cluster en utilisant l'URL et la clé d'API fournies. Cette option offre une solution évolutive et sécurisée pour le déploiement de Qdrant. Pour vous connecter à Qdrant dans Qdrant Cloud, vous devez spécifier l'URL et la clé d'API dans la méthode Qdrant.from_documents.

url = "<---URL du cluster Qdrant Cloud ici --->"
api_key = "<---clé d'API ici--->"
qdrant = Qdrant.from_documents(docs, embeddings, url=url, prefer_grpc=True, api_key=api_key, collection_name="mes_documents")

Dans la prochaine section, nous allons explorer comment effectuer des recherches de similarité sur la collection Qdrant et récupérer les scores de similarité pour les résultats de recherche.

À suivre...

![Qdrant avec langchain] (https://images.unsplash.com/photo-1501769752-a59efa2298ce?crop=entropie&couleur (opens in a new tab) CS = srgb & fm = jpg & ixid = M3w1NjQzMjd8MHwxfHJhbnR8fHx8fHx8fDE3MTAyMjM5NDB8 & ixlib = rb-4.0.3 & q = 85)

Connexion à Qdrant dans différents modes

Qdrant offre différents modes de connexion en fonction de vos besoins. Que vous souhaitiez exécuter Qdrant localement ou le déployer sur site ou dans le cloud, des options sont disponibles pour répondre à vos besoins.

Mode local avec stockage en mémoire

En mode local, vous pouvez exécuter Qdrant sans avoir besoin d'un serveur Qdrant. Cela est utile à des fins de test et de débogage, ou lorsque vous avez seulement besoin de stocker une petite quantité de vecteurs. Dans ce mode, les embeddings sont entièrement conservés en mémoire et seront perdus lorsque le client sera détruit.

Pour vous connecter à Qdrant en mode local avec stockage en mémoire, vous pouvez utiliser le code suivant :

from langchain.vectorstores import Qdrant
from langchain.embeddings import HuggingFaceEmbeddings
 
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
qdrant = Qdrant.from_documents(
    documents, embeddings, location=":memory:", collection_name="my_collection"
)

Mode local avec stockage sur disque

Si vous préférez conserver les vecteurs sur disque en mode local, vous pouvez spécifier un chemin où les vecteurs seront stockés. Cela vous permet de réutiliser les vecteurs entre les exécutions et d'éviter de recommencer à chaque fois.

Pour vous connecter à Qdrant en mode local avec stockage sur disque, vous pouvez utiliser le code suivant :

from langchain.vectorstores import Qdrant
from langchain.embeddings import HuggingFaceEmbeddings
 
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
qdrant = Qdrant.from_documents(
    documents, embeddings, path="/chemin/vers/le/stockage", collection_name="my_collection"
)

Déploiement du serveur sur site

Si vous choisissez de déployer Qdrant sur site, que ce soit en utilisant un conteneur Docker ou un déploiement Kubernetes avec le graphique Helm officiel, vous devrez fournir l'URL du service Qdrant.

Pour vous connecter à Qdrant en déploiement du serveur sur site, vous pouvez utiliser le code suivant :

import qdrant_client
from langchain.vectorstores import Qdrant
from langchain.embeddings import HuggingFaceEmbeddings
 
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
client = qdrant_client.QdrantClient("<qdrant-url>", api_key="<qdrant-api-key>")
qdrant = Qdrant(client=client, collection_name="my_collection", embeddings=embeddings)

Qdrant Cloud

Si vous préférez utiliser Qdrant Cloud, vous pouvez vous y connecter en fournissant l'URL et la clé API appropriées.

Pour vous connecter à Qdrant dans Qdrant Cloud, vous pouvez utiliser le code suivant :

from langchain.vectorstores import Qdrant
from langchain.embeddings import HuggingFaceEmbeddings
 
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
qdrant = Qdrant.from_documents(
    documents, embeddings, url="<qdrant-url>", api_key="<qdrant-api-key>", collection_name="my_collection"
)

En utilisant ces différents modes de connexion, vous pouvez intégrer facilement Qdrant dans vos applications LangChain et profiter de ses puissantes capacités de recherche de similarité vectorielle.

Effectuer des recherches de similarité sur la collection Qdrant

Une fois que vous avez connecté à une collection Qdrant, vous pouvez effectuer des recherches de similarité sur les vecteurs stockés dans la collection. Cela vous permet de trouver des vecteurs similaires à un vecteur de requête donné.

Pour effectuer une recherche de similarité, vous devez fournir un vecteur de requête et spécifier le nombre de voisins les plus proches que vous souhaitez récupérer. Qdrant renverra les voisins les plus proches avec leurs scores de similarité.

Voici un exemple de comment effectuer une recherche de similarité en utilisant Qdrant :

# Vecteur de requête
query_vector = [0.1, 0.2, 0.3, 0.4, 0.5]
 
# Nombre de voisins les plus proches à récupérer
k = 5
 
# Effectuer une recherche de similarité
results = qdrant.search(query_vector, k)

L'objet results contiendra les voisins les plus proches et leurs scores de similarité. Vous pouvez ensuite utiliser cette information pour traiter et analyser plus en détail les résultats.

Utiliser les capacités de filtrage étendues de Qdrant

Qdrant offre des capacités de filtrage étendues qui vous permettent d'affiner les résultats de votre recherche en fonction de critères spécifiques. Vous pouvez filtrer les résultats de recherche en spécifiant des conditions sur les attributs de vecteur ou les attributs de charge utile associés aux vecteurs.

Voici quelques exemples d'utilisation des capacités de filtrage de Qdrant dans LangChain :

Filtrer par les attributs de vecteur

# Filtrer par une valeur d'attribut spécifique
results = qdrant.search(query_vector, k, filter={"vector_attributes": {"nom_attribut": "valeur_attribut"}})
 
# Filtrer par une plage de valeurs d'attribut
results = qdrant.search(query_vector, k, filter={"vector_attributes": {"nom_attribut": {"gte": 10, "lte": 20}}})

Filtrer par les attributs de charge utile

# Filtrer par une valeur d'attribut de charge utile spécifique
results = qdrant.search(query_vector, k, filter={"payload_attributes": {"nom_attribut": "valeur_attribut"}})
 
# Filtrer par une plage de valeurs d'attribut de charge utile
results = qdrant.search(query_vector, k, filter={"payload_attributes": {"nom_attribut": {"gte": 10, "lte": 20}}})

Ces capacités de filtrage vous permettent de restreindre facilement vos résultats de recherche et de récupérer les vecteurs qui répondent à vos critères spécifiques.

Récupérer des résultats diversifiés avec la recherche MMR (Maximal Marginal Relevance) de Qdrant

En plus d'effectuer des recherches de similarité, Qdrant permet également de récupérer des résultats diversifiés en utilisant la méthode de recherche MMR (Maximal Marginal Relevance). La recherche MMR vise à trouver un ensemble de documents à la fois pertinents et diversifiés, offrant une représentation plus complète de l'espace de recherche. Pour effectuer une recherche MMR, vous devez fournir un vecteur de requête, le nombre de voisins les plus proches à récupérer et un paramètre de diversité qui contrôle l'équilibre entre pertinence et diversité.

Voici un exemple de recherche MMR utilisant Qdrant :

# Vecteur de requête
query_vector = [0.1, 0.2, 0.3, 0.4, 0.5]
 
# Nombre de voisins les plus proches à récupérer
k = 5
 
# Paramètre de diversité
lambda_param = 0.5
 
# Effectuer une recherche MMR
results = qdrant.mmr_search(query_vector, k, lambda_param)

L'objet results contiendra l'ensemble diversifié des voisins les plus proches et leurs scores de similarité. En ajustant le paramètre de diversité, vous pouvez contrôler l'équilibre entre pertinence et diversité dans les résultats de recherche.

Utilisation de Qdrant comme récupérateur dans LangChain

Qdrant peut être utilisé comme récupérateur dans LangChain pour les recherches de similarité cosinus et les recherches MMR. En intégrant Qdrant dans vos applications LangChain, vous pouvez exploiter ses puissantes capacités de recherche de similarité vectorielle pour améliorer les performances et la précision de la récupération.

Pour utiliser Qdrant comme récupérateur pour les recherches de similarité cosinus, vous pouvez utiliser le code suivant :

from langchain.retrievers import QdrantRetriever
 
retrieveur = QdrantRetriever(qdrant)
results = retrieveur.retrieve_cosine(query_vector, k)

Pour utiliser Qdrant comme récupérateur pour les recherches MMR, vous pouvez utiliser le code suivant :

from langchain.retrievers import QdrantRetriever
 
retrieveur = QdrantRetriever(qdrant)
results = retrieveur.retrieve_mmr(query_vector, k, lambda_param)

En utilisant Qdrant comme récupérateur dans LangChain, vous pouvez facilement intégrer la fonctionnalité de recherche de similarité vectorielle dans vos applications basées sur des modèles de langage.

Conclusion

Dans cet article, nous avons exploré comment se connecter à Qdrant dans différents modes, effectuer des recherches de similarité sur des collections Qdrant, utiliser les capacités de filtrage étendues de Qdrant, récupérer des résultats diversifiés à l'aide de la recherche MMR et utiliser Qdrant comme récupérateur dans LangChain. En intégrant Qdrant dans vos applications LangChain, vous pouvez exploiter son puissant moteur de recherche de similarité vectorielle pour améliorer les performances et la précision de la récupération.