\n\n\n\n Como Adicionar Respostas em Streaming com a API Gemini (Passo a Passo) - BotClaw Como Adicionar Respostas em Streaming com a API Gemini (Passo a Passo) - BotClaw \n

Como Adicionar Respostas em Streaming com a API Gemini (Passo a Passo)

📖 9 min read1,702 wordsUpdated Apr 2, 2026

Como Adicionar Respostas em Streaming com a API Gemini Passo a Passo

A API Gemini rapidamente ganhou atenção entre os desenvolvedores por suas sólidas capacidades de modelo de linguagem e opções de integração flexíveis. Uma das funcionalidades mais empolgantes que a API Gemini oferece é respostas em streaming. Em vez de esperar pela resposta completa, o streaming permite que você receba tokens ou conteúdo parcial de forma incremental, melhorando drasticamente a experiência do usuário, especialmente em aplicações interativas como chatbots ou assistentes em tempo real.

Neste guia detalhado, vamos mostrar como implementar respostas em streaming da API gemini passo a passo, completo com exemplos práticos de código, uma tabela de comparação destacando streaming versus não-streaming, e dicas para otimizar sua implementação.

Entendendo Respostas em Streaming na API Gemini

Chamadas de API tradicionais para modelos de linguagem seguem um padrão de solicitação-resposta: você envia um prompt e espera pela conclusão completa antes de poder exibi-la ou processá-la. O streaming muda isso ao dividir a resposta em partes menores entregues sequencialmente. Isso é análogo à forma como o streaming de vídeo entrega partes de um vídeo enquanto você assiste, em vez de baixar o vídeo inteiro previamente.

Os benefícios das respostas em streaming incluem:

  • Menor Latência: Comece a processar ou exibir tokens instantaneamente.
  • Melhor Experiência do Usuário: Os usuários veem a saída sendo gerada em tempo real.
  • Melhor Gerenciamento de Recursos: Seu aplicativo pode reagir dinamicamente, potencialmente cancelar cedo e lidar com tokens à medida que chegam.

Passo 1: Configurando Seu Ambiente da API Gemini

Antes de explorarmos o streaming, certifique-se de ter acesso à API Gemini com as credenciais apropriadas e que seu ambiente de desenvolvimento esteja configurado com as bibliotecas necessárias para fazer requisições HTTPS e lidar com streams.

Para demontração, utilizaremos Node.js com o popular cliente HTTP axios (com suporte para streaming) e os módulos nativos http/https. No entanto, os conceitos se aplicam de forma similar em Python, Go ou outras linguagens.

Pré-requisitos

  • Node.js instalado (v14+ recomendado)
  • Uma chave de API para a API Gemini
  • Instale o axios com npm install axios

Passo 2: Fazendo uma Solicitação de Conclusão Padrão (Não-Streaming)

Primeiro, vamos considerar um exemplo simples onde você envia um prompt e espera pela resposta completa:

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: 'Escreva um poema sobre o oceano',
 max_tokens: 100
 };

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

 console.log('Conclusão:', response.data.choices[0].text);
}

getCompletion();

Isso retornará a conclusão inteira apenas depois que o modelo terminar de gerá-la. Embora seja simples, isso pode causar um atraso considerável em aplicações que exigem resposta em tempo real.

Passo 3: Habilitando Respostas em Streaming com a API Gemini

A API Gemini suporta um modo de streaming por meio de seu endpoint de Conclusões. Para habilitar o streaming, você precisa definir um parâmetro de solicitação específico e lidar com a resposta HTTP como um stream em vez de esperar pelo corpo completo.

Pontos chave para habilitar o streaming:

  • Defina stream: true no seu payload de solicitação.
  • Use um método de solicitação HTTP que suporte o manuseio de partes transmitidas.
  • Escute eventos de dados no stream de resposta.

Exemplo: Streaming com Axios e 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: 'Escreva uma história sobre um cavaleiro corajoso',
 max_tokens: 150,
 stream: true // Habilitar respostas em 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) => {
 // Cada parte é um objeto Buffer
 const payloads = chunk.toString().split('nn');
 for (const payload of payloads) {
 if (payload.includes('[DONE]')) return; // Fim do stream
 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) {
 // Lidar com erros de análise se houver
 console.error('Erro ao analisar parte:', err);
 }
 }
 });

 response.data.on('end', () => {
 console.log('nn[Stream encerrado]');
 });
}

streamCompletion();

Neste exemplo, os tokens chegam como partes codificadas em JSON, e seu código analisa e imediatamente exibe cada token.

Passo 4: Analisando o Formato de Dados em Streaming

