Want to Become a Sponsor? Contact Us Now!🎉

langchain-tutorials
LangChain zusammen mit Qdrant für fortschrittliche Vektorsuche nutzen

Die Nutzung von LangChain mit Qdrant für fortschrittliche Vektorsuche

Published on

Einführung in Qdrant: Eine Vektorähnlichkeitssuchmaschine für LangChain

In der Welt der Sprachmodellierung und textbasierten Anwendungen ist die Fähigkeit, ähnliche Vektoren effizient zu suchen und abzurufen, von entscheidender Bedeutung. Egal, ob es darum geht, relevante Dokumente zu finden, Benutzeranfragen abzugleichen oder semantische Übereinstimmungen durchzuführen - eine leistungsstarke und praktische Vektorähnlichkeitssuchmaschine kann die Möglichkeiten von Anwendungen erheblich verbessern. Hier kommt Qdrant ins Spiel.

Qdrant ist eine Vektorähnlichkeitssuchmaschine, die einen produktionsbereiten Service mit einer praktischen API zum Speichern, Suchen und Verwalten von Vektoren mit zusätzlichen Informationen bietet. Sie ist darauf ausgelegt, Vektorsuchen im großen Maßstab effizient zu handhaben und bietet umfangreiche Filtermöglichkeiten für fortgeschrittene Abgleichanforderungen. Qdrant ist insbesondere für Anwendungen nützlich, die neuronale Netzwerke oder semantische Übereinstimmungen, facettierte Suche und mehr erfordern.

Zusammenfassung des Artikels

  • Qdrant ist eine Vektorähnlichkeitssuchmaschine, die einen produktionsbereiten Service mit einer praktischen API zum Speichern, Suchen und Verwalten von Vektoren mit zusätzlichen Informationen bietet.
  • Sie bietet umfangreiche Filtermöglichkeiten und eignet sich für Anwendungen mit fortgeschrittenen Abgleichsanforderungen.
  • Qdrant kann als Inretriever in LangChain für Ähnlichkeitssuchen mit Kosinus-Ähnlichkeit oder Maximal Marginal Relevance (MMR) eingesetzt werden.
<AdComponent />

Installation des Qdrant-Clients und Einrichtung des OpenAI-API-Schlüssels

Um Qdrant in LangChain zu verwenden, ist der erste Schritt die Installation des Pakets qdrant-client, das die erforderlichen Client-Bibliotheken für die Interaktion mit Qdrant bereitstellt. Sie können es mit dem folgenden Befehl installieren:

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

Als nächstes müssen Sie den OpenAI-API-Schlüssel einrichten, der zum Durchführen von Ähnlichkeitssuchen mit den OpenAI-Embeddings erforderlich ist. Sie können den API-Schlüssel einrichten, indem Sie die Module getpass und os in Python verwenden:

import getpass
import os
 
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI-API-Schlüssel:")

Laden und Aufteilen von Dokumenten in LangChain

Nachdem der Qdrant-Client installiert und der OpenAI-API-Schlüssel eingerichtet ist, können Sie beginnen, Ihre Dokumente in LangChain zu laden und aufzuteilen. Dazu können Sie die von der LangChain-Community bereitgestellte Klasse TextLoader verwenden, um Ihre Dokumente zu laden.

from langchain_community.document_loaders import TextLoader
 
loader = TextLoader("/Pfad/zu/Ihren/Dokumenten.txt")
documents = loader.load()

Nach dem Laden der Dokumente können Sie sie mithilfe der von der LangChain-Textspaltungsmodule bereitgestellten Klasse CharacterTextSplitter in kleinere Abschnitte unterteilen. Dies kann nützlich sein, wenn Sie es mit großen Dokumenten zu tun haben oder wenn Sie Suchen in bestimmten Teilen des Textes durchführen möchten.

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

Verbindung zu Qdrant in verschiedenen Modi herstellen

Nachdem Ihre Dokumente geladen und aufgeteilt wurden, können Sie je nach Ihren Bereitstellungsanforderungen in verschiedenen Modi eine Verbindung zu Qdrant herstellen. Qdrant unterstützt verschiedene Bereitstellungsoptionen, einschließlich des lokalen Modus, der Bereitstellung auf einem eigenen Server und Qdrant Cloud.

Lokaler Modus mit Speicherung im Arbeitsspeicher

Im lokalen Modus können Sie Qdrant ohne Server ausführen und die Daten nur im Arbeitsspeicher behalten. Dieser Modus eignet sich für schnelle Experimente und Tests. Um eine Verbindung zu Qdrant im lokalen Modus mit Speicherung im Arbeitsspeicher herzustellen, können Sie die Methode Qdrant.from_documents verwenden und den Parameter location als :memory: angeben.

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

Lokaler Modus mit Speicherung auf Datenträger

Wenn Sie die Daten im lokalen Modus auf dem Datenträger speichern möchten, können Sie einen Pfad angeben, an dem die Qdrant-Daten gespeichert werden sollen. Dies kann nützlich sein, wenn Sie es mit größeren Datensätzen zu tun haben oder wenn Sie die Daten über Sitzungen hinweg beibehalten müssen. Um eine Verbindung zu Qdrant im lokalen Modus mit Speicherung auf dem Datenträger herzustellen, können Sie die Methode Qdrant.from_documents verwenden und den Parameter path angeben.

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

