Vernetzen Sie sich mit uns

Künstliche Intelligenz

LlamaIndex: Erweitern Sie Ihre LLM-Anwendungen ganz einfach mit benutzerdefinierten Daten

mm
LamaIndex

Große Sprachmodelle (LLMs) wie die GPT-Reihe von OpenAI wurden anhand einer Vielzahl öffentlich zugänglicher Daten trainiert und zeigten bemerkenswerte Fähigkeiten bei der Textgenerierung, Zusammenfassung, Beantwortung von Fragen und Planung. Trotz ihrer Vielseitigkeit dreht sich eine häufig gestellte Frage um die nahtlose Integration dieser Modelle mit benutzerdefinierten, privaten oder proprietären Daten.

Unternehmen und Einzelpersonen werden mit einzigartigen und benutzerdefinierten Daten überschwemmt, die häufig in verschiedenen Anwendungen wie Notion, Slack und Salesforce gespeichert oder in persönlichen Dateien gespeichert sind. Um LLMs für diese spezifischen Daten zu nutzen, wurden verschiedene Methoden vorgeschlagen und experimentiert.

Feintuning stellt einen solchen Ansatz dar. Dabei werden die Gewichte des Modells angepasst, um Erkenntnisse aus bestimmten Datensätzen zu integrieren. Dieser Prozess ist jedoch nicht ohne Herausforderungen. Er erfordert einen erheblichen Aufwand bei der Datenaufbereitung, verbunden mit einem schwierigen Optimierungsverfahren, das ein gewisses Maß an Fachwissen im Bereich maschinelles Lernen erfordert. Darüber hinaus können die finanziellen Auswirkungen erheblich sein, insbesondere bei großen Datensätzen.

Als Alternative hat sich das Lernen im Kontext herauskristallisiert, bei dem die Erstellung von Eingaben und Eingabeaufforderungen Priorität hat, um dem LLM den notwendigen Kontext für die Generierung präziser Ergebnisse bereitzustellen. Dieser Ansatz verringert die Notwendigkeit einer umfassenden Modellumschulung und bietet eine effizientere und zugänglichere Möglichkeit zur Integration privater Daten.

Der Nachteil dabei ist jedoch, dass es auf die Fähigkeiten und das Fachwissen des Benutzers angewiesen ist schnelles EngineeringDarüber hinaus ist kontextbezogenes Lernen nicht immer so präzise oder zuverlässig wie Feinabstimmung, insbesondere bei hochspezialisierten oder technischen Daten. Das Vortraining des Modells anhand einer breiten Palette von Internettexten garantiert kein Verständnis von Fachjargon oder Kontext, was zu ungenauen oder irrelevanten Ergebnissen führen kann. Dies ist besonders problematisch, wenn die privaten Daten aus einem Nischenbereich oder einer Nischenbranche stammen.

Darüber hinaus ist die Menge an Kontext, die in einer einzigen Eingabeaufforderung bereitgestellt werden kann, begrenzt, und die Leistung des LLM kann sich mit zunehmender Komplexität der Aufgabe verschlechtern. Hinzu kommt die Herausforderung des Datenschutzes und der Datensicherheit, da die in der Eingabeaufforderung bereitgestellten Informationen möglicherweise sensibel oder vertraulich sein könnten.

Während die Community diese Techniken erforscht, entwickeln sich Tools wie LamaIndex erregen jetzt Aufmerksamkeit.

Lama-Index

Lama-Index

Es wurde von gestartet Jerry Liu, ein ehemaliger Uber-Forscher. Beim Experimentieren mit GPT-3 im vergangenen Herbst bemerkte Liu die Einschränkungen des Modells im Umgang mit privaten Daten, wie beispielsweise persönlichen Dateien. Diese Beobachtung führte zum Start des Open-Source-Projekts LlamaIndex.

Die Initiative hat Investoren angezogen und sich gesichert 8.5 Mio. US$ in einer kürzlich durchgeführten Seed-Finanzierungsrunde.

LlamaIndex erleichtert die Erweiterung von LLMs mit benutzerdefinierten Daten und schließt die Lücke zwischen vorab trainierten Modellen und benutzerdefinierten Datenanwendungsfällen. Über LlamaIndex können Benutzer ihre eigenen Daten mit LLMs nutzen und so die Wissensgenerierung und Argumentation mit personalisierten Erkenntnissen ermöglichen.

