Shopping cart

Subtotal $0.00

View cartCheckout

Building better devs

TnewsTnews
  • Home
  • Programação
  • Chrome Agora Roda IA no Navegador Sem Servidor: Guia Completo da Prompt API
Programação

Chrome Agora Roda IA no Navegador Sem Servidor: Guia Completo da Prompt API

Email : 13

IA Rodando Direto no Navegador — Sem Servidor, Sem API Key

Imagina rodar um modelo de linguagem direto no Chrome, sem mandar nenhum dado para a nuvem, sem pagar por token, sem configurar servidor. Parece bom demais? Pois é exatamente isso que a Prompt API do Chrome faz.

O Google embarcou o Gemini Nano — uma versão compacta do Gemini otimizada para rodar on-device — dentro do próprio navegador. E criou uma API JavaScript nativa para que desenvolvedores front-end possam fazer inferência de IA com meia dúzia de linhas de código.

Eu testei, fuçei a documentação, li os relatos de devs no Hacker News, e vou te contar o que funciona, o que não funciona, e quando vale a pena trocar sua chamada de API por essa abordagem local.

O Que é a Prompt API (e Por Que Ela Existe)

A Prompt API é uma interface JavaScript nativa do Chrome que dá acesso ao Gemini Nano — um modelo de linguagem pequeno que roda inteiramente no dispositivo do usuário. Nada vai para a nuvem. Nenhum dado sai do navegador.

A motivação do Google é clara: privacidade e latência. Em vez de cada site precisar fazer chamadas para APIs como OpenAI ou Anthropic (pagando por token e dependendo de rede), o modelo já está ali, no computador do usuário.

O fluxo é simples:

  1. O Chrome baixa o Gemini Nano automaticamente na primeira vez que um site usa a API
  2. O modelo fica armazenado localmente (~22 GB de espaço necessário)
  3. A inferência acontece via WebGPU/WebAssembly, sem servidor

Na prática, é como ter um “mini ChatGPT” embutido no navegador — só que menor, mais rápido para tarefas simples, e completamente offline depois do download inicial.

Requisitos: Nem Todo Mundo Pode Usar (Ainda)

Antes de sair codando, precisa saber que a Prompt API tem requisitos de hardware significativos:

Requisito Especificação
Sistema Operacional Windows 10/11, macOS 13+, Linux, ChromeOS
GPU Mais de 4 GB de VRAM
CPU (sem GPU) 16 GB RAM + 4 cores
Espaço em disco 22 GB livres no volume do perfil Chrome
Chrome Versão 138+ (atualmente em origin trial)
Mobile Não suportado (Android, iOS — ainda não)

Isso já corta uma fatia considerável dos usuários. Qualquer laptop com GPU integrada de 4 GB ou menos fica de fora. E mobile? Esquece — por enquanto.

A real é que o Google está mirando em desktops e laptops mais potentes primeiro. Faz sentido: rodar um LLM local exige recursos que a maioria dos smartphones simplesmente não tem.

Setup: Como Ativar a Prompt API no Chrome

Se você está no Chrome 138+ (Dev ou Canary), ativar é relativamente simples:

Passo 1: Habilitar as flags

Acesse chrome://flags e ative:


chrome://flags/#optimization-guide-on-device-model → Enabled
chrome://flags/#prompt-api-for-gemini-nano → Enabled

Para entrada multimodal (imagens e áudio):


chrome://flags/#prompt-api-for-gemini-nano-multimodal-input → Enabled

Passo 2: Verificar o download do modelo

Abra chrome://on-device-internals e confirme que o modelo Gemini Nano foi baixado. Na primeira ativação, o Chrome inicia o download automaticamente — mas pode levar alguns minutos dependendo da sua conexão.

Passo 3: Testar no console

Abra o DevTools (F12) e rode:


const availability = await LanguageModel.availability();
console.log(availability);
// 'available', 'downloading', ou 'unavailable'

Se retornar 'available', está tudo pronto.

