Contexte multi-tour : stockage et chiffrement
Le probleme du contexte entre requetes
Dans une conversation multi-tour avec des outils, le volume de contexte augmente rapidement. Chaque appel d’outil ajoute ses resultats au fil de messages, et le raisonnement interne du modele doit etre preserve pour la coherence. Deux mecanismes resolvent ce probleme : le stockage distant et le chiffrement cote client.
Methode 1 : store_messages et previous_response_id
Le stockage distant delegue la gestion du contexte aux serveurs xAI. Vous activez store_messages=True dans votre premiere requete, puis vous chainrez les requetes suivantes avec previous_response_id :
# Premiere requete : activer le stockage
response = await client.chat.completions.create(
model="grok-4",
messages=[{"role": "user", "content": "Analyse ce dataset de ventes"}],
tools=my_tools,
store_messages=True
)
response_id = response.id # sauvegarder l'identifiant
# Requete suivante : utiliser le contexte stocke
response2 = await client.chat.completions.create(
model="grok-4",
messages=[{"role": "user", "content": "Quels sont les 3 produits les plus vendus ?"}],
previous_response_id=response_id,
store_messages=True
)
Avec cette approche, vous n’avez pas besoin de renvoyer l’historique complet des messages. Le serveur xAI conserve le contexte et le rattache automatiquement. Cela reduit la taille de vos requetes et simplifie votre code.
Avantages
- Requetes plus legeres (pas besoin de renvoyer tout l’historique)
- Le raisonnement interne du modele est preserve automatiquement
- Pas de gestion complexe de l’etat cote client
Limites
- Les messages sont stockes sur les serveurs xAI (consideration de confidentialite)
- L’identifiant
response_iddoit etre conserve entre les requetes - Le stockage a une duree de retention limitee
Methode 2 : use_encrypted_content
Le chiffrement cote client offre une alternative pour les cas ou vous souhaitez conserver le controle du contexte sans stocker vos donnees sur les serveurs xAI :
# Activer le contenu chiffre
response = await client.chat.completions.create(
model="grok-4",
messages=[{"role": "user", "content": "Analyse ce contrat"}],
tools=my_tools,
use_encrypted_content=True
)
# Le raisonnement et les sorties d'outils sont retournes chiffres
# Vous les ajoutez tel quel aux messages suivants
messages = [
{"role": "user", "content": "Analyse ce contrat"},
response.choices[0].message, # contient le contenu chiffre
{"role": "user", "content": "Quelles sont les clauses de resiliation ?"}
]
response2 = await client.chat.completions.create(
model="grok-4",
messages=messages,
use_encrypted_content=True
)
Avec use_encrypted_content=True, le raisonnement interne et les resultats d’outils sont retournes sous forme chiffree. Vous ne pouvez pas les lire, mais vous les renvoyez dans les requetes suivantes. Le serveur les dechiffre pour maintenir la continuite du raisonnement.
Avantages
- Le contexte reste sous votre controle (pas de stockage distant)
- Le raisonnement interne est preserve sans etre expose en clair
- Compatible avec les politiques de confidentialite strictes
Limites
- Les requetes sont plus volumineuses (le contenu chiffre est inclus)
- Vous devez gerer l’historique des messages cote client
Choisir entre les deux methodes
Le choix depend de votre contexte :
- store_messages : preferable pour les applications de chat, les assistants interactifs, et les cas ou la simplicite prime. Le contexte est gere automatiquement.
- use_encrypted_content : preferable pour les applications sensibles, le traitement de documents confidentiels, et les cas ou les donnees ne doivent pas quitter votre infrastructure (au-dela du transit API).
Combiner avec le workflow hybride
Les deux methodes s’integrent dans le pattern de boucle vu dans la lecon precedente :
async def multi_turn_conversation(questions: list[str]) -> list[str]:
responses = []
previous_id = None
for question in questions:
kwargs = {
"model": "grok-4",
"messages": [{"role": "user", "content": question}],
"tools": my_tools,
"store_messages": True,
}
if previous_id:
kwargs["previous_response_id"] = previous_id
response = await client.chat.completions.create(**kwargs)
previous_id = response.id
responses.append(response.choices[0].message.content)
return responses
Ce pattern enchaine les questions en preservant le contexte complet de la conversation, y compris les resultats d’outils et le raisonnement interne du modele.
Points cles a retenir
store_messages=True+previous_response_iddelegue la gestion du contexte a xAIuse_encrypted_content=Truepreserve le raisonnement sans stockage distant- Le choix depend de vos contraintes de confidentialite et de simplicite
- Les deux methodes sont compatibles avec les workflows multi-tour et les outils hybrides
previous_response_idelimine le besoin de renvoyer l’historique complet des messages