Benutzer können LLMs nahtlos ihre eigenen Daten bereitstellen und so eine Umgebung schaffen, in der die Wissensgenerierung und -begründung zutiefst personalisiert und aufschlussreich ist. LlamaIndex beseitigt die Einschränkungen des kontextbezogenen Lernens, indem es eine benutzerfreundlichere und sicherere Plattform für die Dateninteraktion bereitstellt und sicherstellt, dass selbst Personen mit begrenzten Fachkenntnissen im Bereich maschinelles Lernen das volle Potenzial von LLMs mit ihren privaten Daten nutzen können.

High-Level-Konzepte und einige Einblicke

1. Retrieval Augmented Generation (RAG):

LlamaIndex RAG

LlamaIndex RAG

RAG ist ein zweistufiger Prozess, der LLMs mit benutzerdefinierten Daten verbindet und so die Fähigkeit des Modells verbessert, präzisere und fundiertere Antworten zu liefern. Der Prozess umfasst:

  • Indizierungsphase: Dies ist die Vorbereitungsphase, in der der Grundstein für die Erstellung einer Wissensdatenbank gelegt wird.
LlamaIndex-INDIZES

LlamaIndex-Indizierung

  • Abfragephase: Hier wird die Wissensdatenbank nach relevantem Kontext durchsucht, um LLMs bei der Beantwortung von Anfragen zu unterstützen.
LlamaIndex-ABFRAGESTUFE

LlamaIndex-Abfragephase

Indexierungsreise mit LlamaIndex:

  • Daten-SteckverbinderStellen Sie sich Datenkonnektoren als den Pass Ihrer Daten zu LlamaIndex vor. Sie helfen beim Importieren von Daten aus verschiedenen Quellen und Formaten und kapseln sie in einer vereinfachten „Dokument“-Darstellung. Datenkonnektoren finden Sie in LlamaHub, einem Open-Source-Repository mit Datenladern. Diese Lader sind für eine einfache Integration konzipiert und ermöglichen Plug-and-Play mit jeder LlamaIndex-Anwendung.
Lama-Hub

