API de Prompt do Chrome
(developer.chrome.com)- API nativa do navegador para enviar solicitações em linguagem natural ao modelo Gemini Nano integrado ao Chrome, realizando inferência de IA no dispositivo sem ida e volta ao servidor
- Pode ser usada em diversos casos, como busca com IA, feed personalizado por classificação de notícias, filtragem de conteúdo, criação de eventos de calendário e extração de contatos
- Com
prompt(), é possível obter uma resposta única de uma vez, ou escolher uma resposta em streaming baseada emReadableStreamcompromptStreaming() - Oferece controle detalhado de sessão, incluindo gerenciamento de contexto baseado em sessão, resposta em streaming e clonagem de sessão
- Como a inferência de IA ocorre dentro do navegador, sem ida e volta ao servidor, isso favorece a proteção da privacidade e a redução da latência
- Inclui recursos multimodais com suporte não só a texto, mas também a entrada de imagem e áudio
- Áudio:
AudioBuffer,ArrayBuffer,Blobetc. - Imagem:
HTMLImageElement,HTMLCanvasElement,VideoFrame,Blobetc.
- Áudio:
- É possível passar um schema JSON no campo
responseConstraintpara restringir o formato de saída do modelo aboolean, uma estrutura JSON específica etc. - Com
initialPrompts, é possível injetar o prompt de sistema e o contexto de conversas anteriores, e comappend()também dá para enviar contexto adicional previamente mesmo após a criação da sessão - Ao adicionar
prefix: truea uma mensagemassistantsubsequente, é possível induzir o modelo a iniciar a resposta em um formato específico - Suporta gerenciamento da janela de contexto por sessão: é possível verificar o uso de tokens com
contextUsage/contextWindow, e em caso de overflow as conversas iniciais são removidas automaticamente (o prompt de sistema é mantido) - Com
clone(), é possível bifurcar a sessão; comdestroy(), liberar recursos; e comAbortSignal, cancelar a sessão e os prompts no meio da execução - Com
expectedInputs/expectedOutputs, é possível definir formatos de entrada e saída e o idioma (atualmente com suporte aen,ja,es) - Requisitos de hardware: Windows 10+/macOS 13+/Linux/ChromeOS, mais de 22 GB de armazenamento, mais de 4 GB de VRAM de GPU ou pelo menos 16 GB de RAM de CPU + 4 núcleos ou mais
- Em iframes de origem cruzada, é possível delegar acesso com o atributo
allow="language-model"; ainda não há suporte em web workers - Disponível como origin trial a partir do Chrome 138
1 comentários
Opiniões do Hacker News
Esta API parece perfeita para uma ideia de de-snarkifier que venho pensando há muito tempo
As redes sociais podem ser intelectualmente estimulantes e trazer coisas para aprender, mas é muito fácil ser sugado para brigas ideológicas e flame wars mesmo sem querer. Ficar brigando na internet com desconhecidos, desperdiçando energia emocional, é quase um desperdício de capital humano
Com uma API dessas, daria para fazer uma extensão de navegador que, antes de mostrar um texto, suavizasse apenas expressões agressivas ou sarcásticas, preservando intactas as informações factuais. Indo além, talvez até desse para transformar um tom agressivo em algo que soasse ridículo ou incompetente
Assim, quem lê ficaria protegido de ataques pessoais de estranhos, e quem escreve perderia o incentivo para ser rude. Se todo mundo usasse esse tipo de filtro, também deixaria de existir motivo para competir para ver quem consegue ser mais cruel
Tem todo o valor nutritivo, mas sem nenhum sabor especial
O que eu quero é eliminar totalmente títulos clickbait e anúncios, mostrando só títulos secos e factuais
Para qualquer tema, um artigo central e alguns comentários realmente úteis já bastam; o resto é, em grande parte, ruído que eu não quero ver
O estado atual das redes sociais está tão ruim que quase não uso mais nenhuma, e o HN era a única exceção, mas até aqui parece estar indo em direção parecida por causa da saturação de IA. Mesmo assim, acabo desperdiçando algumas horas a cada duas semanas, e queria cortar até isso de vez
Idealmente, eu gostaria que 98% do conteúdo fosse filtrado ou resumido até desaparecer, e que, com o tempo, a internet fosse usada só quando eu quisesse pesquisar algo de forma intencional. Basicamente, quero remover a maior parte do aspecto de entretenimento da internet e redirecionar meu tempo e energia para a vida real e para fontes de alta qualidade, como livros
Essa extensão é uma ferramenta de crowdsourcing para reduzir sensacionalismo, embora eu ache que alguns dos principais contribuidores talvez sejam bots de LLM
Dito isso, esse tipo de coisa é imprevisível quando bate de frente com a realidade, e, mesmo se funcionar bem, há uma boa chance de operar de forma bem diferente da imaginada no começo
Não consegui me segurar e montei às pressas um protótipo chamado Snarknada, enquanto também avaliava os padrões de baixa latência e o potencial de precisão
É exatamente por isso que acho que on-device faz sentido para esse tipo de uso. Se você tentar suavizar um feed inteiro de rolagem infinita com uma API em nuvem, o custo de tokens fica inviável para o desenvolvedor. Além disso, é natural que ninguém queira mandar seu feed pessoal ou DMs para um servidor de terceiros só para ajustar o tom
Levando isso para dentro do dispositivo, Semantic Mutation de alta frequência pode finalmente se tornar viável em termos técnicos e de custo. Se alguém levar isso mais a sério do que meu protótipo de PM e topar com pontos concretos de atrito, eu adoraria ouvir. Isso ajuda a definir prioridades no roadmap
[1]: Se você usa agentes de código (Cursor, Claude Code etc.), recomendo apontar para https://www.npmjs.com/package/built-in-ai-skills-md-agent-md. Muitos modelos ainda foram treinados com o namespace obsoleto
window.ai, então esse arquivo de skills ajuda a fazer com que usem a API atual corretamenteEu liderei o trabalho de design desta API e, antes de me aposentar, também escrevi um texto organizando as considerações de projeto relacionadas
https://domenic.me/builtin-ai-api-design/
E também queria saber se, ao criar algo assim, os navegadores tentam se alinhar na prática entre si, fora do âmbito formal do W3C, para buscar pontos em comum. No fim, esse setor é relativamente pequeno
Isso realmente funciona, e eu já lancei algo usando para local inference
Em tarefas leves de LLM, como busca, deu para usar como uma espécie de ollama para quem tem pouco recurso. A maior vantagem é ser gratuito, preservar a privacidade e exigir quase nada do usuário, então é uma boa forma de levar inferência local para pessoas não técnicas
Mas a experiência real de uso não é boa. O tamanho do download do modelo é várias ordens de magnitude maior que o próprio navegador, e tudo isso precisa terminar antes de receber o primeiro token
Isso parece difícil de resolver antes de o sistema operacional passar a oferecer de forma confiável modelos já embutidos, aos quais APIs desse tipo possam se conectar
O problema maior é que, na maioria dos PCs comuns, o modelo é pequeno demais e lento demais. Tentei reescrever em tempo real frases de um text adventure da infocom, mas hoje isso ainda é lento demais em muitos PCs para ser prático
Seria parecido com o BitTorrent recebendo pedaços de arquivo de vários hosts. As camadas compartilhadas ainda precisariam ser baixadas, mas o tempo até o primeiro token poderia ficar proporcional ao tamanho ativo, e não ao tamanho total
Claro, aí já não seria inferência totalmente offline, mas, para um recurso web de navegador, isso talvez não seja a consideração principal
Mas, se o modelo é muito maior que o navegador e precisa ser baixado antes do primeiro token, fico curioso se isso significa download sob demanda. Se o usuário só baixar quando fizer a primeira chamada e tiver de esperar até o fim nesse momento, a experiência parece bem terrível
Também queria saber se o Chrome mostra algo como uma caixa de diálogo de status de download para reduzir a confusão, e quanto espaço em disco isso ocupa
À primeira vista, parece que isso usa Gemini Nano, mas o Gemma 4 E2B/E4B mais recente parece bem melhor, então talvez por enquanto valha mais a pena distribuir uma versão quantizada via extensão
Fontes:
Se Gemma 4 ou o Gemini Nano equivalente ainda não estiver no Chrome, eu esperaria que entrasse em breve
E este texto foi atualizado pela última vez em 2025-09-21, quando já era Gemini Nano 3
Está escrito que a Prompt API funciona enviando solicitações em linguagem natural para o Gemini Nano dentro do navegador
No Edge, provavelmente seria Phi4
Isso também parece uma boa maneira de scripts JS maliciosos empurrarem geração de tokens para visitantes desavisados
Também seria interessante ver se dá para distribuir prompts maiores quebrando-os em partes menores entre vários navegadores, usando algum tipo de padrão de subagente ou estrutura parecida com RLM, de modo a produzir resultados úteis com esse processamento distribuído
A infraestrutura técnica e de negócio também ficaria extremamente complexa; então, se a ideia é mesmo empurrar prompts para o navegador do usuário, talvez seja melhor simplesmente usar direito a Chrome API. Também é questionável em quantos casos faria sentido real descarregar prompts do servidor para modelos tão fracos
E, se alguém realmente quisesse fazer isso, WebGPU já existe há bastante tempo
Isso parece um passo em direção a uma Model API de verdade, mas ainda é só um passo pequeno
Também me lembra o Foundation Models da Apple
Muita integração de IA se concentra em comunicação textual ou estilo de chat, mas, na prática, há muito software que também se beneficiaria em interfaces não textuais
No fim, acho que o sistema operacional e o navegador precisam oferecer APIs que gerenciem modelos, para que apps possam acessar modelos on-device e remotos por meio de uma interface simples
Seria ótimo se isso fosse padronizado de forma multiplataforma, e precisaria incluir mobile também; então, realisticamente, Apple e Google parecem ser os atores com mais capacidade de empurrar isso. A Meta talvez venha depois, ou até se mova antes, quem sabe
O ponto principal é que isso não deveria ser exclusivo de um modelo específico promovido por marketing
Os apps deveriam poder consultar e escolher um modelo apropriado
(1) https://developer.apple.com/documentation/foundationmodels
Claro, ainda está bem no começo
https://github.com/mozilla/standards-positions/issues/1067
Estamos usando isso para resumos retrospectivos de hackday
https://remotehack.space/previous-hacks/
É um script pequeno que lê feeds RSS e gera resumos em forma de texto corrido, e combina bem com um site estático. Um dia eu gostaria de expandir isso para também fazer outras perguntas sobre o mesmo conteúdo
Um LLM local acessível pelo navegador é ótimo do ponto de vista de privacidade, mas, se cada navegador tiver um modelo diferente por trás dessa API, o pesadelo de testes pode ficar ainda pior do que já é hoje
No fim, como a maioria das implementações provavelmente vai se alinhar ao Gemini Nano, também fico curioso se isso não vai empurrar ainda mais usuários para o Chrome
Na prática, prompts não são agnósticos a modelo, então um prompt cuidadosamente ajustado para Gemini Nano 3 v2025 pode simplesmente perder desempenho no modelo do Gecko sem nenhum aviso. E a API nem sequer oferece detecção de capacidades para permitir tratamento condicional
Isso é ainda pior do que o WebGL, que pelo menos permitia consultar suporte a extensões. Lançar uma funcionalidade que depende da qualidade de prompt de um modelo cujo nome e versão ficam escondidos atrás do navegador é quase como lançar um software cuja funcionalidade depende do dicionário instalado pelo usuário
Pelo que eu entendo, o Gemini Nano não tem pesos abertos como o Gemma
A menos que alguém já tenha feito isso, eu adoraria tentar extrair os pesos do modelo