LangChain-Tutorial: Ein Leitfaden für die Entwicklung von LLM-gestützten Anwendungen

139686_-_Elastic_-_Headers_-_V1_2.jpg

Large Language Models (LLMs) wie GPT-4 und LLaMA haben in den letzten Jahren unzählige neue Möglichkeiten eröffnet. Dadurch wurde ein Boom bei KI-Tools und -Anwendungen eingeläutet, und ChatGPT ist scheinbar über Nacht weltweit bekannt geworden. Ohne leistungsfähige Tools und Frameworks, die den Weg für diese neue Generation von Apps bereitet haben, wäre dieser Boom allerdings nicht möglich gewesen. 

Eines dieser Frameworks ist LangChain, das die Entwicklung neuer Apps mithilfe vorhandener LLMs erleichtert. Es wurde vom Machine Learning-Experten Harrison Chase entwickelt und 2022 als Open Source-Projekt gestartet. Dieses Framework ist ein Riesenschritt zur Überbrückung der technischen Lücke zwischen vorhandenen Sprachmodellen und dem Aufbau neuer und unterschiedlicher Anwendungen.

Was ist LangChain?

Einfach ausgedrückt ist LangChain eine standardisierte Schnittstelle, die den Entwicklungsprozess von KI-Apps vereinfacht. Sie erhalten damit eine Vielzahl von Tools, mit denen Sie verschiedene Komponenten verbinden und komplexe Workflows erstellen können. Dazu gehören LLMs und verschiedene Arten von Datenquellen. Wenn ein Nutzer mit der App interagiert, nutzt LangChain seine Verbindungen zu einem LLM, um die Anfrage zu verarbeiten und geeignete Antworten zu generieren. Außerdem kann es Informationen und Daten von externen Quellen wie einem Dokument oder einer Datenbank nutzen, um genauere und kontextbezogene Antworten bereitzustellen.

Ein Beispiel: Wenn ein Nutzer eine Frage hat, nutzt LangChain das LLM, um die Frage zu verstehen und eine Antwort zu formulieren. Zur Verbesserung seiner Antwort greift es jedoch auch auf eine oder mehrere externe Datenquellen zurück. Dadurch wird Ihre Anwendung deutlich intelligenter und kann auch komplexe, spezialisierte Abfragen bewältigen.

Im Grunde erweitern Sie die Fähigkeiten des LLM, indem Sie ihm Daten zur Verfügung stellen, die für das zu lösende Problem relevanter sind.

LangChain ist als Python- wie auch als TypeScript-Paket erhältlich und verfügt über diverse beeindruckende Features:

  • Interaktion mit dem Modell: LangChain ermöglicht die Interaktion mit jedem beliebigen Sprachmodell, sodass Inputs verwaltet sowie Informationen aus Outputs extrahiert werden.

  • Effiziente Integration: Es ermöglicht eine effiziente Integration mit beliebten KI-Plattformen wie OpenAI und Hugging Face.

  • Flexibilität und Anpassbarkeit: LangChain bietet Flexibilität, Anpassungsoptionen sowie leistungsstarke Komponenten zur Erstellung unterschiedlichster Anwendungen für verschiedene Branchen.

  • Kernkomponenten: Das Framework besteht aus LangChain-Bibliotheken, LangChain-Vorlagen, LangServe sowie LangSmith, die den gesamten Lebenszyklus der Anwendung vereinfachen. 

  • Standardisierte Schnittstellen: LangChain bietet standardisierte Schnittstellen, Prompt-Management und Speicherfunktionen, sodass Sprachmodelle mit Datenquellen interagieren können.

Dank dieser Feature-Kombination ist es flexibel, schnell sowie benutzerfreundlich und daher Musik in den Ohren von Entwickler:innen, die versucht sind, mit KI zu arbeiten. 

Wie funktioniert LangChain?

