0Pricing
AI Agents · Lektion

ReAct von Grund auf implementieren

Schreiben Sie eine 100-zeilige Python-Implementierung ohne LangChain: Parsen Sie Action-Zeilen, führen Sie Tools aus und wiederholen Sie dies bis zur Final Answer.

ReAct von Grund auf implementieren ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.

Erstellen Sie die Schleife selbst

Sie können ReAct in etwa 100 Zeilen Python schreiben – ganz ohne Framework. Wenn Sie das einmal selbst tun, entwickeln Sie ein besseres Verständnis dafür, was Frameworks abstrahieren.

Step 1: Define Tools

import json, math

def calculator(expression: str) -> str:
    try:
        return str(eval(expression, {'__builtins__': {}}, vars(math)))
    except Exception as e:
        return f'Error: {e}'

def search_wikipedia(query: str) -> str:
    # placeholder — call a real search API
    return f'Wikipedia summary for: {query}'

TOOLS = {
    'calculator': calculator,
    'search_wikipedia': search_wikipedia,
}

print(calculator('2 + 2 * sqrt(16)'))
print(search_wikipedia('agents'))

Step 2: Tool Schemas

schemas = [
    {'type': 'function', 'function': {
        'name': 'calculator',
        'description': 'Evaluate a math expression like 2 + 2 * sqrt(16)',
        'parameters': {'type': 'object', 'properties': {'expression': {'type': 'string'}}, 'required': ['expression']}
    }},
    {'type': 'function', 'function': {
        'name': 'search_wikipedia',
        'description': 'Search Wikipedia and return a summary',
        'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}
    }}
]
import json
print(json.dumps(schemas, indent=2))

Step 3: System Prompt

system = '''
You are a research assistant. Use the available tools when needed.
Think step by step. If you have enough information, give a final answer.
'''
print(system.strip())

Step 4: The Loop

from openai import OpenAI
client = OpenAI()

def react(question, max_steps=10):
    messages = [
        {'role': 'system', 'content': system},
        {'role': 'user', 'content': question}
    ]
    for step in range(max_steps):
        r = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            tools=schemas,
        )
        msg = r.choices[0].message
        messages.append(msg)
        if not msg.tool_calls:
            return msg.content
        for tc in msg.tool_calls:
            args = json.loads(tc.function.arguments)
            try:
                result = TOOLS[tc.function.name](**args)
            except Exception as e:
                result = f'Tool error: {e}'
            messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': str(result)})
    return 'Step limit reached.'

Step 5: Run It

answer = react('What is the population of Tokyo times the square root of pi?')
print(answer)

Schritt 6: Logging hinzufügen

Protokollieren Sie jeden Schritt für das Debugging:

def react_verbose(question, max_steps=10):
    messages = [...]
    for step in range(max_steps):
        r = client.chat.completions.create(model='gpt-4o-mini', messages=messages, tools=schemas)
        msg = r.choices[0].message
        print(f'[step {step}] thought: {msg.content}')
        if msg.tool_calls:
            for tc in msg.tool_calls:
                print(f'[step {step}] action: {tc.function.name}({tc.function.arguments})')
        ...

Schritt 7: Schrittzähler als Tool

Manche Agenten nehmen die Schrittzahl in den System-Prompt auf, damit das Modell weiß, wann es zu einem Ergebnis kommen soll:

system = f'You have at most {MAX_STEPS} steps. Step {current_step}/{MAX_STEPS}. ...'

Schritt 8: Format der finalen Antwort

Wenn Sie eine strukturierte Ausgabe wünschen, erzwingen Sie einen abschließenden Tool-Aufruf:

tools.append({'type': 'function', 'function': {
    'name': 'final_answer',
    'description': 'Submit the final answer to the user.',
    'parameters': {'type': 'object', 'properties': {'answer': {'type': 'string'}}, 'required': ['answer']}
}})
# Loop terminates when final_answer is called.

Schritt 9: Tool-Fehler

Geben Sie Fehler immer als Tool-Ergebnisse zurück, damit sich der Agent davon erholen kann:

try:
    result = TOOLS[name](**args)
except Exception as e:
    result = f'TOOL ERROR: {type(e).__name__}: {e}'
# Model sees the error and can try a different approach.

Schritt 10: Parallele Tool-Aufrufe

Wenn msg.tool_calls mehrere Einträge enthält, führen Sie sie parallel aus:

import asyncio

async def run_tools(tool_calls):
    async def run_one(tc):
        args = json.loads(tc.function.arguments)
        return tc.id, TOOLS[tc.function.name](**args)
    return await asyncio.gather(*[run_one(tc) for tc in tool_calls])

Schritt 11: Unterhaltung begrenzen

Selbst innerhalb von MAX_STEPS können Nachrichtenlisten stark anwachsen. Kürzen Sie sie zwischen den Durchläufen anhand der Token-Anzahl:

if total_tokens(messages) > 6000:
    messages = trim_messages(messages)

Schritt 12: Für den Produktionseinsatz härten

Für den Produktionseinsatz sollten Sie Folgendes hinzufügen: Timeouts für Tool-Aufrufe, Quoten pro Tool, Wiederholungsversuche mit Backoff bei API-Fehlern und vollständige Trace-Protokollierung. Die obige Schleife ist jedoch Ihr Grundgerüst.

Behandlung von Tool-Fehlern

Was sollten Sie tun, wenn ein Tool eine Ausnahme auslöst?

Zusammenfassung

ReAct in etwa 80 Zeilen: Nachrichtenliste + While-Schleife + Dispatch-Tabelle. Frameworks sorgen für zusätzlichen Komfort, aber der Kern besteht daraus.

Häufig gestellte Fragen

Ist die Lektion „ReAct von Grund auf implementieren“ kostenlos?

Ja — der vollständige Text von „ReAct von Grund auf implementieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „ReAct von Grund auf implementieren“?

Schreiben Sie eine 100-zeilige Python-Implementierung ohne LangChain: Parsen Sie Action-Zeilen, führen Sie Tools aus und wiederholen Sie dies bis zur Final Answer. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „ReAct von Grund auf implementieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. ReAct: Muster aus Schlussfolgern und Handeln
  2. ReAct von Grund auf implementieren
  3. Gängige Tool-Sets (Web, Taschenrechner, RAG)
  4. Tool-Fehler erkennen und beheben
← Zurück zu AI Agents