Conversations persistantes
L’état qui persiste entre les échanges
L’un des avantages majeurs de l’API Agents par rapport à Chat Completions est la persistance des conversations. Vous n’avez plus à gérer manuellement l’historique des messages — Mistral le fait pour vous côté serveur.
Démarrer une conversation
La méthode conversations.start() crée une nouvelle conversation et envoie le premier message :
from mistralai import Mistral
import os
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
# Créer un agent
agent = client.beta.agents.create(
model="mistral-medium-latest",
name="Assistant Projet",
description="Assistant de gestion de projet.",
instructions="Vous aidez à organiser et suivre les projets. Soyez structuré."
)
# Démarrer la conversation
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Je lance un nouveau projet de refonte de notre site web. Budget : 50K€, deadline : septembre 2026."
)
print(f"Conversation ID : {response.conversation_id}")
Le conversation_id retourné est votre clé pour continuer cette conversation plus tard.
Continuer une conversation
Pour ajouter un message à une conversation existante, fournissez le conversation_id :
# Premier échange
response1 = client.beta.conversations.start(
agent_id=agent.id,
inputs="Je lance un projet de refonte web. Budget 50K€."
)
# Deuxième échange — l'agent se souvient du contexte
response2 = client.beta.conversations.append(
conversation_id=response1.conversation_id,
inputs="Quelles sont les étapes prioritaires ?"
)
# Troisième échange — toujours dans le même contexte
response3 = client.beta.conversations.append(
conversation_id=response2.conversation_id,
inputs="Rédige un planning pour les 3 premiers mois."
)
Le mécanisme d’immutabilité
Chaque appel à conversations.append() retourne un nouveau conversation_id. L’ancien reste accessible en lecture, mais vous devez utiliser le dernier ID pour le prochain append.
# Chaque append retourne un nouvel ID
id_1 = response1.conversation_id # "conv-aaa"
id_2 = response2.conversation_id # "conv-bbb"
id_3 = response3.conversation_id # "conv-ccc"
# Utilisez toujours le DERNIER id pour continuer
response4 = client.beta.conversations.append(
conversation_id=id_3, # Pas id_1 ou id_2
inputs="Ajoute les jalons de validation client."
)
Lire l’historique d’une conversation
conversation = client.beta.conversations.retrieve(
conversation_id=response.conversation_id
)
for entry in conversation.entries:
print(f"[{entry.role}] {entry.type}: {entry.content[:100]}...")
Gérer le stockage
Par défaut, les conversations sont stockées dans le cloud Mistral. Vous pouvez désactiver ce comportement :
# Conversation éphémère — rien n'est sauvegardé
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Données confidentielles à analyser...",
store=False
)
Avec store=False :
- La conversation n’est pas récupérable après la session
- Les données ne sont pas conservées sur les serveurs Mistral
- Utile pour le traitement de données sensibles
Pattern de conversation multi-tours
Voici un pattern complet pour gérer une conversation interactive :
from mistralai import Mistral
import os
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
agent = client.beta.agents.create(
model="mistral-large-latest",
name="Coach Technique",
description="Coach pour les décisions techniques.",
instructions="Vous êtes un coach technique senior. Posez des questions pour comprendre le contexte avant de conseiller."
)
# Boucle conversationnelle
conversation_id = None
while True:
user_input = input("Vous : ")
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}")
Points clés à retenir
conversations.start()crée une nouvelle conversation avec un premier messageconversations.append()ajoute un message à une conversation existante- Chaque append retourne un nouveau
conversation_id— utilisez toujours le dernier store=Falsedésactive la persistance côté Mistral pour les données sensibles- L’agent conserve tout le contexte de la conversation sans que vous ayez à renvoyer l’historique