paint-brush
Verbesserung von Unternehmens-LLMs mit Retrieval-Augmented Generation (RAG) und Vector-Datenbankintegrationvon@vpenikal
4,045 Lesungen
4,045 Lesungen

Verbesserung von Unternehmens-LLMs mit Retrieval-Augmented Generation (RAG) und Vector-Datenbankintegration

Zu lang; Lesen

In diesem Blog wird die Integration von Retrieval-Augmented Generation (RAG) mit Vektordatenbanken, insbesondere Milvus, untersucht, um Language Learning Models (LLMs) in Unternehmensanwendungen zu verbessern. Es behandelt die Herausforderungen von LLMs, stellt RAG- und Vektordatenbanken vor und bietet praktische Beispiele und Tutorials. Der Blog beschreibt detailliert die Einrichtung einer lokalen Umgebung für RAG und Milvus, einschließlich Installation und Konfiguration, und schließt mit dem erheblichen Potenzial der Kombination dieser Technologien, um KI-gesteuerte Reaktionen und das Kontextverständnis in KI-Anwendungen für Unternehmen zu verbessern.
featured image - Verbesserung von Unternehmens-LLMs mit Retrieval-Augmented Generation (RAG) und Vector-Datenbankintegration
Venkata Karthik Penikalapati HackerNoon profile picture


Verbesserung von LLM-Anwendungen mit kontextsensitiven Technologien

Die Anwendungen großer Sprachmodelle haben in verschiedenen Bereichen einen Wandel bewirkt und eine neue Grenze in der Verarbeitung und dem Verständnis natürlicher Sprache geschaffen. LLMs, die dafür bekannt sind, menschenähnliche Texte zu generieren, haben Chatbots, die Erstellung von Inhalten und sogar komplexe Problemlösungsaufgaben revolutioniert.


Trotz ihrer beeindruckenden Fähigkeiten stehen LLMs jedoch vor erheblichen Herausforderungen, insbesondere im Hinblick auf die Kontexterkennung und die Aufrechterhaltung der Genauigkeit bei längeren Interaktionen. Eine häufige Gefahr ist ihre Neigung zu „ Halluzinationen “, bei denen der generierte Inhalt, obwohl er flüssig ist, in die Ungenauigkeit oder Irrelevanz abdriften kann.


Hier spielen Technologien wie Retrieval-Augmented Generation (RAG) und Vektordatenbanken eine entscheidende Rolle. Durch die Integration von LLMs mit RAG, das relevante Informationen dynamisch aus riesigen Datensätzen abruft, können wir diese Einschränkungen deutlich abmildern. Die Synergie zwischen LLMs und Vektordatenbanken, die strukturierte Vektordaten effizient verarbeiten und abrufen können, verspricht, LLM-Anwendungen ein neues Maß an Tiefe, Kontext und Zuverlässigkeit zu verleihen.


In diesem Blog erwartet die Leser:


  • Umfassende Einblicke in LLM-Herausforderungen : Verständnis der Einschränkungen von LLMs, wie z. B. Kontextbewusstsein und Genauigkeitsprobleme.
  • Einführung in RAG- und Vektordatenbanken : Untersuchung, wie diese Techniken die Nachteile traditioneller LLMs beseitigen.
  • Praktische Demonstrationen und Tutorials : Praktische Beispiele, die die Integration von RAG mit Vektordatenbanken zur Verbesserung von LLM-Anwendungen veranschaulichen.
  • Praxisnahe Anwendungen : Untersuchung, wie diese Integrationen effektiv in Unternehmensumgebungen angewendet werden können.
  • Umsetzbares Wissen für verschiedene Zielgruppen : Egal, ob Sie ein Technikbegeisterter, ein KI-Praktiker oder ein Geschäftsprofi sind, der Blog möchte wertvolle Einblicke und praktisches Wissen liefern.



Retrieval-Augmented Generation (RAG) verstehen

Retrieval-Augmented Generation (RAG) ist ein innovatives Paradigma im Bereich der KI und der Verarbeitung natürlicher Sprache. Durch die Integration des Informationsabrufs in den Sprachgenerierungsprozess stellt es einen bedeutenden Wandel gegenüber herkömmlichen Sprachmodellen dar. Dieser hybride Ansatz verbessert die Fähigkeit von KI-Modellen, Antworten zu generieren, die nicht nur kontextgenau sind, sondern auch mit aktuellem Wissen aus externen Datenquellen angereichert sind.


Die Entstehung von RAG lässt sich auf das Bestreben zurückführen, die Einschränkungen von Standardsprachmodellen wie GPT (Generative Pre-trained Transformer) zu überwinden. Herkömmliche Modelle haben trotz ihrer Fähigkeit, kohärenten Text zu generieren, oft Schwierigkeiten, genaue, faktenbasierte Antworten zu liefern, insbesondere bei Fragen, die spezifisches Echtzeitwissen erfordern.




RAG-Fluss




