/pattern/react/

01 · Single AgentReason+ActThought-Action-Observation Loop

ReAct.
Denken, handeln, beobachten, neu denken.

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

  • 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.

Wann es nach hinten losgeht

  • Der Plan im Voraus bekannt ist — verwende Plan-and-Execute.
  • Kosten pro LLM-Aufruf streng begrenzt sind.
  • Die Aufgabe reine Textgenerierung ohne externe Daten ist.

Die Abwägung

Hohe Anpassungsfähigkeit wird auf Kosten eines deutlich höheren Token- und Aufrufvolumens pro Schritt erkauft.

Das mentale Modell

Eine Schleife, die du auf eine Serviette zeichnen kannst.

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.

ThinkActObserve
Einmal durchspielen

Ein realer Ablauf, Schritt für Schritt.

Aufgabe"Hat unser größter Konkurrent einen neuen Tarif angekündigt?"
1 / 7
Gedanke 1"Große Frage, noch kein Plan. Ich rufe zuerst die Preisseite des Konkurrenten ab."
Aktion 1fetch_page(url="acmecorp.com/pricing")
Beobachtung 1Seite listet eine Preisstufe namens "Pro" zu €29 auf — aber kein Veröffentlichungsdatum ist sichtbar.
Gedanke 2"Der Preis ist mir neu. Ich brauche das Ankündigungsdatum — Pressemitteilungen versuchen."
Aktion 2web_search("AcmeCorp new tier announcement 2026")
Beobachtung 2Pressemitteilung vom 14. April 2026 bestätigt den Launch.
Antwort"AcmeCorp hat am 14. April 2026 eine Pro-Preisstufe zu €29 eingeführt."
Im Code

Die Schleife ist schon eingebaut.

LangGraphpython
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},
)
Fallstricke

Drei Wege, wie dieses Pattern Probleme verursachen kann.

Unbegrenztes Denken

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.

Token-Explosion durch Verlauf

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.

Halluzinierte Tool-Aufrufe

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.

Framework-Unterstützung

Wo ReAct nativ ist.

LangGraphcreate_react_agent prebuiltNativ
OpenAI Agents SDKdefault agent loopNativ
CrewAIagent runtime defaultNativ
Google ADKtool-calling agentsNativ
Microsoft Agent FrameworkReAct primitivesNativ

Suche

Patterns, Frameworks und Seiten durchsuchen.