LangChain ist ein modulares Framework, das mit LLMs integriert wird. Diese standardisierte Schnittstelle abstrahiert die Komplexitäten und Schwierigkeiten bei der Arbeit mit verschiedenen LLM-APIs und beseitigt sie. Der Prozess für die Integration mit GPT-4, LLaMA und jedem anderen LLM, mit dem Sie arbeiten möchten, ist derselbe. Die LLM-Auswahl erfolgt außerdem dynamisch. Das heißt, Entwickler:innen können das LLM auswählen, das für die jeweilige von LangChain auszuführende Aufgabe am besten geeignet ist.

Das modulare Design erleichtert zudem die Verarbeitung und Umwandlung von Eingabedaten in verwertbare Ausgaben. Es können verschiedene Datentypen verarbeitet werden, darunter Text, Code und Multimediaformate. Tools zur Vorverarbeitung, Bereinigung und Normalisierung von Daten gehören ebenfalls dazu. So wird gewährleistet, dass die Daten von den LLMs verwertet werden können, wobei Tokenisierung, Normalisierung und Spracherkennung zum Einsatz kommen können.

LangChain verarbeitet auch den LLM-Output und wandelt ihn in Formate um, die für die app- oder aufgabenspezifischen Anforderungen geeignet sind. Dazu gehören Vorgänge wie das Formatieren von Text, das Generieren von Code-Snippets und das Bereitstellen von Zusammenfassungen komplexer Daten.

Kernkonzepte von LangChain

Die LangChain-Architektur beruht auf dem Konzept von Komponenten und Ketten. Komponenten entsprechen wiederverwendbaren Modellen, die bestimmte Aufgaben erfüllen, etwa Verarbeitung von Eingabedaten, Generieren von Textformaten, Zugreifen auf externe Informationen oder Workflow-Management. Ketten sind Abfolgen von Komponenten, die zusammen auf ein größeres Ziel hinarbeiten, beispielsweise Zusammenfassen eines Dokuments, Generieren kreativer Textformate oder Bereitstellen personalisierter Empfehlungen.

Komponenten und Module

In LangChain werden die Begriffe „Komponenten“ und „Module“ bisweilen als gleichbedeutend verwendet. Es gibt jedoch einen feinen Unterschied: 

  • Komponenten sind die zentralen Bausteine von LangChain, die für die konkreten Aufgaben oder Funktionalitäten stehen. In der Regel sind sie klein und fokussiert. Sie können in verschiedenen Anwendungen und Workflows wiederverwendet werden. 

  • Module dagegen bestehen aus mehreren Komponenten, die zusammen komplexere Funktionalitäten bilden. Für einige der Hauptmodule bietet LangChain sogar Standardschnittstellen an. Dazu gehören Speichermodule (ein wiederverwendbarer Baustein, der Daten zur Verwendung durch Large Language Models speichert und verwaltet) und Agents (eine dynamische Steuereinheit, die Ketten basierend auf Echtzeit-Feedback und Nutzerinteraktion orchestriert). 

Genau wie Komponenten sind Module wiederverwendbar und können miteinander zu immer komplexeren Workflows kombiniert werden. Dies wird als Kette bezeichnet. Dabei werden Abfolgen von Komponenten oder Modulen zusammengefügt, um ein bestimmtes Ziel zu erreichen. Ketten sind für die Workflow-Orchestrierung in LangChain von grundlegender Bedeutung und zugleich wichtig für die Erstellung effektiver Anwendungen, die ein breites Spektrum von Aufgaben übernehmen.

Integration mit LLMs

LangChain lässt sich über eine standardisierte Schnittstelle nahtlos mit LLMs integrieren. Die LangChain-Integration mit LLMs ist jedoch wesentlich mehr als ein Verbindungsmechanismus. Sie bietet auch verschiedene Features, um die Nutzung von LLMs für die Erstellung sprachbasierter Anwendungen zu optimieren:

  • Prompt-Management: Mit LangChain können Sie effektive Prompts erstellen, damit die LLMs die Aufgabe besser verstehen und eine hilfreiche Antwort erstellen können.

  • Dynamische LLM-Auswahl: Dadurch können Sie das für verschiedene Aufgaben am besten geeignete LLM auswählen. Dabei werden Faktoren wie Komplexität, Genauigkeitsanforderungen und Rechenressourcen berücksichtigt.

  • Integration der Speicherverwaltung: LangChain wird mit Speichermodulen integriert. Das heißt, LLMs können auf externe Informationen zugreifen und diese verarbeiten.

  • Agent-basierte Verwaltung: Dadurch können Sie komplexe LLM-basierte Workflows orchestrieren, die sich an veränderte Umstände und Nutzeranforderungen anpassen.

