Künstliche Intelligenz (KI) ist ein schnell wachsender Bereich. Es wurden Sprachmodelle entwickelt, die es KI-Agenten ermöglichen, komplexe Aufgaben auszuführen und komplexe Entscheidungen zu treffen. Doch während die Fähigkeiten dieser Agenten immer weiter zunehmen, kann die Infrastruktur zu ihrer Unterstützung nur schwer Schritt halten.
LangGraph, eine revolutionäre Bibliothek, die die Arbeit von KI-Agenten revolutionieren soll Aufbau und Laufzeit Umsetzung.
LangGraph präsentiert einen neuen AgentenAufbau und LaufzeitKonstruktives Paradigma, das Agenten-Workflows als Strukturen betrachtet, die auf einer zyklischen Graphentopologie basieren.
Was ist LangGraph?
Ein wichtiger Vorteil von LangChain ist die Möglichkeit, auf einfache Weise benutzerdefinierte Ketten zu erstellen. Allerdings fehlt in LangChain eine einfache Möglichkeit, Schleifen in diese Ketten einzuführen. In der Tat sind diese Ketten gerichtete azyklische Graphen (DAG) - Wie die meisten Frameworks für die Datenorchestrierung.
Ein häufiges Muster bei der Erstellung komplexer LLM-Anwendungen ist die Einführung von Schleifen in die Laufzeit. Diese Schleifen greifen oft auf den LLM zurück, um die nächste Aktion in der Schleife zu bestimmen. Dies ist im Wesentlichen das Äquivalent zur Ausführung des LLM in einer for-Schleife.
Die einfachste Form ist eine Schleife mit zwei Schritten:
- Aufruf des LLM, um zu bestimmen, welche Aktion zu ergreifen oder welche Antwort dem Benutzer zu geben ist
- Führen Sie den angegebenen Vorgang aus und kehren Sie zu Schritt 1 zurück.
Diese Schritte werden wiederholt, bis die endgültige Antwort erzeugt ist. Dies ist die Schleife, die den AgentExecutor im Herzen von LangChain antreibt. Es ist eine sehr einfache Schleife, aber sie ist auch die kritischste, weil sie fast die gesamte Entscheidungs- und Argumentationskraft in die Hände des LLM legt.
Es ist wichtig zu beachten, dass dieser Prozess in der Regel mehr Kontrolle erfordert. Beispielsweise kann der Agent gezwungen werden, zuerst ein bestimmtes Tool aufzurufen, oder es kann besser kontrolliert werden, wie das Tool aufgerufen wird, oder es werden je nach Zustand des Agenten unterschiedliche Eingabeaufforderungen angezeigt usw.
Es handelt sich um kontrollierte Prozesse, die LangChain "Zustandsautomaten" nennt.
Diese Zustandsautomaten sind in der Lage, eine Schleife zu durchlaufen, wobei jedoch ein gewisses menschliches Eingreifen bei der Konstruktion dieser Schleife erforderlich ist.
LangGraph erzeugt diese Zustandsautomaten, indem es sie als Graphen spezifiziert.
LangGraph baut auf LangChain auf und ist voll kompatibel mit dem LangChain-Ökosystem.Interoperabilität. Es bietet vor allem durch die Einführung einer einfachen Möglichkeit zur Erstellung von Schleifendiagrammen einen neuen Mehrwert. Dies ist sehr nützlich bei der Erstellung von Agent-Laufzeiten.
Dieser Ansatz ermöglicht es den Agenten, ein variableres und nuancierteres Verhalten an den Tag zu legen als die linearen Ausführungsmodelle ihrer Vorgänger. Mit Hilfe der Graphentheorie bietet LangGraph neue Möglichkeiten zur Entwicklung komplexer vernetzter Agentensysteme.
Abbildung: ein LangGraph für die Codegenerierung
Ein Beispiel: dynamisches Frage- und Antwortsystem
Nehmen Sie Der Benutzer kann dem Modell schrittweise Informationen zur Verfügung stellen, anstatt alle Informationen auf einmal zu senden.
Verschreibung : Verwenden Sie ein zyklisches Diagramm:
- Erlauben Sie dem LLM, erste Antworten zu generieren.
- Wenn die Antwort unvollständig ist oder weitere Informationen benötigt werden, erstellen Sie eine neue Frage und fahren Sie mit der Befragung des Benutzers fort.
- bis der Benutzer bestätigt, dass das Problem behoben wurde.
Aufbau des Kreislaufdiagramms
- KnotenpunkteJeder Knoten steht für eine bestimmte Aufgabe oder einen bestimmten Vorgang, z. B. Texterstellung, Beantwortung von Fragen, Datenverarbeitung usw.
- RänderVerbindungen zwischen Knoten zeigen die Reihenfolge der Aufgabenausführung an, möglicherweise mit bedingten Beurteilungen.
- SchleifenpfadSchleifen: Schleifen werden gebildet, wenn die Ausgabe eines Knotens zum vorherigen Knoten zurückgeführt werden muss oder wenn sie wiederholt ausgeführt werden muss.
- Bedingung zum AnhaltenDie Schleifendiagramme unterliegen einer Art Abbruchbedingung, z. B. wenn die Qualität des Ergebnisses den Anforderungen entspricht, wenn die eingestellte Anzahl von Malen erreicht ist oder wenn ein extern ausgelöstes Stoppsignal aktiviert wird.
Warum LangGraph verwenden?
- Geschicklichkeit Mit der Weiterentwicklung von KI-Agenten benötigen Entwickler mehr Kontrolle über die Laufzeit des Agenten, um personalisierte Aktionspläne und Entscheidungsverfahren zu ermöglichen.
- Die zirkuläre Natur des KI-Denkens Viele komplexe LLM-Anwendungen sind auf zyklische Ausführung angewiesen, wenn sie Strategien wie z.B. verkettetes Schlussfolgern verwenden. LangGraph bietet einen natürlichen Rahmen für die Modellierung dieser zyklischen Prozesse.
- Multi-Intelligenz-System Mit der zunehmenden Verbreitung von Arbeitsabläufen mit mehreren Intelligenzen steigt auch der Bedarf an Systemen, die mehrere autonome Intelligenzen effizient verwalten und koordinieren können.
Verwenden Sie den Code, um zu sehen, wie LangGraph funktioniert
Die Funktionalität von LangGraph basiert auf einigen wenigen Grundelementen:
- Knotenpunkte. Dies sind Werkzeuge für Funktionen oder Agenten.
- Ränder. Definieren Sie Pfade für die Ausführung und den Datenfluss im Agentensystem und verbinden Sie die Knotenpunkte.
- StateGraph. LangGraph ermöglicht es, persistente Daten zwischen den Ausführungszyklen durch die Verwaltung und Aktualisierung von Zustandsobjekten zu erhalten, wobei die Daten zwischen den Knoten fließen.
Abbildung: Grundlegender Arbeitsablauf von LangGraph
StateGraph
StateGraph
ist eine Klasse, die ein Diagramm darstellt. Sie erstellen einen Graphen, indem Sie die Klasse Staat
Definition, um diese Klasse zu initialisieren. Die Zustandsdefinition stellt ein zentrales Zustandsobjekt dar, das im Laufe der Zeit aktualisiert wird. Dieser Zustand wird durch Knoten im Graphen aktualisiert, die Operationen auf die Attribute dieses Zustands in Form von Schlüsselwertspeichern zurückgeben.
import os # Importieren Sie das Betriebssystemmodul
os.environ['OpenAI_API_KEY'] = 'hk-iwtbi1e427'
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph importieren StateGraph, START, END
from langgraph.graph.message import add_messages
class State(TypedDict).
# Die Nachrichten sind vom Typ "list" und "add_messages" in Annotated definiert, wie die Nachrichten aktualisiert werden.
# In diesem Beispiel werden die Nachrichten an die Liste angehängt und nicht überschrieben.
Meldungen: Annotated[list, add_messages]
# Erstellen Sie eine Instanz von StateGraph und übergeben Sie die State-Klasse
graph_builder = StateGraph(State)
Knotenpunkte
Erstellen einer StateGraph
Danach können Sie die graph.add_node(name, wert)
Syntax zum Hinzufügen von Knoten. Name
Das Argument ist eine Zeichenkette, die den Namen des Knotens darstellt. Wert
Das Argument ist eine Funktion oder ein lauffähiges LCEL, das aufgerufen wird.
Diese Funktion /LCEL nimmt eine Funktion an, die der folgenden entspricht Staat
Objekt hat ein Wörterbuch in der gleichen Form wie die Eingabe und gibt ein Wörterbuch aus, das die Staat
Schlüssel des Objekts, um das Wörterbuch zu aktualisieren.
from langchain_openai import ChatOpenAI # Import ChatOpenAI from langchain_openai module
llm = ChatOpenAI( # Instanz von ChatOpenAI erzeugen
model="gpt-4o-mini", # Modell angeben
temperature=0, # Festlegen der Temperatur
base_url="https://api.openai-hk.com/v1" # Setzt die Basis-URL
)
def chatbot(state: State):# Definiere eine Chatbot-Funktion, die Argumente vom Typ State annimmt
"""
Verarbeitet eine Chatbot-Anfrage und gibt eine Nachricht zurück.
Parameter.
state (State): enthält den Status der Nachricht.
Rückgabe.
dict: Wörterbuch der vom Bot generierten Nachrichten.
"""
return {"messages": [llm.invoke(state["messages"])]} # Gibt das Wörterbuch mit den Nachrichten zurück
# Das erste Argument ist der Name des Knotens
# Das zweite Argument ist die aufgerufene Funktion oder das aufgerufene Objekt
graph_builder.add_node("chatbot", chatbot) # Fügt dem Graphen einen Knoten mit dem Namen "chatbot" hinzu
Ränder
Zeigt an, dass einer der Knotenpunkte immer nach dem anderen aufgerufen wird
# Hinzufügen einer Kante von START zu "chatbot"
graph_builder.add_edge(START, "chatbot")
# Hinzufügen einer Kante von "chatbot" zu END.
graph_builder.add_edge("chatbot", END)
Kompilieren Kompilieren
Nachdem wir unseren Graphen definiert haben, können wir ihn kompilieren, um ihn lauffähig zu machen! Bieten Sie die gleichen Methoden wie LangChain an ( .aufrufen
(math.) Gattung .stream
(math.) Gattung .astream_log
usw.), so dass sie auf die gleiche Weise wie eine Kette aufgerufen werden kann.
graph = graph_builder.compile() # Kompilieren des Graphen
in Bewegung sein
def stream_graph_updates(user_input: str): # Definiert die Funktion stream_graph_updates zur Annahme von Benutzereingaben
"""
Verwendet user_input zum Streamen von Graph-Aktualisierungsmeldungen.
Parameter.
user_input (str): Benutzereingabemeldung.
Rückgabe.
Keine
"""
# Iteriert durch die Stream-Ereignisse des Graphen und übergibt die Benutzernachrichten, um die Antwort des Modells zu erhalten
for event in graph.stream({"messages": [("user", user_input)]}): # Durchlaufen der Stream-Ereignisse des Graphen
for value in event.values(): # Durchlaufen der Werte des Ereignisses
print("Assistent:", value["messages"][-1].content) # Druckt die letzte Nachricht des Assistenten
whileTrue.
Versuchen.
user_input = input("Benutzer: ") # Benutzereingabe erhalten
if user_input.lower() in ["quit", "exit", "q"]: # Prüfen Sie, ob der Benutzer aufhören will.
print("Auf Wiedersehen!")
break# Verlassen der Schleife
# Aufruf der Funktion stream_graph_updates zur Verarbeitung der Benutzereingaben
stream_graph_updates(user_input)
except: # catch exception
# Fallback, wenn input() nicht verfügbar ist
user_input = "Was wissen Sie über LangGraph? "# Standard-Benutzereingabe setzen
print("Benutzer: " + user_input) # Benutzereingabe ausgeben
stream_graph_updates(user_input) # Aufruf der Funktion stream_graph_updates zur Verarbeitung der Standard-Eingabe
break# Verlassen der Schleife
Visualisierung "Diagramm" (optional)
Visualisierung von "Diagrammen" in der Jupyter Notebook-Umgebung
operative Wirkung
Frameworks wie LangGraph werden mit der Entwicklung der KI immer wichtiger.
In dem Maße, in dem sich Entwickler mit den Funktionen von LangGraph vertraut machen, können wir mit fortschrittlicheren KI-Agenten rechnen, die in der Lage sind, komplexere Aufgaben auszuführen.
Zusammenfassend lässt sich sagen, dass LangGraph einen bedeutenden Fortschritt in der Entwicklung von KI-Agenten darstellt. Es ermöglicht Entwicklern, die Grenzen dessen, was mit KI-Agenten möglich ist, zu verschieben, indem es die Unzulänglichkeiten früherer Systeme beseitigt und ein flexibles, graphenbasiertes Framework für die Konstruktion und Ausführung von Agenten bereitstellt.LangGraph hat das Potenzial, die Richtung der KI-Entwicklung in der Zukunft maßgeblich zu beeinflussen.