\n\n\n\n Comment ajouter des réponses en streaming avec l'API Gemini (Étape par étape) - BotClaw Comment ajouter des réponses en streaming avec l'API Gemini (Étape par étape) - BotClaw \n

Comment ajouter des réponses en streaming avec l’API Gemini (Étape par étape)

📖 10 min read1,985 wordsUpdated Mar 27, 2026







Comment ajouter des réponses en streaming avec l’API Gemini étape par étape


Comment ajouter des réponses en streaming avec l’API Gemini étape par étape

L’API Gemini a rapidement attiré l’attention des développeurs pour ses capacités de modèle linguistique solides et ses options d’intégration flexibles. L’une des fonctionnalités les plus intéressantes que l’API Gemini propose est les réponses en streaming. Au lieu d’attendre l’arrivée de l’ensemble de la réponse, le streaming vous permet de recevoir des tokens ou du contenu partiel de manière incrémentielle, améliorant considérablement l’expérience utilisateur, en particulier dans des applications interactives comme les chatbots ou les assistants en temps réel.

Dans ce guide détaillé, nous vous expliquerons comment mettre en œuvre les réponses en streaming de l’API Gemini étape par étape, avec des exemples de code pratiques, un tableau comparatif mettant en évidence le streaming par rapport à la non-diffusion, et des conseils pour optimiser votre mise en œuvre.

Comprendre les réponses en streaming dans l’API Gemini

Les appels API traditionnels aux modèles linguistiques suivent un modèle de demande-réponse : vous envoyez une invite et attendez la réponse complète avant de pouvoir l’afficher ou la traiter. Le streaming change cela en divisant la réponse en morceaux plus petits livrés séquentiellement. Cela est comparable à la façon dont le streaming vidéo délivre des parties d’une vidéo à mesure que vous regardez, plutôt que de télécharger l’intégralité de la vidéo au préalable.

Les avantages des réponses en streaming incluent :

  • Latence réduite : Commencez à traiter ou à afficher des tokens instantanément.
  • Expérience utilisateur améliorée : Les utilisateurs voient la sortie se générer en temps réel.
  • Mieux gérer les ressources : Votre application peut réagir dynamiquement, potentiellement annuler rapidement et gérer les tokens à leur arrivée.

Étape 1 : Configurer votre environnement API Gemini

Avant d’explorer le streaming, assurez-vous d’avoir accès à l’API Gemini avec des identifiants appropriés, et que votre environnement de développement est configuré avec les bibliothèques nécessaires pour effectuer des requêtes HTTPS et gérer les streams.

Pour la démonstration, nous allons utiliser Node.js avec le client HTTP populaire axios (avec prise en charge du streaming) et les modules natifs http/https. Cependant, les concepts s’appliquent de manière similaire en Python, Go ou d’autres langages.

Prérequis

  • Node.js installé (v14+ recommandé)
  • Une clé API pour l’API Gemini
  • Installer axios avec npm install axios

Étape 2 : Faire une requête de complétion standard (non streaming)

Commençons par un exemple simple où vous envoyez une invite et attendez la réponse complète :

const axios = require('axios');

async function getCompletion() {
 const API_KEY = 'YOUR_GEMINI_API_KEY';
 const url = 'https://api.gemini.com/v1/completions';

 const data = {
 model: 'gemini-1',
 prompt: 'Écris un poème sur l’océan',
 max_tokens: 100
 };

 const response = await axios.post(url, data, {
 headers: {
 'Authorization': `Bearer ${API_KEY}`,
 'Content-Type': 'application/json'
 }
 });

 console.log('Complétion :', response.data.choices[0].text);
}

getCompletion();

Ceci retournera l’intégralité de la complétion uniquement après que le modèle a fini de la générer. Bien que simple, cela peut entraîner un délai perceptible dans les applications nécessitant une réactivité en temps réel.

Étape 3 : Activer les réponses en streaming avec l’API Gemini

L’API Gemini prend en charge un mode de streaming via son point de terminaison de complétions. Pour activer le streaming, vous devez définir un paramètre de requête spécifique et gérer la réponse HTTP comme un flux plutôt que d’attendre l’intégralité du corps.

