Was ist LangChain?
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
) oderpnpm (
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)