Hier finden Sie eine Beschreibung der Funktionsweise von Retrieval-Augmented Generation (RAG) mit Integration in eine Vektordatenbank:


  1. Aufnahme und Indizierung : Der Workflow beginnt mit einer umfassenden Wissensdatenbank , die die Grundlage für die Intelligenz des Systems bildet. Bei dieser Wissensdatenbank handelt es sich in der Regel um einen großen Dokumentenkorpus, der die Informationen enthält, die von Benutzern abgefragt werden können. Diese Dokumente können alles sein, von FAQ-Blättern und Artikeln bis hin zu Datenbanken mit strukturierten Informationen. Bevor diese Dokumente verwendet werden können, durchlaufen sie einen Aufnahmeprozess, bei dem sie vorverarbeitet und in Einbettungen umgewandelt werden. Ein Einbettungsmodell – häufig ein hochentwickelter Algorithmus für maschinelles Lernen – wird verwendet, um die Textinformationen in Vektoreinbettungen umzuwandeln. Diese Einbettungen repräsentieren numerisch den semantischen Inhalt der Dokumente in einem mehrdimensionalen Raum, der für Ähnlichkeitsvergleiche optimal ist.


  2. Kundeninteraktion : Alles beginnt damit, dass ein Kunde mit einer Anwendung interagiert und eine Anfrage stellt. Bei dieser Abfrage handelt es sich um eine Informationsanfrage oder eine Frage, deren Beantwortung der Kunde von der KI erwartet.


  3. Abfrageeinbettung : Die Rohkundenanfrage wird dann von einem Einbettungsmodell verarbeitet. Dieses Modell wandelt die Textabfrage in einen Vektor um, bei dem es sich um eine numerische Darstellung handelt, die die semantische Bedeutung der Abfrage in einem hochdimensionalen Raum erfasst.


  4. Vektordatenbanksuche : Der Abfragevektor wird an eine Vektordatenbank gesendet, eine spezielle Datenbank zur Verarbeitung hochdimensionaler Vektordaten. Die Datenbank führt eine Ähnlichkeitssuche durch, um die relevantesten Dokumenteinbettungen abzurufen. Diese Einbettungen stellen vorverarbeitetes Wissen aus einer Wissensdatenbank dar, das in das System aufgenommen wurde.


  5. Kontextabfrage : Die abgerufenen Dokumenteinbettungen werden mit der ursprünglichen Abfrage kombiniert, um eine Eingabeaufforderung zu bilden, die sowohl die Abfrage als auch den relevanten Kontext enthält.


  6. Sprachmodell-Antwortgenerierung : Diese angereicherte Eingabeaufforderung wird dann in ein Sprachlernmodell (Language Learning Model, LLM) eingespeist. Das LLM nutzt den Kontext der abgerufenen Dokumente, um eine Antwort zu generieren, die genau, informativ und kontextuell für die Anfrage des Kunden relevant ist.


  7. Generative Antwort : Schließlich erzeugt das LLM eine generative Antwort, die über die App an den Kunden zurückgesendet wird. Diese Antwort basiert nicht nur auf dem vorab trainierten Wissen des Modells, sondern wird auch durch spezifische Informationen aus der Wissensdatenbank ergänzt, wodurch sie für die Anfrage des Benutzers von hoher Relevanz ist.

Vektordatenbanken

Vektordatenbanken speichern und verwalten Daten, die in numerische Vektorform umgewandelt wurden, häufig durch Prozesse wie das Einbetten von Modellen in maschinelles Lernen. Einbettungen sind numerische Darstellungen von Daten, oft hochdimensionale Vektoren, die die semantischen oder kontextuellen Merkmale der ursprünglichen Eingabe erfassen. Bei Textdaten werden durch Einbettungen Wörter, Sätze oder ganze Dokumente in eine Form umgewandelt, die ein Computer verarbeiten kann. Zur Generierung dieser Einbettungen werden maschinelle Lernmodelle, insbesondere neuronale Netze, verwendet, sodass ähnliche Bedeutungen im Vektorraum nahe beieinander liegen. Diese Datenbanken sind für die effiziente Durchführung von Ähnlichkeitssuchen konzipiert, bei denen Datenpunkte gefunden werden, die einem bestimmten Abfragevektor im Vektorraum am nächsten liegen.



Quelle – https://www.sbert.net/examples/applications/semantic-search/README.html



Hier ist ein tieferer Einblick in den Prozess:


  1. Datenspeicherung : Wenn Dokumente erfasst werden, wandelt ein Einbettungsmodell (z. B. ein neuronales Netzwerk) den Text in einen hochdimensionalen Vektor um. Jeder Vektor repräsentiert die semantische Bedeutung des Dokuments in numerischer Form. Diese Vektoren werden dann in der Vektordatenbank gespeichert.


  2. Indizierung : Um einen schnellen Abruf zu ermöglichen, erstellt die Datenbank einen Index für diese Vektoren mithilfe von Algorithmen, die für hochdimensionale Räume geeignet sind, wie z. B. Inverted File Index (IVF) oder Hierarchical Navigable Small World (HNSW). Die Wahl des Indextyps sorgt für ein ausgewogenes Verhältnis zwischen Geschwindigkeit und Genauigkeit der Suche.


  3. Ähnlichkeitssuche : Wenn eine Abfrage durchgeführt wird, wird diese mithilfe desselben Einbettungsmodells auch in einen Vektor umgewandelt. Die Vektordatenbank verwendet dann den Index, um schnell die Vektoren zu finden, die dem Abfragevektor am ähnlichsten sind. Die Ähnlichkeit wird durch Distanzmetriken wie die euklidische Distanz oder die Kosinusähnlichkeit bestimmt.