Points clés pour activer le streaming :

  • Définir stream: true dans votre charge utile de requête.
  • Utiliser une méthode de requête HTTP qui prend en charge la gestion des morceaux diffusés.
  • Écoutez les événements de données sur le flux de réponse.

Exemple : Streaming avec Axios et Node.js

const axios = require('axios');

async function streamCompletion() {
 const API_KEY = 'YOUR_GEMINI_API_KEY';
 const url = 'https://api.gemini.com/v1/completions';

 const data = {
 model: 'gemini-1',
 prompt: 'Écris une histoire sur un chevalier courageux',
 max_tokens: 150,
 stream: true // Activer les réponses en streaming
 };

 const response = await axios({
 method: 'post',
 url: url,
 data: data,
 headers: {
 'Authorization': `Bearer ${API_KEY}`,
 'Content-Type': 'application/json'
 },
 responseType: 'stream'
 });

 response.data.on('data', (chunk) => {
 // Chaque morceau est un objet Buffer
 const payloads = chunk.toString().split('nn');
 for (const payload of payloads) {
 if (payload.includes('[DONE]')) return; // Fin du flux
 if (payload.trim() === '') continue;
 try {
 const data = JSON.parse(payload);
 const token = data.choices[0].delta?.content;
 if (token) {
 process.stdout.write(token);
 }
 } catch (err) {
 // Gérer les erreurs de parsing le cas échéant
 console.error('Erreur lors du parsing du morceau :', err);
 }
 }
 });

 response.data.on('end', () => {
 console.log('nn[Flux terminé]');
 });
}

streamCompletion();

Dans cet exemple, les tokens arrivent sous forme de morceaux encodés en JSON, et votre code les parse et les affiche immédiatement.

Étape 4 : Analyser le format des données en streaming

Le format de réponse en streaming de l’API Gemini suit généralement un style Server-Sent Events (SSE) ou des charges utiles JSON en morceaux où chaque morceau contient des mises à jour sur les nouveaux tokens générés.

Un morceau typique ressemble à :

{
 "id": "completion-123",
 "object": "text_completion",
 "created": 1688749214,
 "model": "gemini-1",
 "choices": [
 {
 "delta": {
 "content": "Bonjour"
 },
 "index": 0,
 "finish_reason": null
 }
 ]
}

Le champ delta.content contient le nouveau morceau de texte pour ce morceau. Votre code doit accumuler ou diffuser ce contenu vers l’interface de votre application.

Étape 5 : Gérer la fin du flux et les erreurs

Lorsque le flux se termine, le serveur envoie un token ou un message spécial tel que [DONE], indiquant qu’aucun contenu supplémentaire ne sera envoyé. Votre gestionnaire de flux doit écouter ce token et fermer la connexion de manière élégante.

De plus, soyez prêt à gérer les erreurs réseau intermittentes ou les exceptions de parsing. Implémentez une logique de répétition ou des affichages d’erreurs conviviaux si les données en streaming sont interrompues.

Tableau comparatif : Réponses en streaming vs Réponses non streaming dans l’API Gemini

Caractéristique Réponse non streaming Réponse en streaming
Livraison de réponse Livraison en lot après la génération complète Livraison incrémentale de tokens/morceaux au fur et à mesure de leur génération
Latence Latence plus élevée, attente de la réponse entière Latence plus faible, sortie partielle disponible rapidement
Expérience utilisateur Affichage statique retardé Sortie dynamique en temps réel
Complexité de mise en œuvre Facile à mettre en œuvre Complexité modérée en raison de la gestion du streaming
Gestion des erreurs Plus facile, réponse unique Plus approfondie, gérer les interruptions de flux
Cas d’utilisation Traitement par lot, tâches non en temps réel Chatbots, assistants interactifs, génération de données en direct

Conseils pratiques pour mettre en œuvre les réponses en streaming de l’API Gemini

1. Tamponner les tokens de manière appropriée

En fonction de vos besoins d’interface utilisateur ou de backend, vous voudrez peut-être collecter les tokens et les afficher par lots (par exemple, par mot ou par phrase) plutôt qu’un par un pour éviter des mises à jour saccadées ou écrasantes.

2. Mettre en œuvre la gestion de la pression de flux

