Was ist LangChain?

03.07.2024
Von 
Martin Heller schreibt als freier Autor für die Schwesterpublikation InfoWorld.
LangChain macht es einfacher, Anwendungen auf Generative-AI-Basis zu entwickeln. Das sollten Sie über das Python- und JavaScript-Framework wissen.
LangChain erleichtert es, Applikationen auf Sprachmodellbasis zu erstellen. Das sollten Sie über das Open-Source-Framework wissen.
LangChain erleichtert es, Applikationen auf Sprachmodellbasis zu erstellen. Das sollten Sie über das Open-Source-Framework wissen.
Foto: Idea99 - shutterstock.com

Auch wenn es eine eigene Kunstform darstellt, effektive Prompts für sie zu erstellen: Large Language Models (LLMs; auch große Sprachmodelle) sind im Allgemeinen einfach zu verwenden. Mit LLMs zu programmieren, kann hingegen eine echte Herausforderung darstellen. An dieser Stelle kommt LangChain ins Spiel - ein quelloffenes Framework, um LLM-basierte Applikationen zu entwickeln.

Mit Hilfe dieses Rahmenwerks können Entwickler beispielsweise:

  • Chatbots oder persönliche Assistenten erstellen,

  • Dokumente oder strukturierte Daten zusammenfassen, respektive analysieren,

  • Code schreiben und besser verstehen, oder

  • mit APIs interagieren.

Derzeit gibt es zwei Versionen von LangChain - eine für Python und eine für TypeScript/JavaScript. In diesem Artikel lesen Sie, wie LangChain funktioniert und integriert, wie Sie das Framework installieren und was Sie sonst noch zum Thema wissen sollten.

Wie LangChain funktioniert

LangChain ermöglicht es Sprachmodellen, sich mit Datenquellen zu verbinden und mit ihrer Umgebung zu interagieren.

  • LangChain-Komponenten sind modulare Abstraktionen und Sammlungen von Implementierungen dieser Abstraktionen.

  • Off-the-Shelf-Ketten (-Chains) sind strukturierte Zusammenstellungen von Komponenten, um bestimmte übergeordnete Tasks zu erfüllen.

  • Sie können Komponenten verwenden, um bestehende Ketten anzupassen und um neue Chains zu erstellen.

In diesem Zusammenhang gibt es außerdem zwei Arten von Sprachmodellen:

  • Bei Large Language Models bestehen Input und Output jeweils aus einer Zeichenkette.

  • Bei Chat-Modellen dient eine Liste von Nachrichten als Input und eine Chat-Nachricht als Output. Letztere enthalten wiederum zwei Komponenten - Inhalt und Rolle (gibt Auskunft über die Quelle des Inhalts).

Im Allgemeinen verwenden Sprachmodelle Prompt-Templates für ihre Inputs. Damit lässt sich definieren, welche Aufgabe ein Sprach- oder Chatmodell übernehmen soll - etwa die des Assistenten, der Englisch in Französisch übersetzt. Die Templates lassen sich darüber hinaus auch auf viele verschiedene Inhaltsinstanzen anwenden - etwa einer Liste von Sätzen, die übersetzt werden sollen.

LangChain besteht aus sechs Modulen:

  • Model I/O (Schnittstelle zu Sprachmodellen),

  • Data Connection (Schnittstelle zu anwendungsspezifischen Daten),

  • Chains (konstruieren Call-Sequenzen),

  • Agents (ermöglichen den Chains, die zu verwendenden Tools anhand von High-Level-Direktiven auszuwählen),

  • Memory (bewahrt den Anwendungsstatus zwischen den "Chain Runs") und

  • Callbacks (protokollieren und streamen die Zwischenschritte einer jeden Chain).

Debugging mit LangSmith

Geht es darum, Ihre mit LangChain generierten Applikationen vom Prototypenstatus in die Produktion zu überführen, bietet LangSmith Unterstützung.

LangChain-Anwendungsfälle

Zu den Anwendungsfällen für LangChain gehören:

  • Q&As aus Dokumenten zu generieren,

  • strukturierte Daten zu analysieren,

  • mit APIs zu interagieren,

  • Code zu verstehen,

  • Agenten zu simulieren,

  • autonome Agenten zu realisieren,

  • Chatbots umzusetzen,

  • Code zu generieren,

  • Daten zu extrahieren,

  • Graph-Daten zu analysieren,

  • multimodale Outputs zu liefern,

  • Self-Checking,

  • Zusammenfassungen sowie

  • Tagging.

LangChain-Integrationen