Mão na Massa: Código Real com a Prompt API

Chega de teoria. Vamos ver como usar isso na prática.

Uso básico: uma pergunta, uma resposta


// Verifica se a API está disponível
const status = await LanguageModel.availability();

if (status !== 'unavailable') {
  // Cria uma sessão
  const session = await LanguageModel.create();

  // Faz uma pergunta
  const response = await session.prompt(
    'Resuma em uma frase o que é WebAssembly.'
  );

  console.log(response);
  // "WebAssembly é um formato binário que permite executar código
  //  de alto desempenho no navegador."
}

Sim, são literalmente 5 linhas de código útil. Sem fetch, sem API key, sem CORS.

Streaming: respostas em tempo real

Para respostas mais longas, o streaming evita que o usuário fique olhando para uma tela em branco:


const session = await LanguageModel.create();

const stream = session.promptStreaming(
  'Liste 5 boas práticas de segurança para APIs REST.'
);

for await (const chunk of stream) {
  document.getElementById('output').textContent = chunk;
}

O promptStreaming() retorna um ReadableStream que vai entregando tokens conforme o modelo gera. A experiência é idêntica ao que você vê no ChatGPT — o texto aparecendo letra por letra.

System Prompt: definindo o comportamento

Você pode configurar um “system prompt” para controlar como o modelo se comporta:


const session = await LanguageModel.create({
  systemPrompt: `Você é um assistente de code review. Analise o código
  fornecido e aponte problemas de segurança, performance e legibilidade.
  Seja direto e técnico. Responda em português.`
});

const review = await session.prompt(`
function login(user, pass) {
  const query = "SELECT * FROM users WHERE name='" + user + "' AND pw='" + pass + "'";
  return db.execute(query);
}
`);

console.log(review);
// O modelo vai identificar a SQL injection, falta de hash no password, etc.

Respostas estruturadas com JSON Schema

Uma das features mais úteis: você pode forçar o modelo a responder em um formato JSON específico.


const session = await LanguageModel.create({
  systemPrompt: 'Classifique o sentimento de textos.'
});

const schema = {
  type: 'object',
  properties: {
    sentiment: {
      type: 'string',
      enum: ['positivo', 'negativo', 'neutro']
    },
    confidence: {
      type: 'number'
    },
    keywords: {
      type: 'array',
      items: { type: 'string' }
    }
  },
  required: ['sentiment', 'confidence']
};

const result = await session.prompt(
  'O novo recurso ficou incrível, parabéns ao time!',
  { responseConstraint: schema }
);

const parsed = JSON.parse(result);
// { sentiment: 'positivo', confidence: 0.95, keywords: ['incrível', 'parabéns'] }

Isso é ouro para quem precisa de dados estruturados — classificação de reviews, extração de entidades, categorização automática. Sem regex, sem parsing manual.

Entrada multimodal: imagens e áudio

O Gemini Nano no Chrome também aceita imagens e áudio como entrada:


const session = await LanguageModel.create({
  expectedInputs: [
    { type: 'text' },
    { type: 'image' }
  ]
});

// Usando um elemento <img> da página
const imgElement = document.querySelector('#product-photo');

const description = await session.prompt([
  { role: 'user', content: [
    { type: 'text', value: 'Descreva este produto em uma frase para SEO.' },
    { type: 'image', value: imgElement }
  ]}
]);

Isso abre possibilidades interessantes: alt text automático para acessibilidade, descrição de produtos em e-commerce, análise de screenshots — tudo rodando localmente.

Gerenciamento de Sessões: O Que Ninguém Te Conta

Aqui mora um detalhe que a documentação oficial não enfatiza o suficiente: gerenciamento de memória.

Cada sessão consome recursos significativos. O Gemini Nano não é leve — ele precisa de VRAM da GPU para rodar. Se você criar sessões e esquecer de destruí-las, vai acumular consumo até o Chrome ficar lento.