Workflow-Management

In LangChain ist das Workflow-Management der Prozess, durch den die Ausführung von Ketten und Agents zur Lösung eines bestimmten Problems Orchestrierung und gesteuert wird. Dazu gehören das Management des Datenflusses, die Koordination der Komponentenausführung und das Sicherstellen, dass Anwendungen effektiv auf Nutzerinteraktionen und veränderte Umstände reagieren. Nachfolgend sind einige der wichtigsten Workflow-Management-Komponenten aufgeführt:

  • Kettenorchestrierung: LangChain koordiniert die Ausführung von Ketten, damit Aufgaben in der richtigen Reihenfolge ausgeführt und Daten zwischen Komponenten ordnungsgemäß übergeben werden.

  • Agent-basierte Verwaltung: Der Einsatz von Agents wird durch vordefinierte Vorlagen und eine benutzerfreundliche Oberfläche vereinfacht.

  • Statusverwaltung: LangChain verfolgt den Status der Anwendung automatisch. Dabei können Entwickler:innen über eine einheitliche Oberfläche auf Statusinformationen zugreifen und diese ändern.

  • Parallelitätsmanagement: LangChain bewältigt die Komplexitäten der parallelen Ausführung, sodass Entwickler:innen sich auf die Aufgaben und Interaktionen konzentrieren können, ohne sich Gedanken über Threading oder Synchronisierungsprobleme machen zu müssen.

Einrichten von LangChain

Zu den Vorteilen von LangChain gehört, dass für den Einstieg nur sehr wenige Voraussetzungen zu erfüllen sind. In diesem Leitfaden verwenden wir Python. Daher muss Python 3.8 oder höher auf Ihrem Computer installiert sein. Mehr nicht.

Installation und Konfiguration

Der erste Schritt ist die Installation des zentralen LangChain-Framework. Am einfachsten lässt sich dies mit dem PIP-Befehl erledigen:

pip install langchain

Als Nächstes benötigen Sie ein LLM, mit dem LangChain interagieren soll. In diesem Beispiel verwenden wir OpenAI. Sie können jedoch jedes beliebige LLM für Ihre App nutzen:

pip install openai

Damit OpenAI funktioniert, benötigen Sie auch einen API-Schlüssel zur Authentifizierung Ihrer Anfragen. Dazu erstellen Sie ein OpenAI-Konto und wählen im Abschnitt mit API-Schlüsseln die Option „Create new secret key“ (Neuen geheimen Schlüssel erstellen). Sobald Sie den Schlüssel haben, bewahren Sie ihn an einem sicheren Ort auf. Sie benötigen ihn in Kürze.

Schließlich erstellen Sie eine Textdatei namens data.txt. Das wird die externe Datenquelle, die Sie als Kontext für das LLM verwenden:

In West Philadelphia born and raised
On the playground was where I spent most of my days
Chillin' out, maxin', relaxin', all cool
And all shootin' some b-ball outside of the school

Nun kommt endlich das, was Spaß macht!

Entwickeln von Anwendungen mit LangChain

Zur Erstellung dieser LangChain-App müssen Sie den Texteditor oder IDE Ihrer Wahl öffnen und eine neue Python-Datei (.py) am selben Speicherort wie data.txt erstellen. Sie erstellen eine ganz einfache App, die einen Prompt an das GPT-3 LLM von OpenAI sendet und die Antwort druckt.

Sie suchen eine größere Herausforderung? Sehen Sie sich unseren Leitfaden für die Verwendung von Amazon Bedrock mit Elasticsearch und LangChain an.

