Wann man dazu greift
- Die Aufgabe Tool-Nutzung erfordert und der genaue Weg nicht im Voraus geplant werden kann.
- Der Agent adaptiv auf Tool-Ergebnisse reagieren muss.
- Anpassungsfähigkeit wichtiger ist als die Minimierung von LLM-Aufrufen.
/pattern/react/
Der Agent wechselt iterativ zwischen einem Denkschritt und einem Tool-Aufruf ab, bis das Ziel erreicht ist. Er beobachtet das Ergebnis der Aktion und leitet daraus den nächsten Schritt ab.
Wann man dazu greift
Wann es nach hinten losgeht
Die Abwägung
Hohe Anpassungsfähigkeit wird auf Kosten eines deutlich höheren Token- und Aufrufvolumens pro Schritt erkauft.
ReAct ist keine Architektur — es ist eine Haltung. Drei Momente, die wiederholt werden, bis die Aufgabe erledigt scheint. Beobachte den laufenden Loop; er ist das gesamte Pattern.
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")
graph = create_react_agent(
model,
tools=[web_search, fetch_page],
prompt="Answer with tool-use.",
)
# Built-in loop: model -> tools -> model -> ... -> END
# `recursion_limit` is your guard against runaway loops.
result = graph.invoke(
{"messages": [("user", query)]},
config={"recursion_limit": 10},
)Das Modell denkt weiter, trifft aber nie eine Entscheidung zur Antwort. Ein Budget für Iterationen ist nicht optional — es ist der Abbruchmechanismus des Loops.
Lösung · Hartes max_turns- oder recursion_limit-Limit. Das Limit als erwartetes, nicht als außergewöhnliches Ergebnis behandeln.
Jede Iteration hängt an die Nachrichtenhistorie an. Nach 8 Durchläufen mit Tool-Nutzung werden 8 Beobachtungen in jeden nachfolgenden Aufruf mitgeschleppt.
Lösung · Alte Beobachtungen zusammenfassen oder ein Scratchpad-Pattern (Working Memory) verwenden, um nur den relevanten Ausschnitt zu behalten.
Das Modell erfindet einen Tool-Namen oder fingiert einen Parameter, den das Schema nicht erlaubt. Ohne Validierung wird das Falsche ausgeführt — oder es kommt zum Absturz.
Lösung · Jeden Tool-Aufruf schema-validieren. Das JSON des Modells wie jede andere nicht vertrauenswürdige Eingabe behandeln.
Patterns, Frameworks und Seiten durchsuchen.