Aller au contenu principal

Streaming verbose et contenu chiffré

Mis à jour le 29 juillet 2026

Suivre le travail des agents en temps réel

Une requête multi-agent prend du temps, et d’autant plus que le nombre d’agents augmente : avec 16 agents lancés sur un sujet large, l’attente se compte en dizaines de secondes. Pendant ce temps, votre application ne sait rien de ce qui se passe et votre utilisateur regarde un écran qui ne bouge pas. Deux mécanismes répondent à ce problème, mais ils ne servent pas du tout la même chose : le streaming verbose vous ouvre une fenêtre sur l’activité des agents pendant l’inférence, le contenu chiffré préserve leur état d’un tour de conversation au suivant. Les confondre conduit à activer le mauvais paramètre et à payer des tokens pour rien.

Ce que montre le streaming standard

En streaming standard, vous recevez le texte final du leader au fil de sa génération, et rien d’autre.

chat = client.chat.create(
    model="grok-4.20-multi-agent-0309",
    agent_count=4,
)
chat.append(user("Ma question"))

for response, chunk in chat.stream():
    if chunk.content:
        print(chunk.content, end="", flush=True)

C’est parfaitement suffisant pour la majorité des intégrations : vous affichez la réponse mot à mot, l’utilisateur voit quelque chose apparaître, l’affaire est réglée. Le point aveugle est en amont. Tant que les sub-agents cherchent et que le leader n’a pas commencé sa synthèse, le flux reste vide, et vous n’avez aucun moyen de distinguer une recherche en cours d’une requête bloquée.

Ouvrir la boîte avec verbose_streaming

Il suffit d’ajouter verbose_streaming dans le paramètre include pour que les appels d’outils remontent également dans le flux, au moment où ils se produisent.

from xai_sdk.tools import web_search, x_search

chat = client.chat.create(
    model="grok-4.20-multi-agent-0309",
    agent_count=16,
    tools=[web_search(), x_search()],
    include=["verbose_streaming"],
)

chat.append(user("Analyse les réactions aux dernières annonces d'Apple"))

for response, chunk in chat.stream():
    if chunk.content:
        print(chunk.content, end="", flush=True)
    # Les appels d'outils sont aussi visibles en temps reel

Vous voyez alors les recherches web partir, les résultats revenir, puis le leader entamer sa rédaction. Trois usages en découlent directement. Pour le débogage, vous vérifiez que les agents cherchent bien dans la direction attendue : si votre question porte sur les réactions du public et que toutes les requêtes visent des fiches techniques, votre prompt est en cause, pas le modèle. Pour l’expérience utilisateur, ces événements alimentent un indicateur de progression honnête — « recherche de sources », « analyse des résultats » — au lieu d’un spinner générique. Pour le monitoring enfin, vous comprenez après coup pourquoi une requête a duré une minute, parce que vous savez combien de recherches ont été lancées.

Le contenu chiffré n’est pas une fenêtre, c’est une mémoire

use_encrypted_content répond à une autre question. Il ne vous donne accès à aucun raisonnement en clair : il permet au modèle de conserver l’état interne des agents entre les tours d’une même conversation.

chat = client.chat.create(
    model="grok-4.20-multi-agent-0309",
    agent_count=4,
    use_encrypted_content=True,
)

Quand ce paramètre est actif, la réponse embarque un bloc chiffré qui contient l’état des sub-agents : le résultat de leurs recherches, le contexte qu’ils ont accumulé. Au message suivant, ce bloc est retransmis automatiquement, et le modèle repart de ce qui a déjà été trouvé plutôt que de tout recalculer. Vous, vous ne pouvez pas le lire — il est destiné au modèle, pas à votre journal applicatif.

L’activation se décide sur un critère simple : allez-vous poser plusieurs questions liées ? Une session où l’on demande d’abord une vue d’ensemble puis un approfondissement sur le troisième point en tire un bénéfice net, tout comme une investigation longue où le contexte des tours précédents fait tout l’intérêt. À l’inverse, pour une question isolée qui appelle une réponse et rien de plus, le bloc chiffré n’est qu’un surcoût : il ajoute des tokens à chaque tour, facturés comme les autres.

Rien n’empêche de combiner les deux mécanismes, et c’est même la configuration naturelle d’un assistant de recherche interactif : vous suivez l’activité en direct et le contexte survit d’un tour à l’autre.

chat = client.chat.create(
    model="grok-4.20-multi-agent-0309",
    agent_count=16,
    tools=[web_search(), x_search()],
    include=["verbose_streaming"],
    use_encrypted_content=True,
)

Points clés à retenir

  • verbose_streaming révèle les appels d’outils en temps réel (débogage, UX, monitoring)
  • use_encrypted_content conserve l’état des sub-agents entre les tours de conversation
  • Le contenu chiffré n’est pas lisible — il sert au modèle, pas à vous
  • Combinez les deux pour les sessions de recherche interactives
  • N’activez le contenu chiffré que si vous prévoyez des conversations multi-tours