Schritt 1: Die OpenAI-Klasse aus LangChain importieren

Fügen Sie oben in Ihrem Python-Skript diese Importanweisung hinzu, damit die OpenAI-Klasse aus dem LLM-Modul von LangChain eingefügt wird:

from langchain.llms import OpenAI

Schritt 2: Einen funktionalen Datenlesevorgang aus einer Textdatei definieren:

Definieren Sie die Funktion so, dass die App den Dateipfad als Argument verwendet. Dadurch wird die Datei zum Lesen geöffnet und gibt den Inhalt zurück:

def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

Schritt 3: Das OpenAI-Modell initialisieren

Erstellen Sie eine Instanz der OpenAI-Klasse mit Ihrem API-Schlüssel. Ersetzen Sie dabei YOUR-OPENAI-KEY durch den tatsächlichen Schlüssel, den Sie von OpenAI erhalten haben:

gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

Schritt 4: Eine Funktion zum Anfordern einer Antwort von OpenAI definieren

Schreiben Sie eine Funktion, die einen Prompt als Argument verwendet und die Antwort aus dem GPT-3-Modell zurückgibt:

def get_response(prompt):
    return gpt3(prompt)

Schritt 5: Daten aus der Textdatei lesen

Geben Sie den Pfad zur Textdatei an und verwenden Sie die zuvor definierte Funktion, um den Inhalt zu lesen. Anschließend speichern Sie die Daten in der Variable „external_data“:

file_path = 'data.txt'
external_data = read_data_from_file(file_path)

Schritt 6: Einen Test-Prompt erstellen

An dieser Stelle definieren Sie den Prompt, den Sie an GPT-3 senden. In diesem Beispiel möchten Sie, dass der Text gelesen und Ihnen mitgeteilt wird, um welche Fernsehsendung es in der Textdatei geht:

prompt = f"Based on the following data: {external_data}, what TV show is this about?"

Schritt 7: Antwort von GPT-3 abrufen und drucken

Rufen Sie eine Funktion auf, die den vorbereiteten Prompt sendet, dann die Antwort von GPT-3 abruft und druckt:

print("Response:", get_response(prompt))

Schritt 8: Die App ausführen und die Antwort überprüfen

Nachdem Sie all diese Schritte ausgeführt haben, haben Sie eine Python-App, die folgendermaßen aussieht:

from langchain.llms import OpenAI

# Function to read data from a file
def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

# Initialize the LLM
gpt3 = OpenAI(api_key='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')

def get_response(prompt):
    return gpt3(prompt)

# Read data from your text file
file_path = 'data.txt'
external_data = read_data_from_file(file_path)

# Prepare your prompt including the external data
prompt = f"Based on the following data: {external_data}, what TV show is this about?"

# Get the response from GPT-3
print("Response:", get_response(prompt))

Jetzt müssen Sie nur noch die Python-App ausführen, um sich zu vergewissern, dass sie funktioniert! Speichern Sie die Datei und führen Sie die App mit diesem Befehl im Terminal aus:

python YOUR-APP-NAME.py

Wenn alles nach Plan verlaufen ist, erhalten Sie eine Antwort, die in etwa so aussieht:

Response: 
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".

Anwendungsfälle

Dieses Beispiel ist eine stark vereinfachte Demonstration. Doch dank der Flexibilität von LangChain gibt es unzählige Möglichkeiten bei der Entwicklung neuer KI-Apps. Es wäre unmöglich, sie hier alle aufzulisten. Doch wir greifen einige Fallstudien auf, um auf verschiedene Optionen hinzuweisen, die Sie erstellen könnten:

  • Chatbot: Erstellen Sie Ihren eigenen Chatbot, mit dem Sie Fragen in natürlicher Sprache stellen und einen Konversationsverlauf aufrechterhalten können.  

  • App für Fragen und Antworten: Erstellen Sie eine App, mit der Sie nach gesuchten Informationen fragen können, woraufhin sie die Antwort aus gespeicherten Dokumenten abruft.

  • Textsuche (BM25): Erstellen Sie eine eigene App für die Textsuche, um große Datenmengen abzufragen.

  • Vektorsuche: Entwickeln Sie eine App, die nach Datenähnlichkeiten sucht und Metadaten filtert.

  • Hybride Suche (Text und Vektor): Entwickeln Sie eine KI, die ähnliche Dokumente mit Text- und Vektorfiltern abgleicht.

  • LangChain mit Ihrem eigenen LLM: Erstellen Sie mit LangChain eine KI-App, die Ihr eigenes LLM mit externen Datenquellen verwendet.