LlamaIndex-Hub (https://llamahub.ai/)

  • Dokumente / Knoten: Ein Dokument ist wie ein allgemeiner Koffer, der verschiedene Datentypen enthalten kann – sei es ein PDF, eine API-Ausgabe oder Datenbankeinträge. Andererseits ist ein Knoten ein Ausschnitt oder „Stück“ aus einem Dokument, angereichert mit Metadaten und Beziehungen zu anderen Knoten, wodurch eine solide Grundlage für den späteren präzisen Datenabruf gewährleistet wird.
  • Datenindizes: Nach der Datenaufnahme unterstützt LlamaIndex die Indizierung dieser Daten in ein abrufbares Format. Im Hintergrund zerlegt es Rohdokumente in Zwischendarstellungen, berechnet Vektoreinbettungen und leitet Metadaten ab. Unter den Indizes ist „VectorStoreIndex“ häufig die erste Wahl.

Arten von Indizes in LlamaIndex: Schlüssel zu organisierten Daten

LlamaIndex bietet verschiedene Indextypen für unterschiedliche Anforderungen und Anwendungsfälle. Der Kern dieser Indizes sind die oben beschriebenen „Knoten“. Versuchen wir, die LlamaIndex-Indizes mit ihren Mechanismen und Anwendungen zu verstehen.

1. Listenindex:

  • Mechanismus: Ein Listenindex richtet Knoten nacheinander wie eine Liste aus. Nach der Aufteilung der Eingabedaten in Knoten werden diese linear angeordnet und können entweder sequentiell oder über Schlüsselwörter oder Einbettungen abgefragt werden.
  • Vorteil: Dieser Indextyp glänzt, wenn sequentielle Abfragen erforderlich sind. LlamaIndex stellt die Nutzung Ihrer gesamten Eingabedaten sicher, auch wenn diese das Token-Limit des LLM überschreiten, indem Text von jedem Knoten intelligent abgefragt und die Antworten beim Navigieren in der Liste verfeinert werden.

2. Vector Store-Index:

  • Mechanismus: Hier verwandeln sich Knoten in Vektoreinbettungen, die entweder lokal oder in einer speziellen Vektordatenbank wie gespeichert werden Milvus. Bei einer Abfrage ruft es die top_k ähnlichsten Knoten ab und leitet sie an den Antwortsynthesizer weiter.
  • Vorteil: Wenn Ihr Workflow auf einem Textvergleich zur semantischen Ähnlichkeit mittels Vektorsuche basiert, kann dieser Index verwendet werden.

3. Baumindex:

  • Mechanismus: In einem Baumindex entwickeln sich die Eingabedaten zu einer Baumstruktur, die von unten nach oben aus Blattknoten (den ursprünglichen Datenblöcken) aufgebaut wird. Übergeordnete Knoten entstehen als Zusammenfassungen von Blattknoten, die mit GPT erstellt wurden. Während einer Abfrage kann der Baumindex vom Wurzelknoten zu den Blattknoten wechseln oder Antworten direkt von ausgewählten Blattknoten erstellen.
  • Vorteil: Mit einem Baumindex wird die Abfrage langer Textabschnitte effizienter und das Extrahieren von Informationen aus verschiedenen Textsegmenten wird vereinfacht.

4. Keyword-Index:

  • Mechanismus: Eine Zuordnung von Schlüsselwörtern zu Knoten bildet den Kern eines Schlüsselwortindex. Bei der Abfrage werden Schlüsselwörter aus der Abfrage ausgewählt und nur die zugeordneten Knoten ins Rampenlicht gerückt.
  • Vorteil: Wenn Sie eindeutige Benutzeranfragen haben, kann ein Schlüsselwortindex verwendet werden. Beispielsweise wird die Durchsicht von Gesundheitsdokumenten effizienter, wenn man sich nur auf Dokumente konzentriert, die für COVID-19 relevant sind.

LlamaIndex installieren

Die Installation von LlamaIndex ist ein unkomplizierter Vorgang. Sie können wählen, ob Sie es entweder direkt von Pip oder von der Quelle installieren möchten. (Stellen Sie sicher, dass Python auf Ihrem System installiert ist, oder verwenden Sie Google Colab.)

1. Installation von Pip:

  • Führen Sie den folgenden Befehl aus:
    pip install llama-index
  • Hinweis: Während der Installation lädt LlamaIndex möglicherweise lokale Dateien für bestimmte Pakete wie NLTK und HuggingFace herunter und speichert sie. Um ein Verzeichnis für diese Dateien anzugeben, verwenden Sie die Umgebungsvariable „LLAMA_INDEX_CACHE_DIR“.

2. Installation aus der Quelle:

  • Klonen Sie zunächst das LlamaIndex-Repository von GitHub:
    git clone https://github.com/jerryjliu/llama_index.git
  • Navigieren Sie nach dem Klonen zum Projektverzeichnis.
  • Für die Verwaltung von Paketabhängigkeiten benötigen Sie Poetry.
  • Erstellen Sie nun eine virtuelle Umgebung mit Poetry:
    poetry shell
  • Installieren Sie abschließend die Kernpaketanforderungen mit:
    poetry install

Einrichten Ihrer Umgebung für LlamaIndex

1. OpenAI-Setup:

  • Standardmäßig verwendet LlamaIndex OpenAIs gpt-3.5-turbo zur Textgenerierung und text-embedding-ada-002 zum Abrufen und Einbetten.
  • Um dieses Setup zu verwenden, benötigen Sie einen OPENAI_API_KEY. Holen Sie sich eines, indem Sie sich auf der OpenAI-Website registrieren und ein neues API-Token erstellen.
  • Sie haben die Flexibilität, das zugrunde liegende Large Language Model (LLM) an Ihre Projektanforderungen anzupassen. Abhängig von Ihrem LLM-Anbieter benötigen Sie möglicherweise zusätzliche Umgebungsschlüssel und Token.

2. Einrichtung der lokalen Umgebung:

  • Wenn Sie OpenAI lieber nicht verwenden möchten, wechselt LlamaIndex automatisch zu lokalen Modellen – LlamaCPP sowie llama2-chat-13B zur Textgenerierung und BAAI/bge-small-en zum Abrufen und Einbetten.
  • So verwenden Sie LlamaCPPBefolgen Sie die mitgelieferte Installationsanleitung. Stellen Sie sicher, dass Sie das installieren llama-cpp-python Paket, idealerweise zur Unterstützung Ihrer GPU kompiliert. Dieses Setup wird etwa 11.5 GB Speicher für CPU und GPU beanspruchen.
  • Für lokale Einbettungen führen Sie aus pip install sentence-transformers. Dieses lokale Setup benötigt etwa 500 MB Speicher.

Mit diesen Setups können Sie Ihre Umgebung individuell anpassen, um entweder die Leistungsfähigkeit von OpenAI zu nutzen oder Modelle lokal auszuführen, passend zu Ihren Projektanforderungen und Ressourcen.

Ein einfacher Anwendungsfall: Abfragen von Webseiten mit LlamaIndex und OpenAI

Hier ist ein einfaches Python-Skript, das zeigt, wie Sie eine Webseite nach bestimmten Erkenntnissen abfragen können:

!pip install llama-index html2text

import os
from llama_index import VectorStoreIndex, SimpleWebPageReader

# Enter your OpenAI key below:
os.environ["OPENAI_API_KEY"] = ""

# URL you want to load into your vector store here:
url = "http://www.paulgraham.com/fr.html"

# Load the URL into documents (multiple documents possible)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])

# Create vector store from documents
index = VectorStoreIndex.from_documents(documents)

# Create query engine so we can ask it questions:
query_engine = index.as_query_engine()

# Ask as many questions as you want against the loaded data:
response = query_engine.query("What are the 3 best advise by Paul to raise money?")
print(response)
The three best pieces of advice by Paul to raise money are:
1. Start with a low number when initially raising money. This allows for flexibility and increases the chances of raising more funds in the long run.
2. Aim to be profitable if possible. Having a plan to reach profitability without relying on additional funding makes the startup more attractive to investors.
3. Don't optimize for valuation. While valuation is important, it is not the most crucial factor in fundraising. Focus on getting the necessary funds and finding good investors instead.
Google Colab Lama-Index-Notizbuch

Google Colab Lama-Index-Notizbuch

Mit diesem Skript haben Sie ein leistungsstarkes Tool erstellt, mit dem Sie durch einfaches Stellen einer Frage bestimmte Informationen aus einer Webseite extrahieren können. Dies ist nur ein kleiner Vorgeschmack darauf, was mit LlamaIndex und OpenAI bei der Abfrage von Webdaten erreicht werden kann.

LlamaIndex vs. Langchain: Auswahl basierend auf Ihrem Ziel

Sie haben die Wahl zwischen LlamaIndex und Langkette hängt vom Ziel Ihres Projekts ab. Wenn Sie ein intelligentes Suchtool entwickeln möchten, ist LlamaIndex eine gute Wahl, da es sich hervorragend als intelligenter Speichermechanismus für den Datenabruf eignet. Wenn Sie hingegen ein System wie ChatGPT mit Plug-In-Funktionen erstellen möchten, ist Langchain die richtige Wahl. Es ermöglicht nicht nur mehrere Instanzen von ChatGPT und LlamaIndex, sondern erweitert auch die Funktionalität durch die Erstellung von Multitasking-Agenten. Mit Langchain können Sie beispielsweise Agenten erstellen, die Python-Code ausführen und gleichzeitig eine Google-Suche durchführen können. Kurz gesagt: Während LlamaIndex sich durch die Datenverarbeitung auszeichnet, orchestriert Langchain mehrere Tools, um eine ganzheitliche Lösung zu liefern.

LlamaIndex-Logo-Artwork, erstellt mit Midjourney

LlamaIndex-Logo-Grafik erstellt mit Zwischendurch

Ich habe die letzten fünf Jahre damit verbracht, in die faszinierende Welt des maschinellen Lernens und des Deep Learning einzutauchen. Meine Leidenschaft und mein Fachwissen haben dazu geführt, dass ich an über 50 verschiedenen Software-Engineering-Projekten mitgewirkt habe, mit besonderem Schwerpunkt auf KI/ML. Meine anhaltende Neugier hat mich auch zur Verarbeitung natürlicher Sprache geführt, einem Bereich, den ich gerne weiter erforschen möchte.