--- type: workflow title: Afficher une réponse au fil de l'eau description: Comment piighost restaure une réponse du modèle diffusée au fil de l'eau, retient un jeton coupé entre deux morceaux jusqu'à ce qu'il soit entier, et ce qui reste à l'écran quand le flux s'interrompt. tags: [streaming, deanonymize, stream-decoder, invented-placeholder, langchain] sources: - id: openwiki-source-219ef8159700bea2d8181beb resource: repo://src/piighost/components/placeholder/streaming.py - id: openwiki-source-60f405cf9fd8c0cba8a61889 resource: repo://src/piighost/integrations/_deidentify.py - id: openwiki-source-85881a85af445f438a8d7d5f resource: repo://src/piighost/integrations/langchain/middleware.py generated: { by: "claude-code", at: "2026-10-02T18:00:00.000Z" } --- # Afficher une réponse au fil de l'eau ## En bref - Le modèle envoie sa réponse en morceaux, que l'application affiche au fil de l'eau. - Un jeton peut arriver coupé entre deux morceaux, par exemple « `<>` ». - Le décodeur de flux de `piighost` retient le début du jeton jusqu'à ce qu'il soit entier, puis le restaure une seule fois. - Sans ce décodeur, l'utilisateur lit le jeton à l'écran. - Si le flux est coupé au milieu d'un jeton, le début de ce jeton reste à l'écran. Il ne contient aucune valeur réelle. Besoins couverts, décrits dans [Besoins par profil](../needs-by-profile.md) : - Développeur : DEV-8, DEV-9 - Utilisateur de l'application : USER-1, USER-4 Les termes sont définis dans le [glossaire](../glossary.md). La restauration d'une réponse entière est décrite dans [Suivre une conversation et restaurer la réponse](follow-a-conversation.md). ## Pour le métier `piighost` n'a pas d'écran. Ce que vous pouvez constater, c'est le texte qui s'affiche pendant que le modèle répond. Le décodeur de flux doit être branché par l'équipe de développement. ### Qui intervient | Acteur | Rôle | |---|---| | L'utilisateur final | lit la réponse pendant qu'elle s'écrit | | Le modèle | envoie sa réponse en morceaux | | L'application | lit le flux et fait passer chaque morceau par le décodeur | | `piighost` | restaure les jetons morceau par morceau | ### Le trajet d'une réponse en flux ```mermaid flowchart TD A["Morceau envoyé par le modèle"] --> B{"Début de jeton non fermé ?"} B -- non --> C["Texte affiché aussitôt"] B -- oui --> D["Début retenu"] D --> E["Morceau suivant"] E --> F["Jeton complet restauré"] F --> C ``` Exemple : la conversation associe `<>` à Jean Dupont et `<>` à jean.dupont@exemple.fr. | Morceau reçu | Texte affiché | |---|---| | « Bonjour <>, je vous » | « Jean Dupont, je vous » | | « écris à <>. » | « jean.dupont@exemple.fr. » | L'utilisateur a lu « Bonjour Jean Dupont, je vous écris à jean.dupont@exemple.fr. » sans attendre la fin du flux. **Comment vérifier** : faites répondre le modèle avec un nom connu de la conversation. L'écran ne doit jamais montrer « `<>. » donne | |---|---| | Refuser (par défaut) | « Bonjour », puis le flux s'interrompt sur une erreur | | Retirer | « Bonjour . » | | Garder | « Bonjour `<>`. » | **BR-STREAM-07.** Quand l'application restaure chaque morceau séparément, sans le décodeur, alors un jeton coupé n'est jamais reconnu, et l'utilisateur lit « Bonjour `<>`. ». **BR-STREAM-08.** Quand la réponse passe par un proxy du serveur `piighost-api`, alors le proxy restaure lui aussi le flux avec ce décodeur. Le proxy OpenAI ne restaure que le texte, pas les arguments d'outil. Aucun des deux proxys, OpenAI et Anthropic, n'applique le réglage des jetons inventés. ### Ce que voit l'utilisateur final Une réponse qui s'écrit au fil de l'eau, avec les vraies valeurs. Un léger retard apparaît quand un jeton ou un « `<<` » est en cours. Seul un flux interrompu laisse un morceau de jeton à la fin. ### Questions fréquentes **L'écran montre `<>` pendant le flux.** L'application ne fait pas passer les morceaux par le décodeur (BR-STREAM-07). Demandez à l'équipe de développement de le brancher. **La réponse se termine par « `<