GPT-Live délègue le raisonnement et l’utilisation des outils à un backend tout en gérant la conversation orale. Le travail du backend peut être exécuté par le modèle Responses configuré ou, avec la délégation au client, par tout modèle, agent ou service exploité par votre application. Dans les deux modes, votre application reste responsable des autorisations, des confirmations, des données métier et de l’état des tâches.
Pour en savoir plus sur la façon de guider le modèle en temps réel pour la délégation et l’utilisation des outils, consultez le guide de conception de prompts.
Choisissez un mode de délégation
Avec la délégation via Responses, GPT-Live appelle le modèle Responses de votre choix, lui fournit le contexte de la conversation et transmet les résultats du backend à la conversation en temps réel. Avec la délégation au client, votre application prépare le contexte, exécute un agent ou un workflow et renvoie les résultats à GPT-Live.
Commencez par la délégation via Responses si son workflow géré répond à vos besoins. Choisissez la délégation au client si vous avez besoin de mieux contrôler le contexte du backend, l’exécution ou les résultats renvoyés à GPT-Live.
| Critère | Privilégiez la délégation via Responses lorsque… | Privilégiez la délégation au client lorsque… |
|---|---|---|
| Effort de mise en œuvre | Vous souhaitez que GPT-Live prépare les requêtes destinées au backend, gère les connexions et transmette les résultats à la conversation. | Vous souhaitez développer et exploiter vous-même ces composants. |
| Révision des résultats du backend | Les résultats du backend peuvent être renvoyés directement à GPT-Live. | Votre application doit valider, expurger, combiner ou écarter les résultats avant qu’ils ne parviennent à GPT-Live. |
| Capacités du backend | Les paramètres et outils Responses pris en charge par GPT-Live conviennent à votre workflow. | Vous avez besoin d’un autre backend, de plusieurs modèles ou de capacités d’API qui dépassent la configuration gérée. |
| Maîtrise du contexte | Le contexte de conversation fourni par GPT-Live convient à votre application. | Vous devez choisir précisément les éléments de l’historique, de la mémoire et de l’état de l’application à inclure dans chaque requête au backend. |
| Politique d’exécution | Un modèle configuré et une boucle d’utilisation des outils conviennent à la tâche. | Vous avez besoin d’un routage personnalisé entre code et modèles, de solutions de repli, de points de contrôle ou de budgets pour les différentes étapes du backend. |
Par exemple, un assistant de voyage peut envoyer les questions sur le statut des vols à un service de compagnie aérienne et les modifications d’itinéraire à un agent de planification distinct. L’application choisit le backend à appeler et le résultat vérifié à renvoyer à GPT-Live.
Dans les deux modes, votre application gère l’état des tâches, fait respecter les autorisations et exige les confirmations requises avant d’exécuter ses outils personnalisés. La révision des résultats du backend relève d’une décision distincte : elle n’approuve pas chaque mot prononcé par GPT-Live et ne garantit pas son silence pendant la validation. Consultez Contrôlez la lecture si nécessaire.
La délégation au client exige également que votre application maintienne le contexte de la conversation. L’événement de délégation contient des métadonnées, et non le texte de la tâche ; utilisez les événements de transcription et l’état de l’application pour préparer la requête au backend.
Comparez la latence, la réussite des tâches et le coût sur votre propre charge de travail lorsque vous évaluez votre agent vocal. Pour des conseils adaptés à votre architecture existante, consultez Migrez vers GPT-Live.
Choisissez le mode lors de la création de la session ; pour en changer, démarrez une nouvelle session.
Configurez la délégation à Responses
Ajoutez cette configuration de délégation lors de la création de votre session Live. Choisissez le modèle Responses indépendamment du modèle vocal :
export const session = {
model: "gpt-live-1",
delegation: {
type: "responses",
responses: {
model: "gpt-5.6-terra",
instructions: "[Your backend prompt]",
},
},
};Commencez avec GPT-5.6 Terra, ou essayez GPT-5.6 Luna pour les charges de travail où le coût est déterminant. Comparez la qualité des réponses et la latence sur vos tâches avant de choisir un modèle pour le backend.
Déclarez les outils pris en charge dans delegation.responses.tools. Utilisez delegation.responses.tool_choice pour contrôler les outils que le backend peut utiliser : "auto" le laisse choisir, "required" impose un appel d’outil et "none" l’interdit. Vous pouvez aussi sélectionner une fonction par son nom. Définissez delegation.responses.parallel_tool_calls sur true pour autoriser les recherches indépendantes en parallèle, ou sur false lorsque les appels doivent s’exécuter séquentiellement. Votre application reste responsable de l’exécution de ses fonctions personnalisées et du respect des dépendances et des approbations. Ces paramètres ne forcent pas le modèle vocal à déléguer.
La configuration Responses exige de définir le paramètre model du backend à la création. Elle prend en charge les définitions function et les entrées web_search dans tools. Elle expose également max_output_tokens (au moins 16 si ce paramètre est défini), service_tier, ainsi que les paramètres reasoning et text pris en charge par le modèle de backend sélectionné. Consultez Réduisez la latence du backend pour connaître les paramètres que vous pouvez ajuster.
Si le mode Rapide est disponible pour votre modèle et votre projet, envisagez de l’utiliser pour les appels sensibles à la latence. Pour GPT-Live, sélectionnez-le avec delegation.responses.service_tier: "priority".
À mesure que la conversation évolue, envoyez session.update avec les modifications dans session.delegation.responses pour mettre à jour le modèle du backend, les instructions, les outils disponibles, tool_choice ou d’autres paramètres pris en charge sans démarrer une nouvelle session Live. Les paramètres omis conservent leur valeur. Définir delegation sur null sélectionne le mode client et ne permet pas de réinitialiser une session Responses en cours ; le changement de mode échoue avec immutable_field_update.
Ces paramètres reprennent des concepts familiers de Responses, mais Live ne prend en charge qu’un sous-ensemble de l’API Responses autonome. Live fournit le contexte de la conversation et lance les tâches déléguées. Configurez le backend via la session ; la commande Live response.create utilise cette configuration et n’accepte pas de corps de requête Responses autonome.
Orientez la conversation en direct depuis votre application
La délégation à Responses gère le workflow du backend, mais votre application peut toujours envoyer du contexte directement au modèle GPT-Live. Si vous suivez l’appel via une connexion WebSocket auxiliaire ou la connexion principale aux événements, vous pouvez utiliser session.instructions.append, session.thinking.append ou session.commentary.append avec delegation_id: null. Par exemple, un garde-fou fondé sur la transcription peut ajouter une instruction pour réorienter la conversation. Cela oriente le modèle vocal, sans modifier le prompt du backend Responses ni annuler les tâches déjà en cours.
Gérez la délégation à Responses
Pour les tâches exécutées via Responses, session.delegation.created contient target: "responses" et un response_id. Les événements Responses suivants arrivent dans une enveloppe response.event :
{
"type": "response.event",
"event_id": "event_response_1",
"delegation_id": "item_9tA2cB6n2V8c4X1z7Q5r9",
"event": {
"type": "response.output_text.delta",
"sequence_number": 4,
"item_id": "msg_123",
"output_index": 0,
"content_index": 0,
"delta": "The forecast is",
"logprobs": []
}
}Aiguillez les événements selon envelope.event.type et conservez le champ delegation_id de l’enveloppe externe. Ne traitez pas chaque valeur response.* de premier niveau comme un événement Responses sans enveloppe. Prévoyez la réception d’événements imbriqués supplémentaires du cycle de vie Responses.
La parole en direct et les tâches déléguées se poursuivent indépendamment. Une réponse du backend terminée ne signifie pas à elle seule que l’utilisateur a entendu la réponse. Utilisez la transcription de sortie et l’audio de Live pour la partie orale de l’interaction.
Menez à terme un appel de fonction à exécuter par le client
Récupérez les appels de fonction complets dans les événements response.output_item.done imbriqués. L’élément de fonction finalisé contient call_id, name et arguments ; un événement signalant la fin des arguments ne suffit pas à lui seul à identifier l’appel.
Suivez l’identifiant de réponse issu de l’événement response.created imbriqué, ainsi que le champ delegation_id de l’enveloppe externe, et collectez les appels de fonction de cette réponse à partir de response.output_item.done. Les instantanés du cycle de vie transmis contiennent délibérément response.output: [], y compris lors de response.completed ; leur tableau tools est vide, instructions vaut null et input est omis. Une liste de sortie vide à l’état final ne signifie pas qu’aucun appel de fonction n’est en attente. Utilisez les appels collectés pour déterminer quels résultats doivent être envoyés avant de poursuivre.
Après avoir exécuté l’opération autorisée, ajoutez le résultat sous forme d’élément Responses :
export function sendUpdate(connection) {
connection.send({
type: "response.item.create",
event_id: "tool_result_1",
item: {
type: "function_call_output",
call_id: "call_123",
output: '{"status":"confirmed","order_id":"order_123"}',
},
});
}Déclenchez ensuite explicitement la poursuite de la réponse :
export function sendUpdate(connection) {
connection.send({
type: "response.create",
event_id: "continue_1",
});
}Envoyez tous les résultats requis pour les appels d’outils en attente avant de poursuivre. L’ajout d’un résultat de fonction ne relance pas automatiquement la réponse. response.item.create n’émet pas d’accusé de réussite distinct ; continuez à traiter les erreurs et les événements imbriqués du cycle de vie de la réponse qui suivent.
response.create est une commande Live qui permet de créer ou de poursuivre des tâches déléguées à Responses en utilisant le backend configuré pour la session. Ne joignez à cet événement ni corps de requête de création de l’API Responses, ni remplacement du modèle de backend, ni delegation_id. Les deux commandes nécessitent la délégation à Responses.
Configurez la délégation au client
Définissez delegation lors de la création de votre session Live :
export const session = {
model: "gpt-live-1",
delegation: {
type: "client",
},
};Cela sélectionne la délégation au client pour la session. Configurez le backend séparément : votre application choisit son modèle ou service, ses instructions, ses outils et la façon d’acheminer les tâches. Si vous utilisez l’API Responses pour ce backend, définissez son modèle et ses outils dans vos propres requêtes Responses. La session Live ne configure ni n’exécute ces outils du backend.
Lorsque GPT-Live demande de l’aide, votre application construit la requête destinée au backend à partir du contexte de la conversation et de l’application, exécute la tâche et décide des résultats à renvoyer. Faites respecter les autorisations et les confirmations requises avant d’exécuter vos outils. Conservez l’historique complet de la conversation dans votre application afin de pouvoir fournir le contexte pertinent pour chaque requête au backend.
Conservez le contexte de la conversation dans votre application
Pour la délégation au client, collectez les transcriptions et conservez vous-même l’état actuel de la tâche.
Écoutez les événements session.input_transcript.delta et session.output_transcript.delta. Ces événements contiennent le texte de transcription dans delta, ainsi que les horodatages start_ms et end_ms. Conservez suffisamment d’historique pour comprendre les réponses brèves comme « oui », les corrections comme « jeudi, pas vendredi » et les détails fournis précédemment. Un fragment de transcription ne constitue pas un tour de parole complet de l’utilisateur, et les transcriptions peuvent contenir des erreurs.
L’événement distinct session.delegation.created contient un horodatage offset_ms et des métadonnées de délégation, notamment delegation.id et delegation.target. Il ne contient pas les propos de l’utilisateur ni le texte de la tâche. Utilisez les événements de transcription et l’état de l’application pour déterminer ce que souhaite l’utilisateur. Enregistrez delegation.id pour pouvoir associer les mises à jour à cette demande.
Conservez les enregistrements volumineux et les sorties complètes des outils dans le backend. Si vous créez une session de remplacement, restaurez le contexte pertinent depuis votre application et vérifiez quelles actions ont déjà été exécutées avant de répéter une opération.
Recevez une délégation côté client
session.delegation.created identifie une délégation :
{
"type": "session.delegation.created",
"event_id": "event_delegation",
"offset_ms": 1000,
"delegation": {
"id": "item_9tA2bF3h7K9m2P5q8R1s4",
"type": "delegation",
"target": "client"
}
}Lisez event.delegation.id. L’objet de délégation contient des métadonnées, pas le texte de la tâche. Conservez la transcription et le contexte de l’application dont votre gestionnaire de tâches déléguées a besoin. Les identifiants actuels commencent par le préfixe item_, comme dans cet exemple ; traitez l’identifiant complet comme une valeur opaque et renvoyez-le tel quel, sans chercher à en construire un ni à en analyser la structure.
Renvoyez un résultat en utilisant cet identifiant :
export function sendUpdate(connection) {
connection.send({
type: "session.commentary.append",
event_id: "result_123",
delegation_id: "item_9tA2bF3h7K9m2P5q8R1s4",
content: "The order shipped today and should arrive tomorrow.",
});
}Utilisez session.thinking.append pour ajouter des informations au raisonnement interne du modèle sans qu’il les énonce à voix haute au moment de l’ajout. Utilisez session.commentary.append pour un résultat que le modèle doit énoncer à voix haute ; le modèle est entraîné à reformuler le texte ajouté. Tous les ajouts contiennent une simple chaîne de caractères et nécessitent delegation_id, y compris lorsque sa valeur est null. Un identifiant non nul doit désigner une délégation côté client connue.
Des ajouts successifs de résultats peuvent poursuivre la même délégation côté client. Un accusé de réception de l’ajout arrive après le moment estimé de l’injection du contexte ; il ne prouve ni que le modèle a pris en compte ou énoncé le résultat, ni qu’une action externe a réussi.
Partez de votre prompt backend existant
Utilisez le prompt de votre agent textuel existant comme point de départ. Conservez ses instructions de tâche et ses règles métier côté backend, et adaptez les instructions qui supposent une discussion textuelle ou un contrôle direct de la parole. Expliquez comment traiter les transcriptions vocales et renvoyer des résultats utiles. Faites respecter les autorisations et les confirmations requises dans votre application.
## Voice conversation context
You are helping an assistant in a live voice conversation. Transcripts
can contain mistakes, unfinished phrases, and later corrections. Use
the latest context and verified records. If a needed detail is still
unclear, ask for that detail instead of guessing.
## Task instructions
[Your task instructions, business rules, available tools,
and confirmation requirements.]
## Return the result
Return the relevant facts, whether the task is complete, and what comes next.
Use confirmed values. Do not invent a successful action.Conservez les grands volumes de données structurées, les longues sorties d’outils et le Markdown destiné à l’affichage côté backend. Fournissez à GPT-Live les faits pertinents et laissez-le choisir comment les exprimer. Un résultat d’outil concis ne nécessite pas d’appel supplémentaire à un modèle pour l’adapter à l’oral.
Avec la délégation côté client, renvoyez le résultat directement à GPT-Live. Avec la délégation via Responses, suivez la procédure de retour des résultats de fonction pour poursuivre le travail côté backend.
Les exemples d’événements du SDK ci-dessous utilisent connection, une connexion WebSocket Live principale ou une connexion auxiliaire établie selon les guides de connexion. Appelez la fonction utilitaire après session.started sur une connexion principale ; une connexion auxiliaire rattachée appartient déjà à une session en cours.
Envoyez le type de mise à jour approprié
Choisissez un événement selon la manière dont GPT-Live doit utiliser le contenu :
| Ce que vous souhaitez envoyer | Événement |
|---|---|
| Instructions système destinées au modèle Live, comme une salutation, une mention d’information ou une consigne d’arrêter de parler | session.instructions.append |
| Informations destinées au raisonnement interne, non énoncées lors de l’ajout, mais utilisables pour répondre aux questions pertinentes de l’utilisateur | session.thinking.append |
| Informations que le modèle doit énoncer à voix haute en reformulant le texte ajouté | session.commentary.append |
Les trois utilisent un champ content contenant une simple chaîne de caractères, limitée à 500 tokens par ajout. Incluez delegation_id : utilisez l’identifiant de la délégation côté client d’origine pour une mise à jour concernant cette tâche, ou null pour le contexte général de la session. Un identifiant non nul doit désigner une délégation côté client connue. Les instructions s’appliquent toujours à la session Live ; un identifiant ne les transforme pas en un prompt backend distinct.
Une instruction ajoutée peut interrompre la prise de parole ou le comportement en cours du modèle. Utilisez-la lorsque l’application doit réorienter la conversation ; faites respecter tout blocage associé d’un outil ou d’une action dans l’état de l’application.
Pour signaler l’avancement sans prise de parole pendant une tâche gérée côté client :
export function sendUpdate(connection) {
connection.send({
type: "session.thinking.append",
event_id: "availability_progress",
delegation_id: "item_123",
content: "Checking Thursday availability. No appointment has been booked.",
});
}Pour une réservation confirmée, envoyez le résultat que l’utilisateur doit entendre :
export function sendUpdate(connection) {
connection.send({
type: "session.commentary.append",
event_id: "appointment_result",
delegation_id: "item_123",
content: "Your appointment is confirmed for Thursday at 2:00 PM",
});
}N’envoyez ce résultat qu’une fois la réservation effectivement réussie. Pour une instruction qui s’applique à toute la session, utilisez session.instructions.append avec delegation_id: null.
Par exemple, une fois que votre application a bloqué une demande en application de ses garde-fous, vous pouvez réorienter la conversation :
export function sendUpdate(connection) {
connection.send({
type: "session.instructions.append",
event_id: "guardrail_block_17",
delegation_id: null,
content:
"Stop speaking about that request. Briefly explain that you cannot help with it, then wait for the user.",
});
}L’instruction n’annule pas le travail côté backend. Bloquez l’action concernée et gérez les opérations déjà en cours dans votre application.
Les accusés de réception correspondants sont session.thinking.appended, session.commentary.appended et session.instructions.appended. Faites correspondre leur client_event_id à votre event_id sortant. L’accusé de réception attend le moment estimé de l’injection du contexte, pas la fin de la prise de parole ou de la lecture audio. Consultez la section sur le moment où le contexte parvient au modèle pour en savoir plus sur les délais et la gestion des erreurs.
Le contexte non énoncé peut tout de même influencer ce que le modèle dira par la suite. Ce n’est pas un espace privé où placer des secrets ou des raisonnements cachés. Envoyez des faits utiles et de brefs résumés de l’avancement.
Fournissez des mises à jour exactes et utiles
Pendant les tâches plus longues, envoyez une mise à jour lorsqu’un changement utile survient : une étape se termine, un délai devient significatif ou l’utilisateur doit répondre à une question.
Utilisez session.thinking.append pour signaler l’avancement en arrière-plan en mode client. Utilisez session.commentary.append lorsqu’il est utile d’énoncer la mise à jour à voix haute.
Pour les mises à jour vocales, envoyez session.commentary.append avec un contenu qui correspond à l’état vérifié de la tâche :
| État | Exemple de contenu |
|---|---|
| En cours | « I'm checking the available appointments. » |
| Terminé | « You're booked for Thursday at 2:00 PM. » |
| Échec | « That time is no longer available. » |
| Annulation confirmée | « Your appointment has been canceled. » |
Une interruption vocale n’annule pas automatiquement le travail côté backend. Si l’utilisateur remplace vendredi par jeudi, mettez à jour la tâche active et ignorez les résultats concernant vendredi qui arrivent tardivement. Votre application doit décider s’il faut annuler le travail, le modifier ou le laisser se terminer. Vérifiez que l’annulation a réussi avant de l’annoncer.
Avant de réessayer un appel d’outil qui a échoué, vérifiez si l’action d’origine a déjà eu lieu. Par exemple, une réponse perdue ne doit pas entraîner une deuxième réservation. Si le résultat est incertain, dites-le et proposez la prochaine étape utile.
Partagez le contexte de l’interface
Fournissez à GPT-Live un résumé concis de la page ou de la tâche en cours, des sélections pertinentes et des faits qui aident à interpréter des références comme « cette option ». Construisez le résumé directement à partir de l’état de l’application ; aucun appel supplémentaire à un modèle n’est nécessaire pour le mettre en forme.
Envoyez le contexte de l’interface au début de la session et lorsque des éléments pertinents de son état changent. N’envoyez pas de mise à jour si rien n’a changé, et regroupez les changements rapides dans un bref résumé du dernier état. Indiquez explicitement les modifications apportées aux sélections précédentes :
- Contexte initial : « The user is reviewing a restaurant reservation: August 6 at 7 PM, two guests. No reservation has been made. »
- Correction : « The selected time is now 8 PM; the previous selection was 7 PM. »
Dans les deux modes de délégation, utilisez session.thinking.append avec delegation_id: null pour les mises à jour du contexte en arrière-plan. Conservez le HTML complet, les arbres DOM, les grands volumes de données JSON et les journaux d’interaction dans votre application ou votre backend. Traitez le contenu des pages comme des données de référence, pas comme des instructions.
Acceptez la saisie au clavier
Si un interlocuteur saisit une valeur exacte, comme un numéro de commande, transmettez-la au backend qui gère la tâche. Une application exclusivement vocale n’a pas besoin de ce mécanisme. Traitez la valeur saisie comme une donnée utilisateur, et non comme une instruction destinée au modèle Live.
Avec la délégation via Responses, mettez en file d’attente un message utilisateur destiné au backend :
export function sendUpdate(connection) {
connection.send({
type: "response.item.create",
event_id: "typed_order_number",
item: {
type: "message",
role: "user",
content: [
{
type: "input_text",
text: "My order number is A0042.",
},
],
},
});
}Envoyez response.create lorsque vous êtes prêt à lancer ou à poursuivre le traitement du backend. Si celui-ci attend des résultats de fonctions, renvoyez d’abord tous les résultats requis. La mise en file d’attente de texte n’annule pas à elle seule le travail déjà en cours.
Avec la délégation au client, envoyez la valeur saisie directement au backend qui gère la conversation. Si elle corrige une tâche en cours, mettez cette tâche à jour au lieu de relancer le même travail. Vous pouvez transmettre un bref résumé factuel à la session en direct avec session.thinking.append, ou utiliser session.commentary.append pour un résultat que l’utilisateur doit entendre.
Ajoutez des images et du contexte visuel
Pour aider votre interlocuteur à discuter d’une photo ou d’un écran, envoyez l’image et le contexte pertinent depuis votre application à un backend doté de capacités de vision. Le backend interprète l’image et renvoie du texte pertinent que GPT-Live peut utiliser dans la conversation. Le frontend audio de Live n’accepte pas directement les images.
Avec la délégation à Responses, configurez un modèle backend doté de capacités de vision. Mettez en file d’attente un élément d’entrée image pris en charge par Responses avec response.item.create, puis envoyez response.create pour lancer ou reprendre le traitement du backend. Renvoyez tous les résultats de fonctions requis encore en attente avant de continuer. Consultez Gérez la délégation à Responses.
Avec la délégation au client, envoyez les données visuelles au backend qui traite les requêtes déléguées, accompagnées des éléments pertinents de la conversation et de l’état de l’application. Renvoyez des conclusions concises en suivant le processus de retour des résultats du client.
Séparez les images envoyées au backend de session.input, qui fournit au frontend de Live un historique textuel au démarrage. Consultez Images et vision pour connaître les formats d’image pris en charge et les limites des modèles.
Réduisez la latence du backend
Réduisez le délai entre une demande de traitement au backend et l’obtention d’un résultat utile à la conversation. Mesurez la latence à chaque étape pour repérer les retards. Comparez le délai d’obtention d’une réponse vocale utile et la réussite des tâches sur les mêmes scénarios. Consultez le Cookbook sur l’évaluation des agents vocaux pour des conseils d’évaluation.
Délégation à Responses
Live gère les connexions WebSocket persistantes à Responses, prépare à l’avance la connexion et les paramètres connus de la requête, et réutilise l’état des réponses précédentes lorsqu’il est disponible. Vous n’avez pas besoin d’implémenter ces étapes pour le backend hébergé. La réutilisation dépend de la connexion active et de la compatibilité de l’état ; elle ne garantit ni un accès au cache réussi ni une latence précise.
Ajustez les paramètres du backend via delegation.responses :
model: choisissez le modèle chargé du raisonnement et de la sélection des outils indépendamment du modèle vocal.reasoning.effort: trouvez le bon équilibre entre le temps de raisonnement et la qualité d’exécution de la tâche, en utilisant les valeurs prises en charge par ce modèle.service_tier: utilisezauto,default,flexoupriority, selon la prise en charge par le modèle et les accès du projet.autosuit la configuration du projet. Évaluez les performances et le coût de l’offre choisie.
Mettez à jour les paramètres pris en charge pendant la session avec session.update. Vos outils personnalisés s’exécutent toujours dans votre application : les appels lents aux services, les files d’attente et la mise en mémoire tampon des résultats d’outils peuvent donc retarder la réponse, même lorsque Live gère la connexion à Responses. Renvoyez rapidement chaque résultat d’outil requis et poursuivez la réponse du backend.
Délégation au client
Votre application gère l’ensemble du traitement, de la réception de la délégation au retour du résultat. Préparez ce traitement pendant que la session vocale est en cours :
- Réutilisez les connexions au backend. Gardez le client API et son pool de connexions actifs d’une délégation à l’autre. Pour des appels répétés à Responses, envisagez une connexion WebSocket à Responses persistante.
- Préparez les paramètres connus. Initialisez les instructions, les outils et les connexions avant que la première requête en ait besoin. Le mode WebSocket de Responses permet aussi de préparer à l’avance l’état connu de la requête avant la génération ; suivez ses consignes de configuration.
- Transmettez les résultats utiles en streaming. Renvoyez des segments cohérents et vérifiés avec
session.commentary.append. Utilisezsession.thinking.appendpour transmettre l’avancement sans le faire énoncer. Conservez l’identifiant de délégation au client et respectez la limite de 500 tokens par ajout. Gardez le raisonnement privé dans le backend et vérifiez que les actions ont bien abouti avant d’annoncer leur réussite. - Gardez les entrées réutilisables stables. Conservez les instructions, les définitions des outils et leur ordre, ainsi que les préfixes d’historique inchangés. Ajoutez les nouvelles informations après le contenu réutilisable lorsque votre backend prend en charge la mise en cache et la poursuite du traitement.
- Évitez la mise en mémoire tampon inutile. Transmettez un résultat utile dès qu’il est prêt. Ne mettez en mémoire tampon que ce qui est nécessaire pour classer la sortie et former un segment cohérent. Privilégiez des métadonnées de phase structurées ; si vous utilisez des préfixes textuels pour distinguer l’avancement des résultats, attendez que le préfixe soit complet avant de transmettre le texte.
Mesurez le délai jusqu’à la première réponse vocale utile lorsque vous comparez ce traitement à la délégation à Responses.
Réagissez aux fragments de transcription
Le traitement des fragments de transcription dans votre application est facultatif et fonctionne avec les deux modes de délégation. Les fragments de transcription de l’utilisateur et de l’assistant arrivent par WebSocket ou par le canal de données WebRTC. Vous pouvez les traiter avec la logique de l’application ou un modèle léger pour commencer le travail avant l’arrivée d’un événement de délégation, ou utiliser la transcription elle-même pour déclencher un traitement géré par l’application.
Utilisez cette approche pour :
- Réduisez l’attente. Lancez une recherche anticipée dès que vous disposez de suffisamment d’informations, par exemple pour vérifier les disponibilités pendant que l’utilisateur continue à décrire ses préférences.
- Appliquez les garde-fous. Analysez la transcription au fil de son enrichissement pour repérer les demandes ou les réponses qui nécessitent une intervention. Consultez Appliquez des garde-fous à la conversation.
- Adaptez la conversation. Repérez les formulations qui suggèrent de la confusion ou de la frustration, puis adaptez l’expérience ou envoyez une instruction ciblée.
- Mettez à jour l’interface. Mettez en évidence les commandes pertinentes, préremplissez les champs suggérés ou affichez les résultats dès qu’ils sont disponibles.
Pour les applications dans le navigateur, utilisez le canal de données WebRTC pour les sous-titres et les mises à jour locales de l’interface. Lorsque le traitement de la transcription s’exécute sur votre serveur, que ce soit pour les garde-fous, les vérifications par un modèle léger ou les appels d’outils anticipés, utilisez une connexion WebSocket auxiliaire pour recevoir les événements et piloter directement la même session GPT-Live.
Traitez le texte accumulé lorsque de nouvelles informations significatives arrivent. Un fragment peut être incomplet, et la suite des propos peut modifier la demande. Écartez les résultats obsolètes, coordonnez ce traitement avec le travail délégué ultérieur pour éviter les actions en double, et appliquez vos vérifications habituelles des permissions et des confirmations avant les actions ayant des conséquences.
Pour réinjecter des informations dans la conversation :
| Objectif | Événement |
|---|---|
| Modifiez le comportement du modèle en direct ou réorientez la conversation | session.instructions.append |
| Fournissez du contexte non énoncé pour les réponses suivantes | session.thinking.append |
| Fournissez les informations que le modèle doit énoncer à voix haute | session.commentary.append |
Pour les mises à jour en dehors d’une délégation au client, utilisez delegation_id: null. Ces ajouts orientent le modèle en direct ; votre application contrôle les modifications de l’interface, l’exécution des outils et l’annulation. Consultez Envoyez le bon type de mise à jour pour des exemples d’ajouts.
Optimisations communes
Les deux modes de délégation bénéficient des mêmes améliorations du backend :
- Choisissez le modèle et l’effort de raisonnement adaptés à la tâche. Comparez les configurations qui répondent à vos exigences de précision. Utilisez un effort de raisonnement plus faible lorsqu’il permet d’accomplir la tâche de manière fiable.
- Gardez les réponses concises. Renvoyez les faits et l’état dont GPT-Live a besoin pour poursuivre la conversation. Évitez les longues explications et les appels supplémentaires au modèle qui servent uniquement à reformuler les résultats pour l’oral.
- Réduisez les délais liés aux outils et les appels inutiles. Lancez le travail autorisé dès que ses entrées sont prêtes, réutilisez les résultats tant qu’ils restent valides et évitez de répéter une recherche déjà effectuée.
- Exécutez les tâches indépendantes en parallèle. Les appels de recherche indépendants peuvent s’exécuter simultanément. Respectez les dépendances et les confirmations requises pour les actions.
parallel_tool_callspermet à un modèle de demander plusieurs appels ; votre application reste chargée de planifier et d’exécuter ses fonctions personnalisées.
Consultez Optimisation de la latence pour des conseils généraux sur Responses et Mise en cache des prompts pour réutiliser les entrées stables.
Vérifiez l’interaction de bout en bout
Testez à la fois l’état de l’application qui fait autorité et l’audio lu par le client. Une réponse du backend peut se terminer alors que l’énoncé du résultat est interrompu, et un accusé de réception du contexte confirme son acceptation, pas sa lecture audio. Gardez les identifiants d’opération et les révisions de tâches distincts des identifiants de délégation afin que les reconnexions, les nouvelles tentatives et les résultats tardifs ne répètent ni n’annulent une action.
Consultez Évaluation des agents vocaux pour des tests reproductibles. Pour une boucle d’outils Realtime ou un backend chaîné existants, suivez le guide Migrez vers GPT-Live.