Si votre front-end ou d’autres systèmes ne peuvent pas gérer les rafales rapides de tokens, mettez en œuvre des mécanismes de pression de flux ou de limitation pour réguler le flux et éviter de submerger les utilisateurs ou les ressources système.

3. Utiliser des signaux d’abandon ou des tokens d’annulation

Le streaming permet une terminaison précoce si un utilisateur annule une opération. Intégrez des signaux d’abandon dans vos requêtes HTTP pour arrêter le streaming et libérer les ressources immédiatement.

4. Journalisation et surveillance détaillées

Le streaming est à état et plus complexe, donc ajoutez des journaux détaillés pour surveiller le flux de données, les erreurs et les complétions de flux, aidant ainsi au débogage et aux insights opérationnels.

5. Considérations de sécurité

Assurez-vous toujours de sécuriser votre clé API et ne l’exposez pas publiquement. Pour les scénarios de streaming frontal, proxy le streaming via le backend pour éviter toute exposition de clé.

Exemple du monde réel : Créer une interface chatbot en direct en utilisant le streaming de Gemini

Imaginez une fenêtre de chat où les messages des utilisateurs sont envoyés à l’API Gemini et les réponses apparaissent token par token :

const readline = require('readline');
const axios = require('axios');

const rl = readline.createInterface({
 input: process.stdin,
 output: process.stdout
});

async function chat() {
 const API_KEY = 'YOUR_GEMINI_API_KEY';
 rl.question('Vous: ', async (prompt) => {
 console.log('Gemini:');
 const url = 'https://api.gemini.com/v1/completions';
 const data = {
 model: 'gemini-1',
 prompt,
 max_tokens: 200,
 stream: true
 };
 
 try {
 const response = await axios({
 method: 'post',
 url: url,
 data: data,
 headers: {
 'Authorization': `Bearer ${API_KEY}`,
 'Content-Type': 'application/json'
 },
 responseType: 'stream'
 });
 
 response.data.on('data', (chunk) => {
 const lines = chunk.toString().split('nn');
 for (const line of lines) {
 if (line.trim() === '') continue;
 if (line.includes('[DONE]')) {
 rl.close();
 return;
 }
 try {
 const parsed = JSON.parse(line);
 const content = parsed.choices[0].delta?.content;
 if (content) {
 process.stdout.write(content);
 }
 } catch (e) {
 // ignorer les morceaux JSON mal formés
 }
 }
 });
 
 response.data.on('end', () => {
 console.log('n[Fin de la réponse]');
 rl.close();
 });

 response.data.on('error', (err) => {
 console.error('Erreur de flux:', err.message);
 rl.close();
 });
 
 } catch (err) {
 console.error('Échec de la requête:', err.message);
 rl.close();
 }
 });
}

chat();

Ce script permet aux utilisateurs de taper des messages et de voir les réponses en streaming de Gemini en direct dans le terminal.

Résumé

L’intégration des réponses en streaming de l’API gemini peut considérablement améliorer l’interactivité et la réactivité de vos applications alimentées par l’IA. En activant le streaming, en gérant les données incrémentales et en prenant en charge des cas particuliers comme les erreurs et la terminaison du flux, vous pouvez créer des interfaces qui semblent plus fluides et dynamiques.

N’oubliez pas les étapes clés :

  1. Définissez le paramètre stream: true dans la charge utile de votre requête
  2. Faites une requête qui prend en charge le streaming (gérez la réponse comme un flux)
  3. Analysez les morceaux de données incrémentales, en extrayant des jetons des charges utiles JSON
  4. Mettez à jour l’interface utilisateur de votre application ou le consommateur de backend progressivement
  5. Gérez la fin du flux et les erreurs avec élégance

Avec le code d’exemple et les meilleures pratiques partagées dans cet article, vous êtes bien préparé pour commencer à ajouter des fonctionnalités de streaming à vos projets d’API Gemini. Bon codage !


Articles Connexes

🕒 Published:

🛠️
Written by Jake Chen

Full-stack developer specializing in bot frameworks and APIs. Open-source contributor with 2000+ GitHub stars.

Learn more →
Browse Topics: Bot Architecture | Business | Development | Open Source | Operations

Related Sites

ClawgoAgntmaxAgntdevAgntwork
Scroll to Top