ReAct-Agent mit Gemini und LangGraph von Grund auf erstellen

LangGraph ist ein Framework zum Erstellen zustandsorientierter LLM-Anwendungen und eignet sich daher gut für die Entwicklung von ReAct-Agents (Reasoning and Acting).

ReAct-Agents kombinieren LLM-Logik mit der Ausführung von Aktionen. Sie denken iterativ, verwenden Tools und reagieren auf Beobachtungen, um Nutzerziele zu erreichen, wobei sie ihren Ansatz dynamisch anpassen. Dieses Muster wurde 2023 in ReAct: Synergizing Reasoning and Acting in Language Models eingeführt und versucht, die flexible Problemlösung von Menschen anstelle von starren Workflows nachzubilden.

LangGraph bietet einen vordefinierten ReAct-Agenten ( create_react_agent), der sich besonders eignet, wenn Sie mehr Kontrolle und Anpassungsmöglichkeiten für Ihre ReAct-Implementierungen benötigen. In diesem Leitfaden wird eine vereinfachte Version beschrieben.

Bei LangGraph werden Agents als Graphen mit drei Hauptkomponenten modelliert:

  • State: Gemeinsame Datenstruktur (in der Regel TypedDict oder Pydantic BaseModel), die den aktuellen Snapshot der Anwendung darstellt.
  • Nodes: Codiert die Logik Ihrer Agents. Sie erhalten den aktuellen Status als Eingabe, führen eine Berechnung oder einen Nebeneffekt aus und geben einen aktualisierten Status zurück, z. B. LLM- oder Tool-Aufrufe.
  • Edges: Definiert den nächsten Node, der auf Grundlage des aktuellen State ausgeführt werden soll. Dies ermöglicht bedingte Logik und feste Übergänge.

Wenn Sie noch keinen API-Schlüssel haben, können Sie einen in Google AI Studio abrufen.

pip install langgraph langchain-google-genai geopy requests

Legen Sie Ihren API-Schlüssel in der Umgebungsvariable GEMINI_API_KEY fest.

import os

# Read your API key from the environment variable or set it manually
api_key = os.getenv("GEMINI_API_KEY")

In diesem Leitfaden wird anhand eines praktischen Beispiels erläutert, wie Sie einen ReAct-Agenten mit LangGraph implementieren. Sie erstellen einen Agent, dessen Ziel es ist, mit einem Tool das aktuelle Wetter für einen bestimmten Ort zu ermitteln.

Für diesen Wetter-Agent wird der State zur Veranschaulichung den laufenden Unterhaltungsverlauf (als Liste von Nachrichten) und einen Zähler (als Ganzzahl) für die Anzahl der ausgeführten Schritte beibehalten.

LangGraph bietet die Hilfsfunktion add_messages zum Aktualisieren von Listen mit Statusmeldungen. Sie fungiert als Reducer, der die aktuelle Liste und die neuen Nachrichten entgegennimmt und eine kombinierte Liste zurückgibt. Es verarbeitet Aktualisierungen anhand der Nachrichten-ID und verwendet standardmäßig das Verhalten „Nur anhängen“ für neue, noch nicht gesehene Nachrichten.

from typing import Annotated,Sequence, TypedDict

from langchain_core.messages import BaseMessage
from langgraph.graph.message import add_messages  # helper function to add messages to the state

class AgentState(TypedDict):
    """The state of the agent."""
    messages: Annotated[Sequence[BaseMessage], add_messages]
    number_of_steps: int

Als Nächstes definieren Sie Ihr Wettertool.

from langchain_core.tools import tool
from geopy.geocoders import Nominatim
from pydantic import BaseModel, Field
import requests

geolocator = Nominatim(user_agent="weather-app")