KI-Modelle und Plattformen

LlamaIndex: Erweitern Sie Ihre LLM-Anwendungen mithilfe von benutzerdefinierten Daten leicht

mm
Unite.AI zu deinen bevorzugten Quellen auf Google hinzufügen

Große Sprachmodelle (LLMs) wie OpenAIs GPT-Serie wurden auf eine vielfältige Palette öffentlich zugänglicher Daten trainiert und zeigen bemerkenswerte Fähigkeiten bei der Textgenerierung, Zusammenfassung, Fragebeantwortung 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 von einzigartigen und benutzerdefinierten Daten überflutet, die oft in verschiedenen Anwendungen wie Notion, Slack und Salesforce (CRM ) oder in persönlichen Dateien gespeichert sind. Um LLMs für diese spezifischen Daten zu nutzen, wurden mehrere Methoden vorgeschlagen und experimentiert.

Feinabstimmung stellt einen solchen Ansatz dar, bei dem die Gewichte des Modells angepasst werden, um Wissen aus bestimmten Datensätzen zu integrieren. Dieser Prozess ist jedoch nicht ohne Herausforderungen. Er erfordert erhebliche Anstrengungen bei der Datenvorbereitung, verbunden mit einem schwierigen Optimierungsverfahren, das ein bestimmtes Maß an maschineller Lernkompetenz erfordert. Darüber hinaus können die finanziellen Auswirkungen erheblich sein, insbesondere bei der Arbeit mit großen Datensätzen.

Das kontextbasierte Lernen hat sich als Alternative herausgebildet, bei der der Schwerpunkt auf der Gestaltung von Eingaben und Prompts liegt, um dem LLM den notwendigen Kontext für die Generierung genauer Ausgaben zu liefern. Dieser Ansatz mildert die Notwendigkeit einer umfassenden Modellneukonfiguration, indem er einen effizienteren und zugänglicheren Weg zur Integration privater Daten bietet.

Aber der Nachteil hierfür ist seine Abhängigkeit von den Fähigkeiten und dem Fachwissen des Benutzers in Prompt-Engineering. Zusätzlich kann das kontextbasierte Lernen nicht immer so präzise oder zuverlässig sein wie die Feinabstimmung, insbesondere bei der Arbeit mit hochspezialisierten oder technischen Daten. Die Vorabtrainierung des Modells auf einem breiten Spektrum an Internettexten garantiert nicht unbedingt ein Verständnis spezifischer Fachjargons oder Kontexte, was zu ungenauen oder irrelevanten Ausgaben führen kann. Dies ist besonders problematisch, wenn die privaten Daten aus einem Nischenbereich oder einer Branche stammen.

Darüber hinaus ist die Menge an Kontext, die in einem einzelnen Prompt bereitgestellt werden kann, begrenzt, und die Leistung des LLMs kann sich verschlechtern, wenn die Komplexität der Aufgabe zunimmt. Es gibt auch die Herausforderung der Privatsphäre und der Datensicherheit, da die in dem Prompt bereitgestellten Informationen potenziell sensibel oder vertraulich sein können.

Während die Gemeinschaft diese Techniken erforscht, gewinnen Tools wie LlamaIndex an Aufmerksamkeit.

Llama Index

Llama Index

Es wurde von Jerry Liu gegründet, einem ehemaligen Forschungswissenschaftler bei Uber. Während er im letzten Herbst mit GPT-3 experimentierte, stellte Liu die Einschränkungen des Modells bei der Verarbeitung privater Daten wie persönlicher Dateien fest. Diese Beobachtung führte zum Start des Open-Source-Projekts LlamaIndex.

Die Initiative hat Investoren angezogen und 8,5 Millionen Dollar in einer jüngsten Seed-Finanzierungsrunde gesichert.

LlamaIndex ermöglicht die Erweiterung von LLMs mit benutzerdefinierten Daten, indem es die Lücke zwischen vorgefertigten Modellen und benutzerdefinierten Datenanwendungsfällen schließt. Mit LlamaIndex können Benutzer ihre eigenen Daten mit LLMs nutzen, wodurch Wissensgenerierung und Argumentation mit personalisierten Erkenntnissen ermöglicht werden.