LLM-gestützte Apps mit LangChain erstellen

Mittlerweile sollte klar sein, dass LangChain Ihnen durch Kombination der Leistungsfähigkeit von LLMs mit dem Kontext und den Zusatzinformationen in externen Datenquellen unbegrenzte Möglichkeiten bietet. Darüber hinaus ist der Einstieg erstaunlich einfach, wie wir in diesem LangChain-Tutorial gezeigt haben. Dank dieser Benutzerfreundlichkeit gepaart mit der Flexibilität und Leistungsstärke von LangChain ist dies die ideale Plattform für die Entwicklung unterschiedlichster KI-Anwendungen. Ganz gleich, ob Sie einen Chatbot, eine App für Fragen und Antworten oder eine Suchmaschine entwickeln möchten, erleichtert LangChain Ihnen die Erstellung innovativer und effektiver Lösungen.

Nächste Schritte

Wir können Ihnen helfen, aus den Daten Ihres Unternehmens Erkenntnisse zu gewinnen. Hier sind vier Vorschläge für Ihre nächsten Schritte:

  1. Starten Sie eine kostenlose Testversion, um zu entdecken, wie Elastic Ihr Unternehmen unterstützen kann.

  2. Lernen Sie unsere Lösungen bei einer Tour kennen, entdecken Sie die Elasticsearch-Plattform und deren Vorteile für Ihre Anforderungen.

  3. Erfahren Sie, wie Sie generative KI in Ihrem Unternehmen nutzen können.

  4. Teilen Sie diesen Artikel mit interessierten Personen per E‑Mail, LinkedIn, Twitter oder Facebook.

Die Entscheidung über die Veröffentlichung von Features oder Leistungsmerkmalen, die in diesem Blogeintrag beschrieben werden, oder über den Zeitpunkt ihrer Veröffentlichung liegt allein bei Elastic. Es ist möglich, dass nicht bereits verfügbare Features oder Leistungsmerkmale nicht rechtzeitig oder überhaupt nicht veröffentlicht werden.

In diesem Blogeintrag haben wir möglicherweise generative KI-Tools von Drittanbietern verwendet oder darauf Bezug genommen, die von ihren jeweiligen Eigentümern betrieben werden. Elastic hat keine Kontrolle über die Drittanbieter-Tools und übernimmt keine Verantwortung oder Haftung für ihre Inhalte, ihren Betrieb oder ihre Anwendung sowie für etwaige Verluste oder Schäden, die sich aus Ihrer Anwendung solcher Tools ergeben. Gehen Sie vorsichtig vor, wenn Sie KI-Tools mit persönlichen, sensiblen oder vertraulichen Daten verwenden. Alle Daten, die Sie eingeben, können für das Training von KI oder andere Zwecke verwendet werden. Es gibt keine Garantie dafür, dass Informationen, die Sie bereitstellen, sicher oder vertraulich behandelt werden. Setzen Sie sich vor Gebrauch mit den Datenschutzpraktiken und den Nutzungsbedingungen generativer KI-Tools auseinander. 

Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine und zugehörige Marken, Waren- und Dienstleistungszeichen sind Marken oder eingetragene Marken von Elastic N.V. in den USA und anderen Ländern. Alle weiteren Marken- oder Warenzeichen sind eingetragene Marken oder eingetragene Warenzeichen der jeweiligen Eigentümer.