Zum Hauptinhalt springen
Lektion 11 von 14 · Function Calling mit Grok

Mehrwendige Gespräche mit Tools

Lektion 11 von 14 Aktualisiert am 29. Juli 2026 Entwickler
Auf dieser Seite
  1. Mehrwendige Gespräche mit Funktionsaufrufen
  2. Der Parameter max_turns
  3. Clientseitiger Mehrwendigen-Loop
  4. Mehrwendiger Kontext mit der Responses API
  5. Muster für mehrwendige Gespräche
  6. Speicherungsverwaltung
  7. Kernaussagen

Mehrwendige Gespräche mit Funktionsaufrufen

In einem echten Gespräch kann das Modell Tools mehrfach während des Austauschs aufrufen. Jede Wendung kann neue Aufrufe beinhalten, Ergebnisse, die weitere Aufrufe auslösen, oder Anfragen zur Klärung durch den Nutzer, bevor ein Tool verwendet wird.

Der Parameter max_turns

Der Parameter max_turns begrenzt die Anzahl der Assistenten/Tool-Wendungen serverseitig in einer einzigen Anfrage. Er gilt ausschließlich für integrierte Tools (web_search, code_interpreter usw.).

response = client.responses.create(
    model="grok-4.5",
    input="Analysieren Sie die Tech-Trends 2026",
    tools=[{"type": "web_search"}],
    max_turns=5  # Maximale 5 Websuchen vor der Antwort
)

Wichtiger Punkt: Clientseitige Tool-Aufrufe setzen den Zähler zurück. Wenn Sie ein function_call_output zurücksenden, beginnt eine neue max_turns-Zuweisung.

Clientseitiger Mehrwendigen-Loop

Um Gespräche zu verwalten, bei denen das Modell Tools mehrfach aufruft, implementieren Sie einen Loop:

import json

def multi_turn_chat(user_message, tools, max_iterations=10):
    messages = [{"role": "user", "content": user_message}]

    for i in range(max_iterations):
        response = client.chat.completions.create(
            model="grok-4.5",
            messages=messages,
            tools=tools
        )

        message = response.choices[0].message
        messages.append(message)

        # Wenn kein tool_call vorliegt, ist das Gespräch beendet
        if not message.tool_calls:
            return message.content

        # Führen Sie alle angeforderten Tools aus
        for tool_call in message.tool_calls:
            args = json.loads(tool_call.function.arguments)
            result = execute_function(tool_call.function.name, args)
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": json.dumps(result)
            })

    return "Maximale Anzahl an Iterationen erreicht"

Die Variable max_iterations ist eine wesentliche Sicherung, um unendliche Schleifen zu verhindern. In der Produktion sollten Sie einen vernünftigen Grenzwert festlegen (5–10 Wendungen).

Mehrwendiger Kontext mit der Responses API

Die Responses API bietet zwei Mechanismen, um den Kontext aufrechtzuerhalten:

1. Remote-Speicherung

# Erste Nachricht
r1 = client.responses.create(
    model="grok-4.5",
    input="Wie ist das Wetter in Paris?",
    tools=tools,
    store_messages=True
)

# Tool-Ergebnis
r2 = client.responses.create(
    model="grok-4.5",
    input=[{
        "type": "function_call_output",
        "call_id": r1.output[0].call_id,
        "output": {temp: 18}
    }],
    previous_response_id=r1.id,
    store_messages=True
)

# Nachfolgende Frage (Kontext wird erhalten)
r3 = client.responses.create(
    model="grok-4.5",
    input="Wie sieht es morgen aus?",
    previous_response_id=r2.id,
    tools=tools,
    store_messages=True
)

Der Vorteil: Sie müssen die Nachrichtenverlaufsgeschichte nicht selbst verwalten. xAI speichert und ruft sie automatisch über previous_response_id ab.

2. Clientseitiger verschlüsselter Inhalt

response = client.responses.create(
    model="grok-4.5",
    input="Suchen Sie Flugpreise nach Nizza",
    tools=tools,
    use_encrypted_content=True
)

Mit use_encrypted_content=True erhalten Sie Schlussfolgerungen und Tool-Ergebnisse in verschlüsselter Form. Sie senden sie in nachfolgenden Anfragen unverändert zurück, ohne sie lesen zu können. Dies ist nützlich, wenn Sie nicht möchten, dass Daten in Klartext durch Ihren Server laufen.

Muster für mehrwendige Gespräche

Muster: Suche dann Aktion

Wendung 1 : Nutzer → "Finden Sie eine günstige Flugverbindung Paris-Nizza"
             Modell → tool_call: search_flights(from="CDG", to="NCE")
             Client → Ergebnis : [{flight1}, {flight2}, {flight3}]
Wendung 2 : Modell → "Ich habe 3 Flüge gefunden. Der günstigste kostet 89 €. Möchten Sie ihn buchen?"
             Nutzer → "Ja, buchen Sie den 89 €-Flug"
Wendung 3 : Modell → tool_call: book_flight(flight_id="FL123", passengers=1)

Muster: Datenaggregation

Wendung 1 : Modell → tool_call: get_sales(month="march")
Wendung 2 : Modell → tool_call: get_expenses(month="march")
Wendung 3 : Modell → tool_call: get_headcount(month="march")
Wendung 4 : Modell → "Hier ist der Monatsbericht: Umsatz +12 %, Ausgaben -3 %, Personalbestand stabil."

Muster: Progressive Verfeinerung

Wendung 1 : Modell → tool_call: search_products(query="Laufschuhe")
             Ergebnis → 150 Produkte
Wendung 2 : Modell → "Ich habe 150 Produkte gefunden. Welche Größe und welches Budget?"
             Nutzer → "42, maximal 120 €"
Wendung 3 : Modell → tool_call: search_products(query="Laufschuhe", size=42, max_price=120)
             Ergebnis → 8 Produkte

Speicherungsverwaltung

In langen Gesprächen wächst die Historie – die jeden tool_call und jedes Tool-Ergebnis enthält – schnell, und damit auch die Kosten pro Wendung. Ihnen stehen drei Strategien zur Verfügung, von manuell bis voll delegiert. Die periodische Zusammenfassung kondensiert ältere Wendungen in einen Absatz, der in den Systemprompt eingespeist wird: Sie behalten den Kern vergangener Austausche für einen Bruchteil ihres Token-Gewichts bei, auf Kosten eines gewissen Detailverlusts. Das gleitende Fenster ist zwar grober, aber einfacher: Behalten Sie nur die letzten N Wendungen bei und akzeptieren Sie, dass das Modell den Anfang des Gesprächs vergisst – geeignet, wenn ältere Austausche keine operative Bedeutung mehr haben. Remote-Speicherung delegiert das Problem schließlich an xAI mit store_messages=True: Die Historie lebt serverseitig, und Ihre Anwendung trägt nur eine Referenz. Die richtige Wahl hängt davon ab, was Ihre Anwendung zu erinnern hat und für wie lange.

Kernaussagen

  • max_turns begrenzt serverseitige Tool-Wendungen – clientseitige Tools setzen den Zähler zurück
  • Implementieren Sie einen Loop mit max_iterations, um unendliche Schleifen zu verhindern
  • previous_response_id verknüpft Gespräche, ohne die Historie erneut zu senden
  • store_messages=True delegiert die Kontextspeicherung an xAI
  • use_encrypted_content=True schützt Daten während der Übertragung
  • Verwalten Sie den Speicher in langen Gesprächen (Zusammenfassung, gleitendes Fenster)