Mehrwendige Gespräche mit Tools
Auf dieser Seite
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_turnsbegrenzt 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_idverknüpft Gespräche, ohne die Historie erneut zu sendenstore_messages=Truedelegiert die Kontextspeicherung an xAIuse_encrypted_content=Trueschützt Daten während der Übertragung- Verwalten Sie den Speicher in langen Gesprächen (Zusammenfassung, gleitendes Fenster)