\n\n\n\n Comment adicionar respostas em streaming com a API Gemini (Passo a passo) - BotClaw Comment adicionar respostas em streaming com a API Gemini (Passo a passo) - BotClaw \n

Comment adicionar respostas em streaming com a API Gemini (Passo a passo)

📖 10 min read1,819 wordsUpdated Apr 5, 2026

“`html







Como adicionar respostas em streaming com a Gemini API passo a passo


Como adicionar respostas em streaming com a Gemini API passo a passo

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

Neste guia detalhado, vamos explicar como implementar as respostas em streaming da API Gemini passo a passo, acompanhada de exemplos de código práticos, de uma tabela comparativa destacando streaming versus não-streaming, e dicas para otimizar sua implementação.

Compreendendo as respostas em streaming na API Gemini

As chamadas de API tradicionais aos 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 modifica isso ao fragmentar a resposta em pedaços menores entregues sequencialmente. Isso é semelhante à forma como o streaming de vídeo fornece partes de um vídeo enquanto você o assiste, em vez de baixar o vídeo completo antes.

As vantagens das respostas em streaming incluem:

  • Latência reduzida: Comece a processar ou exibir tokens imediatamente.
  • Melhoria da experiência do usuário: Os usuários veem a saída sendo gerada em tempo real.
  • Melhor gerenciamento de recursos: Sua aplicação pode reagir de maneira dinâmica, possivelmente cancelando precocemente e processando os tokens à medida que chegam.

Etapa 1: Configurar seu ambiente API Gemini

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

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

Pré-requisitos

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

Etapa 2: Fazer uma solicitação de conclusão padrão (não-streaming)

Primeiro, consideremos um exemplo simples onde você envia um prompt e aguarda a resposta completa:

“““html

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á o conjunto de conclusões apenas após o modelo terminar de gerá-lo. Embora isso seja simples, pode causar um atraso perceptível em aplicações que exigem uma reatividade em tempo real.

Etapa 3 : Ativar respostas em streaming com a API Gemini

A API Gemini suporta um modo de streaming através de seu endpoint de conclusões. Para ativar o streaming, você precisará definir um parâmetro de consulta específico e gerenciar a resposta HTTP como um fluxo, em vez de esperar o corpo completo.

Pontos principais para ativar o streaming :

  • Defina stream: true em sua carga útil de requisição.
  • Use um método de requisição HTTP que suporte o processamento de partes em streaming.
  • Escute os eventos de dados no fluxo 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 // Ativar 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 fluxo
 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) {
 // Gerenciar erros de parsing, se necessário
 console.error('Erro de parsing da parte :', err);
 }
 }
 });

 response.data.on('end', () => {
 console.log('nn[Fim do fluxo]');
 });
}

streamCompletion();

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

Etapa 4 : Analisar o formato dos dados em streaming

O formato de resposta em streaming da API Gemini geralmente segue um estilo Server-Sent Events (SSE) ou cargas úteis JSON fragmentadas, 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 essa parte. Seu código deve acumular ou transmitir esse conteúdo para a interface de sua aplicação.

Etapa 5 : Gerenciar o fim do fluxo e os erros

Quando o fluxo termina, o servidor envia um token ou mensagem especial como [DONE], indicando que nenhum conteúdo adicional será enviado. Seu gerenciador de fluxo deve escutar esse token e fechar a conexão graciosamente.

Além disso, esteja preparado para gerenciar erros de rede intermitentes ou exceções de parsing. Implemente uma lógica de nova tentativa ou exibições de erros amigáveis se os dados de streaming forem interrompidos.

Tabela comparativa : Respostas em streaming vs não-streaming na API Gemini

“““html

Caractéristique Réponse non-streaming Réponse en streaming
Entrega da resposta Entrega em lote após 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 reduzida, saída parcial rapidamente disponível
Experiência do usuário Mostrando estático e atrasado Saída dinâmica em tempo real
Complexidade de implementação Fácil de implementar Complexidade moderada devido à gestão do streaming
Gestão de erros Mais fácil, resposta única Mais abrangente, gerenciar interrupções de fluxo
Casos de uso Processamento em lote, tarefas não em tempo real Chatbots, assistentes interativos, geração de dados em tempo real

Dicas práticas para implementar as respostas em streaming da API Gemini

1. Bufferize os tokens adequadamente

Dependendo das necessidades da sua interface do usuário ou backend, você pode querer coletar tokens e exibi-los em lotes (por exemplo, por palavra ou frase) em vez de exibi-los brutos um por um para evitar atualizações staccato ou esmagadoras.

2. Implementar o gerenciamento de retrocesso

Se seu front-end ou outros sistemas não podem lidar com explosões rápidas de tokens, implemente mecanismos de retrocesso ou limitação para regular o fluxo e evitar sobrecarregar os usuários ou os recursos do sistema.

3. Usar sinais de cancelamento ou tokens de anulação

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

4. Registro e monitoramento detalhados

O streaming é stateful e mais complexo, portanto, adicione logs detalhados para monitorar o fluxo de dados, erros e completions de fluxo, ajudando na depuração e insights operacionais.

5. Considerações de segurança

Proteja sempre sua chave API e não a exponha publicamente. Para cenários de streaming no front-end, propague o streaming via backend para evitar a exposição da chave.

Exemplo do mundo real: Criando uma interface de chatbot ao vivo usando o streaming 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) {
 // ignorar pedaços de JSON malformados
 }
 }
 });
 
 response.data.on('end', () => {
 console.log('n[Fim da resposta]');
 rl.close();
 });

 response.data.on('error', (err) => {
 console.error('Erro de fluxo:', err.message);
 rl.close();
 });
 
 } catch (err) {
 console.error('A requisição falhou:', err.message);
 rl.close();
 }
 });
}

chat();

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

Resumo

Integrar as respostas em streaming da API Gemini pode melhorar consideravelmente a interatividade e a reatividade de suas aplicações alimentadas por IA. Ao habilitar o streaming, gerenciar dados incrementais e gerenciar casos extremos como erros e terminação do fluxo, você pode criar interfaces que parecem mais fluidas e dinâmicas.

Não se esqueça das etapas-chave:

“`

  1. Defina o parâmetro stream: true na sua carga útil de requisição
  2. Faça uma requisição que suporte streaming (trate a resposta como um fluxo)
  3. Analise os pedaços de dados incrementais, extraindo tokens das cargas JSON
  4. Atualize a interface do usuário da sua aplicação ou o consumidor backend progressivamente
  5. Gerencie a conclusão do fluxo e os erros com elegância

Com o código de exemplo e as melhores práticas compartilhadas neste artigo, você está bem equipado para começar a adicionar funcionalidades de streaming aos seus projetos de API Gemini. Bom 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

Recommended Resources

AgntapiAgntworkAgntupAgntmax
Scroll to Top