Aller au contenu principal

Contexte multi-tour : stockage et chiffrement

Mis à jour le 30 juillet 2026

Le problème du contexte entre requêtes

Dans une conversation multi-tour avec des outils, le volume de contexte augmente rapidement. Chaque appel d’outil ajoute ses résultats au fil de messages, et le raisonnement interne du modèle doit être préservé pour la cohérence. Deux mécanismes résolvent ce problème : le stockage distant et le chiffrement côté client.

Méthode 1 : store_messages et previous_response_id

Le stockage distant délègue la gestion du contexte aux serveurs xAI. Vous activez store_messages=True dans votre première requête, puis vous chaînez les requêtes suivantes avec previous_response_id :

# Première requête : activer le stockage
response = await client.chat.completions.create(
    model="grok-4.5",
    messages=[{"role": "user", "content": "Analyse ce dataset de ventes"}],
    tools=my_tools,
    store_messages=True
)

response_id = response.id  # sauvegarder l'identifiant

# Requête suivante : utiliser le contexte stocké
response2 = await client.chat.completions.create(
    model="grok-4.5",
    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 réduit la taille de vos requêtes et simplifie votre code.

Avantages

  • Requêtes plus légères (pas besoin de renvoyer tout l’historique)
  • Le raisonnement interne du modèle est préservé automatiquement
  • Pas de gestion complexe de l’état côté client

Limites

  • Les messages sont stockés sur les serveurs xAI (considération de confidentialité)
  • L’identifiant response_id doit être conservé entre les requêtes
  • Le stockage a une durée de rétention limitée

Méthode 2 : use_encrypted_content

Le chiffrement côté client offre une alternative pour les cas où vous souhaitez conserver le contrôle du contexte sans stocker vos données sur les serveurs xAI :

# Activer le contenu chiffré
response = await client.chat.completions.create(
    model="grok-4.5",
    messages=[{"role": "user", "content": "Analyse ce contrat"}],
    tools=my_tools,
    use_encrypted_content=True
)

# Le raisonnement et les sorties d'outils sont retournés chiffrés
# Vous les ajoutez tel quel aux messages suivants
messages = [
    {"role": "user", "content": "Analyse ce contrat"},
    response.choices[0].message,  # contient le contenu chiffré
    {"role": "user", "content": "Quelles sont les clauses de résiliation ?"}
]

response2 = await client.chat.completions.create(
    model="grok-4.5",
    messages=messages,
    use_encrypted_content=True
)

Avec use_encrypted_content=True, le raisonnement interne et les résultats d’outils sont retournés sous forme chiffrée. Vous ne pouvez pas les lire, mais vous les renvoyez dans les requêtes suivantes. Le serveur les déchiffre pour maintenir la continuité du raisonnement.

Avantages

  • Le contexte reste sous votre contrôle (pas de stockage distant)
  • Le raisonnement interne est préservé sans être exposé en clair
  • Compatible avec les politiques de confidentialité strictes

Limites

  • Les requêtes sont plus volumineuses (le contenu chiffré est inclus)
  • Vous devez gérer l’historique des messages côté client

Choisir entre les deux méthodes

Le choix dépend de votre contexte :

  • store_messages : préférable pour les applications de chat, les assistants interactifs, et les cas où la simplicité prime. Le contexte est géré automatiquement.
  • use_encrypted_content : préférable pour les applications sensibles, le traitement de documents confidentiels, et les cas où les données ne doivent pas quitter votre infrastructure (au-delà du transit API).

Combiner avec le workflow hybride

Les deux méthodes s’intègrent dans le pattern de boucle vu dans la leçon précédente :

async def multi_turn_conversation(questions: list[str]) -> list[str]:
    responses = []
    previous_id = None

    for question in questions:
        kwargs = {
            "model": "grok-4.5",
            "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 enchaîne les questions en préservant le contexte complet de la conversation, y compris les résultats d’outils et le raisonnement interne du modèle.

Points clés à retenir

  • store_messages=True + previous_response_id délègue la gestion du contexte à xAI
  • use_encrypted_content=True préserve le raisonnement sans stockage distant
  • Le choix dépend de vos contraintes de confidentialité et de simplicité
  • Les deux méthodes sont compatibles avec les workflows multi-tour et les outils hybrides
  • previous_response_id élimine le besoin de renvoyer l’historique complet des messages