In Sachen Integrationen zeigt sich LangChain vielfältig und unterstützt zahlreiche:

LangChain fungiert dabei im Wesentlichen als neutraler Knotenpunkt für all diese Fähigkeiten.

LangChain installieren

Um LangChain für Python zu installieren, verwenden Sie pip oder conda. Um Versionskonflikte zu vermeiden, empfiehlt es sich, Python-Packages in virtuellen Umgebungen zu installieren.

Die grundlegende, minimale Installation starten Sie mit folgendem Befehl:

pip install langchain

Nicht enthalten sind dann die Module für Modell-Provider, Data Stores und andere Integrationen. Um LangChain gemeinsam mit den gängigen Sprachmodellen zu installieren, verwenden Sie:

pip install langchain[llms]

Um LangChain inklusive sämtlicher Integrationen zu installieren, lautet der Befehl:

pip install langchain[all]

Wenn Sie zsh verwenden (die Standard-Shell auf neueren Versionen von macOS), sind Ausdrücke mit eckigen Klammern in Anführungszeichen zu setzen. Anderenfalls interpretiert die Shell eckige Klammern als Arrays. Bezogen auf das ebengenannte Beispiel wäre der richtige Befehl:

pip install 'langchain[all]'

Um LangChain für JavaScript zu installieren, nutzen Sie:

  • npm (npm install -S langchain),

  • Yarn (yarn add langchain) oder

  • pnpm (pnpm add langchain).

Sie können LangChain für JavaScript verwenden mit:

  • Node.js,

  • Cloudflare Workers,

  • Vercel / Next.js (Browser-, Serverless- und Edge-Funktionen),

  • Supabase Edge Functions,

  • Webbrowsern und

  • Deno.

Weiterführende Informationen zu LangChain für JavaScript finden Sie hier.

LangChain-Beispiel

Aus Platzgründen beschränken wir uns in diesem Artikel auf ein Beispiel aus der LangChain-Dokumentation. Folgender Python-Code demonstriert eine LLMChain. Diese Kette nimmt Eingabevariablen und übergibt sie an ein Prompt-Template, um einen Prompt zu erstellen. Der Prompt wird an ein Large Language Model (ChatOpenAI) übergeben und der CSV-Output in einen (optionalen) Output-Parser eingespeist, um ein Python-Array von Strings zu erstellen.

from langchain.chat_models import ChatOpenAI

from langchain.prompts.chat import (

ChatPromptTemplate,

SystemMessagePromptTemplate,

HumanMessagePromptTemplate,

)

from langchain.chains import LLMChain

from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):

"""Parse the output of an LLM call to a comma-separated list."""

def parse(self, text: str):

"""Parse the output of an LLM call."""

return text.strip().split(", ")

template = """You are a helpful assistant who generates comma separated lists.

A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.

ONLY return a comma separated list, and nothing more."""

system_message_prompt = SystemMessagePromptTemplate.from_template(template)

human_template = "{text}"

human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

chain = LLMChain(

llm=ChatOpenAI(),

prompt=chat_prompt,

output_parser=CommaSeparatedListOutputParser()

)

chain.run("colors")

# >> ['red', 'blue', 'green', 'yellow', 'orange']

Die LangChain Expression Language (LCEL)

Die LangChain Expression Language (LCEL) ist eine deklarative Methode, um Ketten zusammenzustellen und bietet standardmäßig Streaming-, Batch- und Async-Support. LCEL erleichtert es, LangChain zu nutzen und ist im Grunde eine High-Level-Alternative, um Chains in Python oder TypeScript/JavaScript zu erstellen. Um LCEL zu erlernen, können Sie beispielsweise den interaktiven LangChain Teacher nutzen - dazu müssen Sie allerdings zuerst LangChain für Python installieren.

LCEL-Ausdrücke verwenden Pipe-Zeichen (|), um Variablen in Ketten zu verbinden. Eine einfache, allgemeine Chain verwendet zum Beispiel ein Modell und einen Prompt:

chain = prompt | model

Im Kontext könnten Sie dieses Python-Programm haben:

from langchain.prompts import ChatPromptTemplate

from langchain.chat_models import ChatOpenAI

model = ChatOpenAI()

prompt = ChatPromptTemplate.from_template("tell me a joke about {foo}")

chain = prompt | model

chain.invoke({"foo": "bears"})

Der Output (wie auf der Website angegeben) sieht folgendermaßen aus:

AIMessage(content='Why don\'t bears use cell phones? \n\nBecause they always get terrible "grizzly" reception!', additional_kwargs={}, example=False)