Vorteile von Einbettungen :


  1. Semantische Ähnlichkeit : Einbettungen sind so konzipiert, dass semantisch ähnliche Elemente im Vektorraum näher beieinander liegen, sodass Systeme den Kontext und die Bedeutung verstehen können. Beispielsweise können im Bereich der Genomik Genexpressionsdaten als Einbettungen kodiert werden, um Muster aufzudecken, die auf Beziehungen zwischen verschiedenen Genen und Phänotypen hinweisen. Dies kann bei der Identifizierung von Biomarkern für Krankheiten hilfreich sein, die durch herkömmliche Analysen möglicherweise nicht erkennbar sind.


  2. Komplexe Beziehungen : Sie können komplexe Beziehungen und Nuancen in den Daten erfassen, die bei herkömmlichen Darstellungen möglicherweise übersehen werden. Eine praktische Anwendung sehen Empfehlungssysteme, wie sie etwa bei Streaming-Diensten wie Netflix oder Spotify zum Einsatz kommen. Diese Plattformen nutzen Einbettungen, um Benutzerpräferenzen und Inhaltsfunktionen zu verstehen und so Filme oder Songs zu empfehlen, die Ähnlichkeiten mit den vorherigen Entscheidungen eines Benutzers aufweisen. Trotz der Vielfalt der Inhalte ermöglichen Einbettungen differenzierte Empfehlungen, die über Genre oder Künstler hinausgehen und tiefer liegende Muster im Nutzerkonsum berücksichtigen.


  3. Einheitlichkeit : Einbettungen konvertieren unterschiedliche Datentypen in ein einheitliches Vektorformat und vereinfachen so Vorgänge wie Vergleich und Abruf.


Erste Schritte mit Vector DB

Die Erstellung einer lokalen Entwicklungsumgebung für RAG und Vector DB ( Milvus ) umfasst mehrere wichtige Schritte.


Hier ist eine strukturierte Anleitung:


  1. Voraussetzungen :

    • Stellen Sie sicher, dass Python 3.6+ auf Ihrem System installiert ist.

    • Zum Ausführen von Milvus ist Docker erforderlich.


  2. Virtuelle Umgebung :

    • Erstellen Sie eine neue virtuelle Umgebung und nutzen Sie diese:

       python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus


  3. Milvus mit Docker :

  • Rufen Sie das Milvus Docker-Image ab und führen Sie es aus: (Sie können auch andere Vektor-Datenbanken verwenden)

  • Sie können die folgenden Schritte ausführen oder der hier bereitgestellten Anleitung für die ersten Schritte folgen.


     docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest


  • Setup-Daten :

    Versuchen wir nun, einige Beispieldaten herunterzuladen, Einbettungen zu erstellen und sie in eine Sammlung einzufügen.

     import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000]


  • Einbettungen erstellen

     from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions)


  • In Vektor-DB einfügen.

     # connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections)


  • Indizieren Sie die Sammlung.

     from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params )


  • Dokumente abfragen

     query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}")


Sobald wir semantisch ähnliche Dokumente von der Vektordatenbank erhalten, können wir diese Kontext- und Eingabeabfrage an LLMs übergeben, was zu viel besseren Ergebnissen führt, da LLMs jetzt über Kontext verfügen.


Abschluss

Zusammenfassend lässt sich sagen, dass die Integration von RAG mit Vektordatenbanken wie Milvus eine wirksame Lösung für einige der dringendsten Herausforderungen bei LLM-Anwendungen bietet – insbesondere solche, die ein tiefes Kontextverständnis und einen dynamischen Informationsabruf erfordern. Durch die Kombination der generativen Fähigkeiten von LLMs mit der Präzision und Effizienz von Vektordatenbanken können Unternehmen die Relevanz und Genauigkeit von KI-gesteuerten Antworten erheblich verbessern und Benutzern wertvolle und kontextbezogene Interaktionen bieten.


Während die KI immer weiter voranschreitet, stellt die Verschmelzung dieser Technologien nicht nur einen Schritt, sondern einen Sprung nach vorne dar und läutet eine Zukunft ein, in der KI anspruchsvollere, vielfältigere und differenziertere Anwendungen in allen Sektoren unterstützen kann. Dieser Blog bietet Innovatoren und Praktikern die Möglichkeit, mit diesen Tools zu experimentieren und die Grenzen dessen zu erweitern, was im Bereich der KI-Anwendungen für Unternehmen möglich ist.