let session;
try {
  session = await LanguageModel.create();
  const result = await session.prompt('...');
  // usa o resultado
} finally {
  // SEMPRE destrua a sessão quando terminar
  session?.destroy();
}

Outras dicas importantes:


// Monitorar uso de contexto
const usage = session.contextUsage;
console.log(`Tokens usados: ${usage.used} / ${usage.total}`);
// O Gemini Nano tem limite de ~4096 tokens de contexto

// Clonar sessão (preserva o contexto sem criar do zero)
const clone = await session.clone();

// Cancelar uma requisição em andamento
const controller = new AbortController();
const result = session.prompt('...', {
  signal: controller.signal
});
// Depois: controller.abort();

O limite de 4096 tokens de contexto e 1024 tokens por prompt é bem restritivo comparado com APIs na nuvem. Não dá para jogar um artigo inteiro e pedir um resumo, por exemplo.

Skills no Chrome: Prompts Viram Ferramentas de Um Clique

Em abril de 2026, o Google lançou uma feature complementar que turbina a Prompt API: Skills no Chrome.

A ideia é transformar prompts frequentes em ferramentas reutilizáveis. Você cria um “Skill” — basicamente um prompt salvo com nome e ícone — e ele vira um botão de um clique no Chrome.

Exemplos práticos:

  • “Resumir página” — seleciona texto, clica no Skill, recebe resumo
  • “Extrair dados de contato” — roda em qualquer página e puxa emails/telefones
  • “Comparar produtos” — executa em múltiplas abas simultaneamente

O diferencial é a execução multi-tab: um Skill pode rodar em várias abas ao mesmo tempo. Imagina abrir 5 páginas de produtos diferentes e pedir para o Skill gerar uma tabela comparativa. Tudo local, tudo instantâneo.

Para desenvolvedores, Skills são como “atalhos de IA” que o próprio usuário pode criar e compartilhar. O Google está apostando nisso como a próxima camada de personalização do navegador.

Quando Usar (e Quando NÃO Usar) a Prompt API

Eu já vi gente empolgada querendo substituir toda a stack de IA por essa API. Calma. Ela tem um nicho muito específico.

Vale a pena usar quando:

Cenário Por quê
Classificação de texto Sentimento, spam, categorias — rápido e sem custo
Reformulação/reescrita Ajustar tom, simplificar texto, traduzir (inglês)
Extração de dados Puxar entidades, datas, valores de texto não estruturado
Autocompletar forms Sugerir preenchimento baseado em contexto
Acessibilidade Gerar alt text, descrever imagens, resumir conteúdo
Privacidade crítica Dados médicos, financeiros — nada sai do dispositivo

NÃO use quando:

Cenário Por quê
Geração de texto longo Limite de 1024 tokens por prompt e 4096 de contexto
Precisão factual Gemini Nano não é otimizado para fatos — alucina
Raciocínio complexo Modelos maiores (GPT-5.5, Claude Opus) são muito superiores
Idiomas além do inglês Suporte limitado (inglês, japonês, espanhol por enquanto)
Mobile Simplesmente não funciona em Android/iOS
Público amplo 22 GB de espaço + GPU de 4 GB exclui muitos usuários

Comparação: Prompt API vs. APIs na Nuvem

Para deixar mais tangível, aqui vai uma comparação direta:

Aspecto Prompt API (Gemini Nano) API na Nuvem (GPT-5.5, Claude)
Custo Grátis $0.50-15 por 1M tokens
Latência ~4s no M1 MacBook 1-3s (depende do modelo)
Privacidade 100% local Dados vão para o servidor
Qualidade Boa para tarefas simples Superior em tudo
Contexto 4.096 tokens 128K-1M tokens
Disponibilidade Chrome desktop com GPU Qualquer dispositivo com internet
Offline Sim (após download) Não
Setup Zero (built-in) API key, SDK, billing