O formato de resposta em streaming da API Gemini geralmente segue um estilo de Eventos Enviados pelo Servidor (SSE) ou payloads JSON em partes, onde cada parte contém atualizações sobre os novos tokens gerados.

Uma parte típica se parece com:

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

O campo delta.content contém a nova parte de texto para esta parte. Seu código deve acumular ou transmitir esse conteúdo para a interface do seu aplicativo.

Passo 5: Lidando com o Fim do Stream e Erros

Quando o stream termina, o servidor envia um token ou mensagem especial, como [DONE], indicando que não mais conteúdo será enviado. Seu manipulador de stream deve escutar por esse token e fechar a conexão de forma limpa.

Além disso, esteja preparado para lidar com erros de rede intermitentes ou exceções de análise. Implemente lógica de repetição ou exibições de erro amigáveis se os dados em streaming forem interrompidos.

Tabela de Comparação: Respostas em Streaming vs Não-Streaming na API Gemini

Recurso Resposta Não-Streaming Resposta em Streaming
Entrega da Resposta Entrega em lote após a geração completa Entrega incremental de tokens/partes à medida que são gerados
Latência Latência mais alta, espera pela resposta completa Latência mais baixa, saída parcial disponível rapidamente
Experiência do Usuário Atrasada, exibição estática Dinâmica, saída em tempo real
Complexidade da Implementação Simples de implementar Complexidade moderada devido ao manuseio de streaming
Tratamento de Erros Mais fácil, resposta única Mais abrangente, lida com interrupções do stream
Casos de Uso Processamento em lote, tarefas não em tempo real Chatbots, assistentes interativos, geração de dados ao vivo

Dicas Práticas para Implementar Respostas em Streaming da API Gemini

1. Buffere Tokens Apropriadamente

Dependendo das suas necessidades de UI ou backend, você pode querer coletar tokens e exibi-los em lotes (por exemplo, por palavra ou frase) em vez de um por um para evitar atualizações confusas ou intensas.

2. Implementar Tratamento de Backpressure

Caso seu front-end ou outros sistemas não consigam lidar com rajadas rápidas de tokens, implemente mecanismos de backpressure ou limitação para regular o fluxo e evitar sobrecarregar os usuários ou recursos do sistema.

3. Use Sinais de Abort ou Tokens de Cancelamento

O streaming permite a terminação precoce se um usuário cancelar uma operação. Integre sinais de abort em suas requisições HTTP para interromper o streaming e liberar recursos imediatamente.

4. Registro e Monitoramento Detalhados

Streaming é stateful e mais complexo, então adicione registros detalhados para monitorar o fluxo de dados, erros e conclusões de streams, ajudando na depuração e insights operacionais.

5. Considerações de Segurança

Sempre proteja sua chave de API e não a exponha publicamente. Para cenários de streaming no frontend, faça proxy do streaming através do backend para evitar exposição da chave.

Exemplo do Mundo Real: Criando uma Interface de Chatbot ao Vivo Usando Streaming da Gemini

Imagine uma janela de chat onde as mensagens dos usuários são enviadas para a API Gemini e as respostas aparecem token por 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('Você: ', 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) {
 // ignora partes JSON malformadas
 }
 }
 });
 
 response.data.on('end', () => {
 console.log('n[Fim da resposta]');
 rl.close();
 });

 response.data.on('error', (err) => {
 console.error('Erro no stream:', err.message);
 rl.close();
 });
 
 } catch (err) {
 console.error('Falha na solicitação:', err.message);
 rl.close();
 }
 });
}

chat();

Este script permite que os usuários digitem mensagens e vejam as respostas em streaming da Gemini ao vivo no terminal.

Resumo

Integrar respostas em streaming da API gemini pode melhorar drasticamente a interatividade e a capacidade de resposta de seus aplicativos baseados em IA. Ao habilitar o streaming, lidar com dados incrementais e gerenciar casos extremos como erros e terminação do stream, você pode construir interfaces que parecem mais suaves e dinâmicas.

Lembre-se dos passos principais:

  1. Defina o parâmetro stream: true no seu payload de solicitação
  2. Faça uma solicitação que suporte streaming (hande a resposta como um stream)
  3. Analise as partes de dados incrementais, extraindo tokens dos payloads JSON
  4. Atualize a interface do seu aplicativo ou consumidor backend progressivamente
  5. Lide com a conclusão e erros do stream de forma limpa

Com os códigos de exemplo e melhores práticas compartilhadas neste artigo, você está bem equipado para começar a adicionar funcionalidade de streaming aos seus projetos da API Gemini. Boa codificação!

Artigos Relacionados

🕒 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

Partner Projects

AgntupAgntworkAgntkitClawgo
Scroll to Top