Benutzer können LLMs nahtlos mit ihren eigenen Daten versorgen, was eine Umgebung schafft, in der Wissensgenerierung und Argumentation tief personalisiert und erkenntnisreich sind. LlamaIndex mildert die Einschränkungen des kontextbasierten Lernens, indem es eine benutzerfreundlichere und sicherere Plattform für die Datennutzung bietet, sodass auch Benutzer mit begrenzten maschinellen Lernkenntnissen das volle Potenzial von LLMs mit ihren privaten Daten nutzen können.

Hohe Konzepte und Einblicke

1. Retrieval Augmented Generation (RAG):

LlamaIndex RAG

LlamaIndex RAG

RAG ist ein zweistufiger Prozess, der darauf abzielt, LLMs mit benutzerdefinierten Daten zu koppeln, um die Fähigkeit des Modells zu verbessern, präzisere und informiertere Ausgaben zu liefern. Der Prozess umfasst:

  • Indexierungsphase: Dies ist die Vorbereitungsphase, in der die Grundlage für die Erstellung einer Wissensbasis gelegt wird.
LlamaIndex Indexing

LlamaIndex Indexing

  • Abfragen-Phase: Hier wird die Wissensbasis nach relevantem Kontext durchsucht, um LLMs bei der Beantwortung von Abfragen zu unterstützen.
LlamaIndex Query Stage

LlamaIndex Query Stage

Indexierungsreise mit LlamaIndex:

  • Daten-Connector: Denken Sie an Daten-Connector als das “Reisepass” Ihrer Daten zu LlamaIndex. Sie helfen dabei, Daten aus verschiedenen Quellen und Formaten zu importieren und in eine einfache “Dokument”-Darstellung zu überführen. Daten-Connector können in LlamaHub gefunden werden, einem Open-Source-Repository, das mit Daten-Loadern gefüllt ist. Diese Loader sind für eine einfache Integration konzipiert und bieten ein Plug-and-Play-Erlebnis mit jeder LlamaIndex-Anwendung.
Llama hub

