Beständige Gespräche
Auf dieser Seite
Lektion aktualisiert am 3. November 2026 basierend auf der
mistralaiSDK-Version 3.7.0: Rufen Sie die Historie eines Gesprächs (seineentries) mitclient.beta.conversations.get_historyab; die Methoderetrieveexistiert nicht, undgetliefert nur Metadaten zum Gespräch. Quelle: client-python.
Zustand, der über den Austausch hinweg bestehen bleibt
Einer der wesentlichen Vorteile der Agents-API gegenüber Chat-Completions ist die Beständigkeit von Gesprächen. Sie müssen die Nachrichtenverlaufshistorie nicht mehr manuell verwalten – Mistral übernimmt dies serverseitig. Konkret verschwindet aus Ihrem Code die Liste von Wörterbuchobjekten, die Sie zuvor in einer Variable angesammelt, bei Kontextüberlauf abgeschnitten und bei jedem Prozessneustart neu aufgebaut haben müssen. Sie müssen lediglich eine Sache verfolgen: eine Kennung. Und diese Kennung folgt einer Regel, die bei jedem ersten Projekt verwirrt.
Ein Gespräch starten
Die Methode conversations.start() erstellt ein neues Gespräch und sendet die erste Nachricht. Das folgende Beispiel erstellt zudem den Agenten, der das Gespräch führt, und gibt ihm einen Projektkontext, auf den über mehrere Runden zugegriffen werden kann.
from mistralai.client import Mistral
import os
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
# Einen Agenten erstellen
agent = client.beta.agents.create(
model="mistral-medium-latest",
name="Projekt-Assistent",
description="Assistent für das Projektmanagement.",
instructions="Sie helfen bei der Organisation und dem Verfolgung von Projekten. Seien Sie strukturiert."
)
# Das Gespräch starten
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Ich starte ein neues Projekt zur Neugestaltung unserer Website. Budget: 50.000 €, Frist: September 2026."
)
print(f"Gesprächs-ID: {response.conversation_id}")
Die zurückgegebene conversation_id ist der Schlüssel, um dieses Gespräch später fortzusetzen. Speichern Sie sie an einer Stelle, von der Ihre Anwendung sie abrufen kann: in einer Benutzersitzung, einer Datenbank oder dem Support-Ticket, dem sie zugeordnet ist.
Ein Gespräch fortsetzen
Um eine Nachricht in ein bestehendes Gespräch hinzuzufügen, übergeben Sie die conversation_id an conversations.append(). Folgen Sie dem Verlauf in diesem Beispiel: Die zweite Frage wiederholt Budget oder Frist nicht, und die dritte fragt nach einem Zeitplan, ohne den Agenten daran zu erinnern, dass es sich um eine Website-Neugestaltung handelt. Dennoch verfügt der Agent über diesen gesamten Kontext.
# Erster Austausch
response1 = client.beta.conversations.start(
agent_id=agent.id,
inputs="Ich starte ein Projekt zur Neugestaltung einer Website. Budget 50.000 €."
)
# Zweiter Austausch — der Agent erinnert sich an den Kontext
response2 = client.beta.conversations.append(
conversation_id=response1.conversation_id,
inputs="Was sind die prioritären Schritte?"
)
# Dritter Austausch — immer noch im selben Kontext
response3 = client.beta.conversations.append(
conversation_id=response2.conversation_id,
inputs="Entwerfen Sie einen Zeitplan für die ersten drei Monate."
)
Achten Sie genau darauf, welche Kennung jeden Aufruf speist: response2 startet mit der ID von response1, response3 mit der von response2. Dies ist kein Zufall; es ist der Kernmechanismus der API.
Der Unveränderlichkeitsmechanismus
Jeder Aufruf von conversations.append() gibt eine neue conversation_id zurück. Die alte bleibt lesbar, aber Sie müssen die neueste ID für den nächsten Aufruf verwenden.
# Jeder Aufruf gibt eine neue ID zurück
id_1 = response1.conversation_id # "conv-aaa"
id_2 = response2.conversation_id # "conv-bbb"
id_3 = response3.conversation_id # "conv-ccc"
# Verwenden Sie immer die NEUESTE ID, um fortzufahren
response4 = client.beta.conversations.append(
conversation_id=id_3, # Nicht id_1 oder id_2
inputs="Fügen Sie Meilensteine für die Kundenvalidierung hinzu."
)
Der klassische Fehler besteht darin, die ursprüngliche Kennung in der Datenbank zu speichern, wenn der Benutzer den Faden öffnet, und sie dann unverändert für jede Nachricht erneut zu verwenden. Nichts stürzt ab: Die API antwortet normal, aber jede Frage startet neu vom Kontext des ersten Austauschs, und Ihr Agent scheint ohne Fehlerwarnung an Amnesie zu leiden. Überschreiben Sie die gespeicherte Kennung stets mit derjenigen, die in der Antwort zurückgegeben wird.
Abruf der Gesprächshistorie
Sie können die Historie jederzeit abrufen, was sowohl für die Fehlerbehebung als auch für die Anzeige eines Fadens in Ihrer Schnittstelle hilfreich ist.
conversation = client.beta.conversations.get_history(
conversation_id=response.conversation_id
)
for entry in conversation.entries:
print(f"[{entry.role}] {entry.type}: {entry.content[:100]}...")
Verwaltung der Speicherung
Standardmäßig werden Gespräche in der Cloud von Mistral gespeichert. Der Parameter store=False deaktiviert dieses Verhalten für Austausche, die Ihre interne Politik verbietet, auf einem Server eines Dritten zu belassen.
# Vorübergehendes Gespräch — nichts wird gespeichert
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Vertrauliche Daten zur Analyse...",
store=False
)
Das Abwägen entspricht dem Ziel: Das Gespräch ist nach der Sitzung nicht wiederherstellbar, und die Daten werden nicht auf Mistral-Servern behalten. Sie verlieren die oben beschriebene Wiedergabe der Historie, und Ihre Anwendung muss die Verfolgung von Austauschen selbst übernehmen, falls erforderlich. Treffen Sie diese Entscheidung von vornherein, nicht als letzter Checkpunkt.
Muster für mehrstufige Gespräche
Der folgende Grundriss wendet alles oben Gesagte in einem interaktiven Schleifenablauf an. Der entscheidende Punkt ist die Variable conversation_id, die auf None initialisiert wird: Sie entscheidet, welcher Aufruf getätigt wird – start() in der ersten Runde, append() danach – und sie wird nach jeder Antwort neu zugewiesen, gemäß der Regel der Unveränderlichkeit.
from mistralai.client import Mistral
import os
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
agent = client.beta.agents.create(
model="mistral-large-latest",
name="Technischer Coach",
description="Coach für technische Entscheidungen.",
instructions="Sie sind ein erfahrener technischer Coach. Stellen Sie Fragen, um den Kontext zu verstehen, bevor Sie beraten."
)
# Schleife für Gespräche
conversation_id = None
while True:
user_input = input("Sie: ")
if user_input.lower() in ["quit", "exit"]:
break
if conversation_id is None:
response = client.beta.conversations.start(
agent_id=agent.id,
inputs=user_input
)
else:
response = client.beta.conversations.append(
conversation_id=conversation_id,
inputs=user_input
)
conversation_id = response.conversation_id
for entry in response.outputs:
if hasattr(entry, "content"):
print(f"Agent: {entry.content}")
Passen Sie dies an Ihren Kontext an, indem Sie input() durch Ihre tatsächliche Nachrichtenquelle ersetzen – HTTP-Anfrage, Warteschlangen-Nachricht, Webhook-Ereignis – und die conversation_id an einer Stelle speichern, von der Ihre Anwendung sie bei der nächsten Runde finden kann.
Kernaussagen
conversations.start()erstellt ein neues Gespräch mit einer ersten Nachrichtconversations.append()fügt eine Nachricht in ein bestehendes Gespräch ein- Jeder Aufruf von
appendgibt eine neueconversation_idzurück – verwenden Sie immer die neueste store=Falsedeaktiviert die Beständigkeit auf der Seite von Mistral für sensible Daten- Der Agent behält den vollständigen Gesprächskontext bei, ohne dass Sie die Historie erneut senden müssen