Bereitstellung auf einem eigenen Server

Für Bereitstellungen im größeren Maßstab können Sie sich mit einer lokal laufenden Qdrant-Instanz über einen Docker-Container oder eine Kubernetes-Bereitstellung verbinden. Um eine Verbindung zu Qdrant in einer eigenen Serverbereitstellung herzustellen, müssen Sie die URL der Qdrant-Instanz angeben und den Parameter prefer_grpc auf True setzen, um eine bessere Leistung zu erzielen.

url = "<---Hier URL von Qdrant angeben--->"
qdrant = Qdrant.from_documents(docs, embeddings, url=url, prefer_grpc=True, collection_name="meine_dokumente")

Qdrant Cloud

Wenn Sie eine vollständig gemanagte Qdrant-Clusterlösung bevorzugen, können Sie ein Qdrant-Cloud-Konto einrichten und sich mit der bereitgestellten URL und API-Schlüssel mit dem Cluster verbinden. Diese Option bietet eine skalierbare und sichere Lösung für die Bereitstellung von Qdrant. Um eine Verbindung zu Qdrant in Qdrant Cloud herzustellen, müssen Sie die URL und API-Schlüssel in der Methode Qdrant.from_documents angeben.

url = "<---Hier URL des Qdrant-Cloud-Clusters angeben--->"
api_key = "<---Hier API-Schlüssel angeben--->"
qdrant = Qdrant.from_documents(docs, embeddings, url=url, prefer_grpc=True, api_key=api_key, collection_name="meine_dokumente")

Verbindung zu Qdrant in verschiedenen Modi

Qdrant bietet verschiedene Verbindungsmodi, abhängig von Ihren Anforderungen. Ob Sie Qdrant lokal ausführen oder vor Ort oder in der Cloud bereitstellen möchten, es stehen Optionen zur Verfügung, die Ihren Bedürfnissen entsprechen.

Lokaler Modus mit In-Memory-Speicher

Im lokalen Modus können Sie Qdrant ohne Qdrant-Server ausführen. Dies ist nützlich für Test- und Debugging-Zwecke oder wenn Sie nur eine geringe Anzahl von Vektoren speichern müssen. In diesem Modus werden die Einbettungen vollständig im Arbeitsspeicher gehalten und gehen verloren, wenn der Client zerstört wird.

Um sich im lokalen Modus mit In-Memory-Speicher mit Qdrant zu verbinden, können Sie den folgenden Code verwenden:

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"
)

Lokaler Modus mit Festplattenspeicher

Wenn Sie die Vektoren im lokalen Modus lieber auf der Festplatte persistent speichern möchten, können Sie einen Pfad angeben, an dem die Vektoren gespeichert werden. Dadurch können Sie die Vektoren zwischen den Läufen wiederverwenden und vermeiden, jedes Mal von vorne zu beginnen.

Um sich im lokalen Modus mit Festplattenspeicher mit Qdrant zu verbinden, können Sie den folgenden Code verwenden:

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="/path/to/storage", collection_name="my_collection"
)

Bereitstellung eines On-Premise-Servers

Wenn Sie Qdrant vor Ort bereitstellen möchten, entweder mit einem Docker-Container oder mit einer Kubernetes-Bereitstellung mit dem offiziellen Helm-Chart, müssen Sie die URL des Qdrant-Services angeben.

Um sich mit Qdrant in einer On-Premise-Serverbereitstellung zu verbinden, können Sie den folgenden Code verwenden:

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

Wenn Sie Qdrant Cloud verwenden möchten, können Sie sich mit der entsprechenden URL und dem API-Schlüssel verbinden.

Um sich mit Qdrant in Qdrant Cloud zu verbinden, können Sie den folgenden Code verwenden:

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"
)

Durch die Verwendung dieser verschiedenen Verbindungsmodi können Sie Qdrant problemlos in Ihre LangChain-Anwendungen integrieren und von den leistungsstarken Möglichkeiten zur Ähnlichkeitssuche von Vektoren profitieren.

Durchführung von Ähnlichkeitssuchen in der Qdrant-Sammlung

Wenn Sie mit einer Qdrant-Sammlung verbunden sind, können Sie Ähnlichkeitssuchen auf den in der Sammlung gespeicherten Vektoren durchführen. Dies ermöglicht es Ihnen, Vektoren zu finden, die ähnlich zu einem bestimmten Abfragevektor sind.

Um eine Ähnlichkeitssuche durchzuführen, müssen Sie einen Abfragevektor angeben und die Anzahl der nächsten Nachbarn angeben, die Sie abrufen möchten. Qdrant gibt die nächsten Nachbarn zusammen mit ihren Ähnlichkeitswerten zurück.

Hier ein Beispiel, wie man mit Qdrant eine Ähnlichkeitssuche durchführt:

# Abfragevektor
query_vector = [0.1, 0.2, 0.3, 0.4, 0.5]
 