LlamaIndex hub (https://llamahub.ai/)

  • Dokumente / Knoten: Ein Dokument ist wie ein generischer Koffer, der verschiedene Datentypen aufnehmen kann – sei es ein PDF, API-Ausgaben oder Datenbankeinträge. Andererseits ist ein Knoten ein Ausschnitt oder “Chunk” aus einem Dokument, angereichert mit Metadaten und Beziehungen zu anderen Knoten, was eine solide Grundlage für präzise Datenabruf später bietet.
  • Daten-Indexe: Nach der Datenaufnahme hilft LlamaIndex dabei, diese Daten in eine abrufbare Form zu indexieren. Im Hintergrund zerlegt es rohe Dokumente in Zwischenrepräsentationen, berechnet Vektor-Embeddings und leitet Metadaten ab. Unter den Indexen ist “VectorStoreIndex” oft die bevorzugte Wahl.

Typen von Indexen in LlamaIndex: Schlüssel zu organisierten Daten

LlamaIndex bietet verschiedene Arten von Indexen, jeweils für unterschiedliche Bedürfnisse und Anwendungsfälle. Im Kern dieser Indizes liegen “Knoten” wie oben diskutiert. Lassen Sie uns LlamaIndex-Indizes mit ihrer Mechanik und ihren Anwendungen verstehen.

1. Listen-Index:

  • Mechanismus: Ein Listen-Index ordnet Knoten sequenziell wie eine Liste an. Nachdem die Eingabedaten in Knoten aufgeteilt wurden, werden sie linear angeordnet, bereit, um sequenziell oder über Schlüsselwörter oder Embeddings abgefragt zu werden.
  • Vorteil: Diese Indexart glänzt, wenn die Notwendigkeit für sequenzielle Abfragen besteht. LlamaIndex stellt sicher, dass Ihre gesamten Eingabedaten genutzt werden, selbst wenn sie die Token-Grenze des LLMs überschreiten, indem es clever Text aus jedem Knoten abfragt und Antworten verfeinert, während es die Liste hinunter navigiert.

2. Vektor-Speicher-Index:

  • Mechanismus: Hier werden Knoten in Vektor-Embeddings umgewandelt, die entweder lokal oder in einer spezialisierten Vektor-Datenbank wie Milvus gespeichert werden. Wenn abgefragt, werden die top_k ähnlichsten Knoten abgerufen und an den Antwort-Synthesizer geleitet.
  • Vorteil: Wenn Ihre Arbeitsabläufe von Textvergleich für semantische Ähnlichkeit über Vektorsuche abhängen, kann dieser Index verwendet werden.

3. Baum-Index:

  • Mechanismus: In einem Baum-Index entwickeln sich die Eingabedaten zu einer Baumstruktur, die von unten nach oben aus Blattknoten (den ursprünglichen Daten-Chunks) aufgebaut wird. Elternknoten entstehen als Zusammenfassungen von Blattknoten, die mit GPT erstellt werden. Bei einer Abfrage kann der Baum-Index vom Wurzelknoten zu Blattknoten hinabsteigen oder Antworten direkt aus ausgewählten Blattknoten konstruieren.
  • Vorteil: Mit einem Baum-Index wird die Abfrage langer Text-Chunks effizienter, und die Informationsgewinnung aus verschiedenen Textsegmenten wird vereinfacht.

4. Schlüsselwort-Index:

  • Mechanismus: Eine Karte von Schlüsselwörtern zu Knoten bildet den Kern eines Schlüsselwort-Index. Wenn abgefragt, werden Schlüsselwörter aus der Abfrage ausgewählt, und nur die zugeordneten Knoten werden in den Vordergrund gerückt.
  • Vorteil: Wenn Sie klare Benutzerabfragen haben, kann ein Schlüsselwort-Index verwendet werden. Zum Beispiel wird das Durchsuchen von Gesundheitsdokumenten effizienter, wenn Sie sich nur auf Dokumente konzentrieren, die für COVID-19 relevant sind.

Installation von LlamaIndex

Die Installation von LlamaIndex ist ein einfacher Prozess. Sie können sich entscheiden, es direkt über Pip oder aus dem Quellcode zu installieren. (Stellen Sie sicher, dass Python auf Ihrem System installiert ist oder Sie Google Colab verwenden können)

1. Installation über Pip:

  • Führen Sie den folgenden Befehl aus:
    pip install llama-index
  • Hinweis: Während der Installation kann LlamaIndex bestimmte Pakete wie NLTK und HuggingFace herunterladen und lokale Dateien speichern. Um ein Verzeichnis für diese Dateien anzugeben, verwenden Sie die Umgebungsvariable “LLAMA_INDEX_CACHE_DIR”.

2. Installation aus dem Quellcode:

  • Erstellen Sie zunächst das LlamaIndex-Repository von GitHub:
    git clone https://github.com/jerryjliu/llama_index.git
  • Nach dem Klonen navigieren Sie zum Projektverzeichnis.
  • Sie benötigen Poetry für die Verwaltung von Paket-Abhängigkeiten.
  • Erstellen Sie nun eine virtuelle Umgebung mit Poetry:
    poetry shell
  • Installieren Sie schließlich die Kernpaket-Anforderungen mit:
    poetry install

Einrichten Ihrer Umgebung für LlamaIndex

1. OpenAI-Setup:

  • Standardmäßig verwendet LlamaIndex OpenAIs gpt-3.5-turbo für die Textgenerierung und text-embedding-ada-002 für Abruf und Embeddings.
  • Um diese Konfiguration zu verwenden, benötigen Sie einen OPENAI_API_KEY. Erhalten Sie einen, indem Sie sich auf der OpenAI-Website registrieren und einen neuen 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 Umgebungs-Schlüssel und Token.

2. Lokale Umgebungs-Einrichtung:

  • Wenn Sie OpenAI nicht verwenden möchten, wechselt LlamaIndex automatisch zu lokalen Modellen – LlamaCPP und llama2-chat-13B für die Textgenerierung und BAAI/bge-small-en für Abruf und Embeddings.
  • Um LlamaCPP zu verwenden, folgen Sie der bereitgestellten Installationsanleitung. Stellen Sie sicher, dass Sie das llama-cpp-python-Paket installieren, idealerweise kompiliert, um Ihre GPU zu unterstützen. Diese Einrichtung wird etwa 11,5 GB Speicher über CPU und GPU hinweg verwenden.
  • Für lokale Embeddings führen Sie pip install sentence-transformers aus. Diese lokale Einrichtung wird etwa 500 MB Speicher verwenden.

Mit diesen Einrichtungen können Sie Ihre Umgebung anpassen, um entweder die Leistung von OpenAI zu nutzen oder Modelle lokal auszuführen, abgestimmt auf Ihre Projektanforderungen und Ressourcen.

Ein einfaches Anwendungsbeispiel: Abfragen von Webseiten mit LlamaIndex und OpenAI

Hier ist ein einfaches Python-Skript, um zu demonstrieren, wie Sie eine Webseite für spezifische Erkenntnisse abfragen können:

!pip install llama-index html2text


<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>

<p># Geben Sie Ihren OpenAI-Schlüssel ein:
os.environ["OPENAI_API_KEY"] = ""</p>

<p># URL, die Sie in Ihren Vektor-Speicher laden möchten:
url = "http://www.paulgraham.com/fr.html"</p>

<p># Laden Sie die URL in Dokumente (mehrere Dokumente möglich)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>

<p># Erstellen Sie einen Vektor-Speicher aus den Dokumenten
index = VectorStoreIndex.from_documents(documents)</p>

<p># Erstellen Sie einen Abfrage-Engine, um Fragen zu stellen
query_engine = index.as_query_engine()</p>

<p># Stellen Sie so viele Fragen wie Sie möchten an die geladenen Daten:
response = query_engine.query("Was sind die 3 besten Ratschläge von Paul, um Geld aufzubringen?")
print(response)
Die drei besten Ratschläge von Paul, um Geld aufzubringen, sind:
1. Beginnen Sie mit einer niedrigen Zahl, wenn Sie zunächst Geld aufbringen. Dies ermöglicht Flexibilität und erhöht die Chancen, in der langen Frist mehr Geld aufzubringen.
2. Zielen Sie darauf ab, rentabel zu sein, wenn möglich. Ein Plan, der darauf abzielt, ohne weitere Finanzierung rentabel zu sein, macht das Startup für Investoren attraktiver.
3. Optimieren Sie nicht für Bewertung. Während Bewertung wichtig ist, ist sie nicht der wichtigste Faktor bei der Finanzierung. Konzentrieren Sie sich darauf, die notwendigen Mittel zu beschaffen und gute Investoren zu finden.
Google Colab Llama Index Notebook

Google Colab Llama Index Notebook

Mit diesem Skript haben Sie ein leistungsfähiges Werkzeug erstellt, um spezifische Informationen von einer Webseite zu extrahieren, indem Sie einfach eine Frage stellen. Dies ist nur ein Blick auf das, was mit LlamaIndex und OpenAI bei der Abfrage von Webdaten erreicht werden kann.

LlamaIndex vs Langchain: Auswahl basierend auf Ihrem Ziel

Ihre Wahl zwischen LlamaIndex und Langchain hängt von Ihrem Projektziel ab. Wenn Sie ein intelligentes Suchtool entwickeln möchten, ist LlamaIndex eine solide Wahl, da es als intelligentes Speichermechanismus für Datenabruf hervorragt. Andererseits, wenn Sie ein System wie ChatGPT mit Plugin-Fähigkeiten erstellen möchten, ist Langchain Ihre Wahl. Es ermöglicht nicht nur mehrere Instanzen von ChatGPT und LlamaIndex, sondern erweitert auch die Funktionalität, indem es die Konstruktion von Multi-Task-Agents ermöglicht. Mit Langchain können Sie beispielsweise Agents erstellen, die Python-Code ausführen und gleichzeitig eine Google-Suche durchführen. Kurz gesagt, während LlamaIndex bei der Datenverwaltung hervorragt, orchestriert Langchain mehrere Tools, um eine umfassende Lösung zu liefern.

LlamaIndex Logo Artwork created using Midjourney

LlamaIndex Logo Artwork created using Midjourney

Ich habe die letzten fünf Jahre damit verbracht, mich in die faszinierende Welt des Machine Learning und Deep Learning zu vertiefen. Mein Engagement und meine Expertise haben mich dazu geführt, an über 50 verschiedenen Software-Entwicklungsprojekten mit einem besonderen Fokus auf AI/ML beizutragen. Meine anhaltende Neugier hat mich auch zum Bereich der Natural Language Processing hingezogen, einem Feld, das ich weiter erforschen möchte.