LlamaIndex ist ein Open-Source-Datenorchestrierungs-Framework für die Erstellung von LLM (Large Language Model)-Anwendungen. LlamaIndex ist in Python und TypeScript verfügbar und nutzt eine Kombination aus Tools und Funktionen, die den Prozess der Kontextanreicherung für Anwendungsfälle der generativen KI (Gen AI) durch eine Retrieval-Augmented (RAG)-Pipeline.
Mit LlamaIndex können Benutzer ihre privaten oder benutzerdefinierten Daten durch Datenintegration und Kontextvergrößerung kuratieren und organisieren.
Bei der Kontexterweiterung werden Daten für das LLM-Kontextfenster bereitgestellt, wodurch LLMs im Wesentlichen mit privaten oder externen Daten erweitert werden.
Weit verbreitete Open-Source-LLMs werden mit großen Mengen öffentlicher Daten trainiert. Diese groß angelegten LLMs helfen, viele reale Probleme zu lösen. Allerdings ist es sehr zeit- und ressourcenaufwendig, sie für einen bestimmten Anwendungsfall zu schulen. Außerdem sind die internen Daten eines Modells nur während der Zeit, in der es vorab trainiert wurde, auf dem neuesten Stand. Je nach Modell ist eine Kontextanreicherung erforderlich, damit die Modelle Echtzeitinformationen über aktuelle Ereignisse widerspiegeln können.
Foundation Models werden immer beliebter, da es sich um flexible, wiederverwendbare KI-Modelle handelt, die auf nahezu jeden Bereich oder jede Aufgabe angewendet werden können. Foundation Models ähnlich der IBM Granite™ Serie werden anhand kuratierter Daten trainiert, aber unabhängig davon, ob das Modell auf einem großen Datensatz oder einem vortrainierten Foundation Model trainiert wird, müssen sie wahrscheinlich auf externen Quellen domänenspezifischer Daten trainiert werden. Dieser Prozess wird durch ein System-Framework erleichtert, das die LLM mit privaten Daten verbindet, um sie an den Anwendungsfall oder das Gesamtziel der Anwendung anzupassen. Der Teil des Anwendungs-Stacks, der die Verbindung von LLMs mit benutzerdefinierten Datenquellen erleichtert, sind Daten-Frameworks wie LlamaIndex.
Die Daten stammen aus vielen Quellen in vielen Formaten; ist es Aufgabe des Daten-Frameworks, die Daten für die Nutzung durch LLMs zu erfassen, zu transformieren und zu organisieren. Daten sind oft isoliert und unstrukturiert. Um sie zu erhalten und zu strukturieren, muss ein Daten-Framework wie LlamaIndex die Daten durch einen Prozess leiten, der allgemein als „Aufnahmepipeline“ bezeichnet wird.
Sobald die Daten erfasst und in ein für das LLM nutzbares Format umgewandelt wurden, besteht der nächste Schritt darin, die Informationen in eine Datenstruktur für die Indexierung umzuwandeln. Das übliche Verfahren ist die Umwandlung unstrukturierter Daten in Vektoreinbettungen. Dieser Prozess wird in der Verarbeitung natürlicher Sprache (NLP) als „Erstellung einer Einbettung“ bezeichnet, in der Datenterminologie aber als „Indexierung“ bezeichnet.1 Die Indexierung ist notwendig, weil sie es dem LLM ermöglicht, die aufgenommenen Daten über den Vektorindex abzufragen und abzurufen. Die Daten können entsprechend der gewählten Abfragestrategie indiziert werden.
Die Datenintegration erleichtert die Kontextvergrößerung durch die Integration privater Daten in das Kontextfenster oder die „Wissensdatenbank“ des LLM. Die Länge des Kontextfensters der IBM-Modelle Granite 3B und 8B wurde kürzlich auf 128.000 Zeichen erweitert.2 Ein größeres Kontextfenster ermöglicht es dem Modell, mehr Text in seinem Arbeitsspeicher zu behalten, wodurch es besser in der Lage ist, wichtige Details in längeren Gesprächen und Codebasen zu verfolgen. Diese Funktion ermöglicht es LLM-Chatbots, Antworten zu geben, die sowohl kurzfristig als auch in einem längeren Kontext kohärent sind.
Doch selbst bei einem erweiterten Kontextfenster kann ein fein abgestimmtes Modell sowohl bei der Schulung als auch bei der Inferenz erhebliche Kosten verursachen. Die Feinabstimmung von Modellen mit spezifischen oder privaten Daten erfordert Datentransformationen und Systeme, die effiziente Methoden zur Datenabfrage für das LLM-Prompting fördern. Die RAG-Methodik wird als vielversprechende Option angesehen, um die Modellierung von Langzeitsprachen zu erleichtern.3
RAG ist eine der bekanntesten und verwendeten Methoden zur Kontexterweiterung. RAG ermöglicht es LLMs, eine spezialisierte Wissensdatenbank zu nutzen und so die Fähigkeit der LLMs zu verbessern, präzisere Antworten auf Fragen zu geben.4 Der typische Retrieval-Augmentation-Prozess wird in drei Schritten durchgeführt:
Daten-Frameworks wie LlamaIndex optimieren den Prozess der Datenerfassung und -abfrage, indem sie umfassende API-Aufrufe für jeden Schritt im RAG-Muster bereitstellen. Dieser Prozess wird durch das Konzept einer Abfrage-Engine unterstützt, die es Benutzern ermöglicht, Fragen zu ihren Daten zu stellen. Durch die Abfrage externer Daten und die Bereitstellung von Kontextwissen für LLMs können domänenspezifische LLM-Anwendungen erstellt werden.
LlamaIndex verwendet RAG, um dem Datenpool, auf den LLMs bereits Zugriff haben, externe Daten hinzuzufügen und zu verbinden. Anwendungen wie Abfragemaschinen, Chatbots und Agenten verwenden RAG-Techniken, um Aufgaben zu erledigen.5
Der Workflow von LlamaIndex kann in mehrere Schritte unterteilt werden:
Das Ziel dieses Workflows besteht darin, die Aufnahme und Strukturierung zu unterstützen und LLMs den Zugriff auf private oder domainspezifische Daten zu ermöglichen. Durch den Zugriff auf relevantere Daten können LLMs genauer auf Anfragen reagieren, sei es für die Erstellung von Chatbots oder Abfrage-Engines.
Die Datenerfassung oder das „Laden“ ist der erste Schritt, um externe Datenquellen mit einem LLM zu verbinden. LlamaIndex bezeichnet das Laden von Daten für die Anwendung als „Datenaufnahme“. Die meisten privaten oder benutzerdefinierten Daten können in Formaten wie Application Programming Interfaces (APIs), PDFs, Bildern, Structured Query Language-Datenbanken (SQL) und vielen weiteren isoliert werden. LlamaIndex kann über 160 verschiedene Datenformate laden, darunter strukturierte, halbstrukturierte und unstrukturierte Datensätze.
Datenkonnektoren, auch als „Datenlader“ bekannt, rufen Daten von ihrer nativen Quelle ab und nehmen sie auf. Die gesammelten Daten werden in eine Sammlung von Daten und Metadaten umgewandelt. Diese Sammlungen werden in LlamaIndex „Dokumente“ genannt. Datenkonnektoren oder „Leser“ in LlamaIndex nehmen verschiedene Datenformate auf und laden sie. LlamaIndex verfügt über einen integrierten Reader, der alle Dateien in jedem Verzeichnis in Dokumente umwandelt, einschließlich Markdown, PDFs, Word-Dokumente, PowerPoint-Präsentationen, Bilder, Audiodateien und Videos.6 Um andere Datenformate zu berücksichtigen, die nicht in der integrierten Funktionalität enthalten sind, stehen Datenkonnektoren über LlamaHub, ein Verzeichnis von Open-Source-Datenladeprogrammen, zur Verfügung. Dieser Schritt im Workflow dient dem Aufbau einer Wissensdatenbank, um Indizes über die Daten zu erstellen, damit diese von LLMs abgefragt und genutzt werden können.
Sobald die Daten erfasst wurden, muss das Daten-Framework die Daten in eine Struktur umwandeln und organisieren, die vom LLM abgerufen werden kann. Datenindizes strukturieren die Daten in Darstellungen, die LLMs verwenden können. LlamaIndex bietet verschiedene Indexarten, die die Abfragestrategie der Anwendung ergänzen, darunter: einen Vektorspeicherindex, einen Zusammenfassungsindex und einen Wissensgraphenindex.
Sobald die Daten geladen und indiziert wurden, können sie gespeichert werden. LlamaIndex unterstützt viele Vektorspeicher, die sich in Architektur, Komplexität und Kosten unterscheiden. Standardmäßig speichert LlamaIndex alle indizierten Daten nur im Arbeitsspeicher.
Der indexbasierte Vektorspeicher wird häufig in LLM-Anwendungen nach dem RAG-Muster verwendet, da er sich hervorragend für die Verarbeitung von Abfragen in natürlicher Sprache eignet. Die Genauigkeit der Abfrageergebnisse bei Abfragen in natürlicher Sprache hängt von der semantischen Suche ab, d. h. von einer Suche, die auf der Bedeutung und nicht auf dem Abgleich von Schlüsselwörtern basiert.7 Die semantische Suche wird durch die Umwandlung von Eingabedaten in Vektoreinbettungen ermöglicht. Eine Vektoreinbettung ist eine numerische Darstellung der Semantik der Daten, die das LLM verarbeiten kann. Die mathematische Beziehung zwischen Vektoreinbettungen ermöglicht es LLMs, Daten basierend auf der Bedeutung der Abfragebegriffe abzurufen, um kontextreichere Antworten zu erhalten.
Der „VectorStoreIndex“ nimmt die Datensammlungen oder „Dokument“-Objekte und teilt sie in „Knoten“ auf, die atomare Dateneinheiten sind, die einen „Block“ der Quelldaten („Dokument“) darstellen. Sobald die Datensammlung in Blöcke aufgeteilt ist, werden Vektoreinbettungen jedes Datenblocks erstellt. Die integrierten Daten liegen nun in einem Format vor, das das LLM für Abfragen nutzen kann. Diese Vektorindizes können gespeichert werden, um eine erneute Indizierung zu vermeiden. Die einfachste Art, Daten zu speichern, ist, sie auf der Festplatte zu speichern, aber LlamaIndex lässt sich in mehrere Vektordatenbanken und Einbettungsmodelle integrieren.8
Um nach Einbettungen zu suchen, wird die Benutzeranfrage zunächst in eine Vektoreinbettung umgewandelt. Als nächstes wird ein mathematisches Verfahren verwendet, um alle Einbettungen auf der Grundlage ihrer semantischen Ähnlichkeit mit der Suchanfrage zu bewerten.
Der Index des Vektorspeichers verwendet die semantische Top-K-Suche, um die ähnlichsten Einbettungen als entsprechende Textabschnitte zurückzugeben. LlamaIndex wurde entwickelt, um die Erstellung und Verwaltung umfangreicher Indizes für die effiziente Suche nach Informationen zu erleichtern.
Der letzte Schritt im Arbeitsablauf ist die Implementierung von Abfrage-Engines, um die prompte Beantwortung von Anfragen an LLMs zu gewährleisten. Die Abfrage besteht aus drei verschiedenen Phasen: Abruf, Nachbearbeitung und Antwortsynthese. Beim Abruf werden die relevantesten Dokumente aus dem Vektorindex abgerufen und zurückgegeben. Bei der Nachbearbeitung werden die abgerufenen eingebetteten Blöcke oder „Knoten“ optional durch Neusortierung, Umwandlung oder Filterung neu angepasst. Bei der Antwortsynthese werden die relevantesten Daten und die Eingabeaufforderung kombiniert und an das LLM gesendet, um eine Antwort zu erhalten.
Abfrage-Engines ermöglichen es Benutzern, Fragen zu ihren Daten zu stellen, indem sie eine Abfrage in natürlicher Sprache entgegennehmen und eine kontextreiche Antwort zurückgeben.9 Abfrage-Engines bestehen aus einem oder mehreren Indizes und Retrievern. Für Datensammlungen mit mehreren Indextypen können viele Abfrage-Engines gleichzeitig verwendet werden. LlamaIndex bietet mehrere verschiedene Abfrage-Engines für strukturierte und halbstrukturierte Daten, z. B. eine JSON-Abfrage-Engine für die Abfrage von JSON-Dokumenten.
Datenagenten sind LLM-gesteuerte KI-Agenten, die eine Reihe von Aufgaben mit Daten ausführen können, einschließlich Lese- und Schreibfunktionen.10 LlamaIndex-Datenagenten sind LLM-gestützte Knowledge Works, die Folgendes ausführen können:
KI-Agenten können über eine Reihe von APIs und Tools mit ihrer externen Umgebung interagieren. LlamaIndex unterstützt den Function-Agenten (auf der OpenAI Function API aufbauend) und einen ReAct-Agenten. Die Kernkomponenten von Datenagenten sind eine „Argumentationsschleife“ oder das Argumentationsparadigma des Agenten und sogenannte „Tool-Abstraktionen“, die die Tools selbst darstellen.
Agenten verwenden eine Denkschleife oderein Paradigma, um mehrstufige Probleme zu lösen. In LlamaIndex folgen sowohl OpenAI Function- als auch ReAct-Agenten einem ähnlichen Muster, um zu entscheiden, welche Tools zu verwenden sind, sowie die Reihenfolge und die Parameter, die jedes Tool aufgerufen werden sollen. Dieses Argumentationsmuster wird als ReAct oder Denken und Handeln bezeichnet. Dieser Prozess kann entweder ein einfacher, einstufiger Tool-Auswahlprozess sein oder ein komplexerer Prozess, bei dem in jedem Schritt mehrere Tools ausgewählt werden.
Tool-Abstraktionen beschreiben, wie Tools auf Tools zugreifen und wie sie vom Agenten verwendet werden. LlamaIndex bietet Tools und ToolSpecs, eine Python-Klasse, die eine vollständige API-Spezifikation darstellt, mit der ein Agent interagieren kann. Die Basis-Tool-Abstraktion definiert eine generische Schnittstelle, die eine Reihe von Argumenten aufnehmen und einen generischen Tool-Ausgabecontainer zurückgeben kann, der jede Antwort erfassen kann. LlamaIndex bietet Tool-Abstraktionen, die die vorhandenen Datenabfrage-Engines umschließen, sowie Abstraktionen für Funktionen, die von der Tool-Spezifikationsklasse verwendet werden können.
Eine Tool-Spezifikation ermöglicht es Benutzern, komplette Dienste zu definieren, anstatt einzelne Tools, die bestimmte Aufgaben ausführen. Beispielsweise erlaubt die Gmail-Tool-Spezifikation dem Agenten, E-Mails sowohl zu lesen als auch zu verfassen.11 Hier ist ein Beispiel, wie das in etwa definiert werden würde:
class GmailToolSpec(BaseToolSpec):Jede Funktion wird mithilfe der „FunctionTool“-Abstraktion in ein Tool umgewandelt.
LlamaIndex nutzt das Tool Repository von LlamaHub, das aus über 15 Tool-Spezifikationen besteht, mit denen Agenten interagieren können. Diese Liste besteht aus Services, die Funktionen der Agenten, verschiedene Aktionen durchzuführen, verbessern und bereichern sollen. Hier sind einige von mehreren Spezifikationen, die im Repository enthalten sind:
LlamaIndex bietet Dienstprogramm-Tools, die die Funktionen vorhandener Tools erweitern können, darunter:
LlamaIndex funktioniert mit Open-Source-Foundation-Models wie der IBM Granite™-Serie, Llama2 und OpenAI sowie anderen LLM-Frameworks wie LangChain und Ollama. LLMs können auf vielfältige Weise als eigenständige Module verwendet oder in andere Kernmodule von LlamaIndex eingebunden werden.12 LLMs können auch verwendet werden, um KI-Agenten zu steuern, die als Knowledge Worker agieren und autonomen Workflows folgen.
LlamaIndex hat seine Funktionalität um die Nutzung von LLM-gesteuerten KI-Agenten erweitert, die als Wissensarbeiter fungieren. LlamaIndex-KI-Agenten, die einem ReAct-Verhaltensmuster (Reasoning and Action) folgen. ReAct-Agenten folgen einem Argumentationsmuster, das den Agenten anweist, schrittweise zu planen und zu argumentieren, während die Antworten iterativ verbessert werden. Diese Art von KI-Agent kann als eine Form der Gedankenführung interpretiert werden. Agenten können Tools verwenden, um sich mit anderen LLMs zu integrieren. Zum Beispiel die LlamaHub-Sammlung von Datenverbindungs- und Agenten-Tools.
LlamaIndex bietet in seinen Dokumenten mehrere Anwendungsbeispiele mit Links zu Tutorials.13
Erkunden Sie die Foundation-Model-Bibliothek im watsonx-Portfolio von IBM zur zuverlässigen Skalierung generativer KI für Ihr Unternehmen.
Setzen Sie KI in Ihrem Unternehmen ein – mit branchenführendem Fachwissen im Bereich KI und dem Lösungsportfolio von IBM an Ihrer Seite.
Erfinden Sie kritische Workflows und Abläufe neu, indem Sie KI einsetzen, um Erfahrungen, Entscheidungsfindung in Echtzeit und den geschäftlichen Nutzen zu maximieren.
1 Elena Lowery, „Use Watsonx.Ai with LlamaIndex to Build Rag Applications“, Use Watsonx.ai with LlamaIndex to build RAG applications, 28. Mai 2024, https://community.ibm.com/community/user/watsonx/blogs/elena-lowery/2024/05/28/use-watsonxai-with-llamaindex-to-build-rag-applica.
2 Matt Stallone et al., „Scaling Granite Code Models to 128K Context“, arXiv.org, 18. Juli 2024, https://arxiv.org/abs/2407.13739.
3 Matt Stallone et al., “Scaling Granite Code Models to 128K Context.”
4 Kim Martineau, “What Is Retrieval-Augmented Generation (Rag)?,” IBM Research, May 1, 2024, https://research.ibm.com/blog/retrieval-augmented-generation-RAG.
5 „High-Level Concepts“, LlamaIndex, https://docs.llamaindex.ai/en/stable/getting_started/concepts/.
6 “Loading Data (Ingestion),” LlamaIndex, https://docs.llamaindex.ai/en/stable/understanding/loading/loading/.
7 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”
8 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”
9 „Abfrage-Engine“, LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/.
10 Jerry Liu, „Data Agents“, Medium, 13. Juli 2023, https://medium.com/llamaindex-blog/data-agents-eed797d7972f.
11 “Google,” LlamaIndex, https://docs.llamaindex.ai/en/stable/api_reference/tools/google/.
12 “Using LLMs,” LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/models/llms/.
13 “Use Cases,” LlamaIndex, https://docs.llamaindex.ai/en/latest/use_cases/.
14 „Fragen-Antworten (RAG)“, LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/.
15 „Agents“, LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/agents/.