# Anzahl der nächsten Nachbarn, die abgerufen werden sollen
k = 5
 
# Ähnlichkeitssuche durchführen
results = qdrant.search(query_vector, k)

Das results-Objekt enthält die nächsten Nachbarn und ihre Ähnlichkeitswerte. Sie können diese Informationen dann weiterverarbeiten und analysieren.

Nutzung der umfangreichen Filterungsmöglichkeiten von Qdrant

Qdrant bietet umfangreiche Filterungsmöglichkeiten, mit denen Sie Ihre Suchergebnisse basierend auf bestimmten Kriterien verfeinern können. Sie können die Suchergebnisse filtern, indem Sie Bedingungen für die Vektoreigenschaften oder die Payload-Eigenschaften angeben, die den Vektoren zugeordnet sind.

Hier sind einige Beispiele, wie Sie die Filterfunktionen von Qdrant in LangChain verwenden können:

Filtern nach Vektoreigenschaften

# Filtern nach einem bestimmten Attributwert
results = qdrant.search(query_vector, k, filter={"vector_attributes": {"attribute_name": "attribute_value"}})
 
# Filtern nach einem Wertebereich von Attributen
results = qdrant.search(query_vector, k, filter={"vector_attributes": {"attribute_name": {"gte": 10, "lte": 20}}})

Filtern nach Payload-Eigenschaften

# Filtern nach einem bestimmten Payload-Attributwert
results = qdrant.search(query_vector, k, filter={"payload_attributes": {"attribute_name": "attribute_value"}})
 
# Filtern nach einem Wertebereich von Payload-Attributen
results = qdrant.search(query_vector, k, filter={"payload_attributes": {"attribute_name": {"gte": 10, "lte": 20}}})

Diese Filterfunktionen ermöglichen es Ihnen, Ihre Suchergebnisse einfach einzugrenzen und die Vektoren abzurufen, die Ihre spezifischen Kriterien erfüllen.

Abrufen verschiedener Ergebnisse mit Maximal Marginal Relevance (MMR) Suche von Qdrant

Neben der Durchführung von Ähnlichkeitssuchen bietet Qdrant auch die Möglichkeit, verschiedene Ergebnisse unter Verwendung der Maximal Marginal Relevance (MMR) Suche abzurufen. Die MMR-Suche zielt darauf ab, eine Reihe von Dokumenten zu finden, die sowohl relevant als auch vielfältig sind und eine umfassendere Darstellung des Suchraums bieten. Um eine MMR-Suche durchzuführen, müssen Sie einen Abfragevektor, die Anzahl der nächsten Nachbarn, die abgerufen werden sollen, und einen Diversitätsparameter angeben, der den Kompromiss zwischen Relevanz und Diversität steuert.

Hier ist ein Beispiel, wie eine MMR-Suche mit Qdrant durchgeführt wird:

# Abfragevektor
query_vector = [0.1, 0.2, 0.3, 0.4, 0.5]
 
# Anzahl der nächsten Nachbarn, die abgerufen werden sollen
k = 5
 
# Diversitätsparameter
lambda_param = 0.5
 
# MMR-Suche durchführen
results = qdrant.mmr_search(query_vector, k, lambda_param)

Das results-Objekt enthält den vielfältigen Satz der nächsten Nachbarn sowie ihre Ähnlichkeitswerte. Durch Anpassen des Diversitätsparameters können Sie das Gleichgewicht zwischen Relevanz und Diversität in den Suchergebnissen steuern.

Die Verwendung von Qdrant als Retrieval-Tool in LangChain

Qdrant kann als Retrieval-Tool in LangChain sowohl für Kosinus-Ähnlichkeits-Suchen als auch für MMR-Suchen verwendet werden. Durch die Integration von Qdrant in Ihre LangChain-Anwendungen können Sie seine leistungsstarken Suchfunktionen für Vektor-Ähnlichkeit nutzen, um die Leistung und Genauigkeit der Recherche zu verbessern.

Um Qdrant als Retrieval-Tool für Kosinus-Ähnlichkeits-Suchen zu verwenden, können Sie den folgenden Code verwenden:

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

Um Qdrant als Retrieval-Tool für MMR-Suchen zu verwenden, können Sie den folgenden Code verwenden:

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

Durch die Nutzung von Qdrant als Retrieval-Tool in LangChain können Sie die Funktionen für die Vektor-Ähnlichkeitssuche problemlos in Ihre auf Sprachmodellen basierenden Anwendungen integrieren.

Fazit

In diesem Artikel haben wir untersucht, wie man eine Verbindung zu Qdrant in verschiedenen Modi herstellt, Ähnlichkeitssuchen in Qdrant-Sammlungen durchführt, Qdrants umfangreiche Filterfunktionen nutzt, diverse Ergebnisse mithilfe von MMR-Suche abruft und Qdrant als Retrieval-Tool in LangChain verwendet. Durch die Integration von Qdrant in Ihre LangChain-Anwendungen können Sie dessen leistungsstarken Vektor-Ähnlichkeitssuchmotor nutzen, um die Leistung und Genauigkeit der Recherche zu verbessern.

Anakin AI - The Ultimate No-Code AI App Builder