A Prompt API não substitui APIs na nuvem. Ela complementa. O cenário ideal é um sistema híbrido: tarefas simples (classificação, formatação, extração) rodam local via Prompt API, e tarefas complexas (geração longa, raciocínio, criatividade) vão para a nuvem.

Um Exemplo Prático: Review Classifier para E-commerce

Para sair do hello world, vou montar um classificador de reviews de produto que roda 100% no navegador:


class ReviewClassifier {
  #session = null;

  async init() {
    const available = await LanguageModel.availability();
    if (available === 'unavailable') {
      throw new Error('Prompt API não disponível neste dispositivo');
    }

    this.#session = await LanguageModel.create({
      systemPrompt: `You are a product review classifier. For each review,
      return JSON with: sentiment (positive/negative/neutral),
      rating_estimate (1-5), key_topics (array of strings),
      has_complaint (boolean). Be concise and accurate.`
    });
  }

  async classify(reviewText) {
    const schema = {
      type: 'object',
      properties: {
        sentiment: { type: 'string', enum: ['positive', 'negative', 'neutral'] },
        rating_estimate: { type: 'number', minimum: 1, maximum: 5 },
        key_topics: { type: 'array', items: { type: 'string' } },
        has_complaint: { type: 'boolean' }
      },
      required: ['sentiment', 'rating_estimate', 'key_topics', 'has_complaint']
    };

    const result = await this.#session.prompt(reviewText, {
      responseConstraint: schema
    });

    return JSON.parse(result);
  }

  destroy() {
    this.#session?.destroy();
  }
}

// Uso
const classifier = new ReviewClassifier();
await classifier.init();

const analysis = await classifier.classify(
  'Produto chegou rápido, qualidade excelente. Só achei o preço um pouco alto.'
);

console.log(analysis);
// {
//   sentiment: 'positive',
//   rating_estimate: 4,
//   key_topics: ['entrega', 'qualidade', 'preço'],
//   has_complaint: true
// }

classifier.destroy(); // Não esqueça!

Esse classificador roda no navegador do usuário. Sem backend, sem custo de API, sem latência de rede. Para um e-commerce com milhares de reviews, isso pode economizar centenas de dólares por mês em chamadas de API.

Monitorando o Download do Modelo

Um detalhe importante para UX: o Gemini Nano precisa ser baixado na primeira vez. São alguns gigabytes, e o usuário precisa de feedback:


const session = await LanguageModel.create({
  monitor: (monitor) => {
    monitor.addEventListener('downloadprogress', (event) => {
      const percent = Math.round(event.loaded * 100);

      // Atualiza uma barra de progresso na UI
      document.getElementById('ai-progress').style.width = `${percent}%`;
      document.getElementById('ai-status').textContent =
        `Baixando modelo de IA... ${percent}%`;
    });
  }
});

document.getElementById('ai-status').textContent = 'IA pronta!';

Se você simplesmente chamar LanguageModel.create() sem feedback, o usuário vai achar que a página travou. Sempre mostre progresso.

O Que Vem Pela Frente

A Prompt API ainda está em origin trial — não é um recurso estável do Chrome. Mas a direção é clara: o Google quer que IA local seja tão natural quanto usar localStorage ou fetch.

Alguns sinais do que está por vir:

  • Mais idiomas: português, francês, alemão e coreano estão nos planos
  • Modelos especializados: além do Gemini Nano genérico, modelos focados em tradução, código e visão
  • Android: a API deve chegar ao Chrome mobile quando os chips mobile tiverem NPUs suficientes
  • Integração com Web Workers: rodar inferência em background sem bloquear a thread principal

Para quem trabalha com front-end, vale começar a experimentar agora. A API é simples, a barreira de entrada é baixa, e quando isso sair do origin trial para GA, quem já tiver experiência vai estar na frente.

Se você quer testar hoje, a documentação oficial está no Chrome for Developers e existe um starter kit no GitHub que facilita o primeiro contato. A era da IA no navegador já começou — e desta vez, ela roda na sua máquina.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts