API Prompt

Publicado em 20 de maio de 2025

Explicação Web Extensões Status do Chrome Intenção
GitHub Experimental No EPP Chrome 138 Ver Intent to Experiment

Com a API Prompt, você pode enviar solicitações de linguagem natural para o Gemini Nano no navegador.

Há muitas maneiras de usar a API Prompt. Em um aplicativo da Web ou site, é possível criar:

  • Pesquisa com tecnologia de IA: responda a perguntas com base no conteúdo de uma página da Web.
  • Feeds de notícias personalizados: crie um feed que classifique dinamicamente os artigos com categorias e permita que os usuários filtrem esse conteúdo.

Essas são apenas algumas possibilidades, e estamos ansiosos para ver o que você vai criar.

Analisar os requisitos de hardware

As APIs Language Detector e Translator funcionam em computadores somente no Chrome.

As APIs Prompt, Summarizer, Writer e Rewriter funcionam no Chrome quando as seguintes condições são atendidas:

  • Sistema operacional: Windows 10 ou 11, macOS 13 ou mais recente (Ventura e versões mais recentes) ou Linux. O Chrome para Android, iOS e ChromeOS ainda não são compatíveis com nossas APIs com suporte do Gemini Nano.
  • Armazenamento: pelo menos 22 GB no volume que contém seu perfil do Chrome.
  • GPU: estritamente mais de 4 GB de VRAM.
  • Rede: dados ilimitados ou uma conexão ilimitada.

Esses requisitos existem para você no processo de desenvolvimento e para os usuários que trabalham com os recursos que você cria.

Usar a API Prompt

Antes de usar essa API, aceite a Política de uso proibido da IA generativa do Google.

Há duas funções disponíveis no namespace LanguageModel:

  • availability() para verificar o que o modelo é capaz de fazer e se ele está disponível.
  • create() para iniciar uma sessão de modelo de linguagem.

Download do modelo

A API Prompt usa o modelo Gemini Nano no Chrome. Embora a API esteja integrada ao Chrome, o modelo é transferido por download separadamente na primeira vez que uma origem usa a API.

Para determinar se o modelo está pronto para uso, chame a função LanguageModel.availability() assíncrona. Isso vai retornar uma das seguintes respostas:

  • "unavailable" significa que a implementação não oferece suporte às opções solicitadas ou não oferece suporte para solicitar um modelo de linguagem.
  • "downloadable" significa que a implementação oferece suporte às opções solicitadas, mas precisa fazer o download de algo (por exemplo, o modelo de linguagem ou um ajuste fino) antes de criar uma sessão usando essas opções.
  • "downloading" significa que a implementação oferece suporte às opções solicitadas, mas precisa concluir uma operação de download em andamento antes de criar uma sessão usando essas opções.
  • "available" significa que a implementação oferece suporte às opções solicitadas sem exigir novos downloads.

Para acionar o download do modelo e criar a sessão do modelo de linguagem, chame a função LanguageModel.create() assíncrona. Se a resposta para availability() foi 'downloadable', a prática recomendada é detectar o progresso do download. Assim, você pode informar o usuário caso o download demore.

const session = await LanguageModel.create({   monitor(m) {     m.addEventListener("downloadprogress", (e) => {       console.log(`Downloaded ${e.loaded * 100}%`);     });   }, }); 

Recursos de modelo

A função params() informa os parâmetros do modelo de linguagem. O objeto tem os seguintes campos:

  • defaultTopK: o valor padrão top-K (padrão: 3).
  • maxTopK: o valor máximo de top-K (8).
  • defaultTemperature: a temperatura padrão (1.0). O valor da temperatura precisa estar entre 0.0 e 2.0.
  • maxTemperature: a temperatura máxima.
await LanguageModel.params(); // {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2} 

Criar uma sessão

Quando a API Prompt puder ser executada, você vai criar uma sessão com a função create(). É possível solicitar o modelo com as funções prompt() ou promptStreaming().

Personalizar sua sessão

Cada sessão pode ser personalizada com topK e temperature usando um objeto de opções opcional. Os valores padrão desses parâmetros são retornados de LanguageModel.params().

const params = await LanguageModel.params(); // Initializing a new session must either specify both `topK` and // `temperature` or neither of them. const slightlyHighTemperatureSession = await LanguageModel.create({   temperature: Math.max(params.defaultTemperature * 1.2, 2.0),   topK: params.defaultTopK, }); 

O objeto de opções opcional da função create() também usa um campo signal, que permite transmitir um AbortSignal para destruir a sessão.

const controller = new AbortController(); stopButton.onclick = () => controller.abort();  const session = await LanguageModel.create({   signal: controller.signal, }) 

Comandos iniciais

Com os comandos iniciais, é possível fornecer ao modelo de linguagem o contexto sobre interações anteriores, por exemplo, para permitir que o usuário retome uma sessão armazenada após uma reinicialização do navegador.

const session = await LanguageModel.create({   initialPrompts: [     { role: 'system', content: 'You are a helpful and friendly assistant.' },     { role: 'user', content: 'What is the capital of Italy?' },     { role: 'assistant', content: 'The capital of Italy is Rome.'},     { role: 'user', content: 'What language is spoken there?' },     { role: 'assistant', content: 'The official language of Italy is Italian. [...]' }   ] }); 

Limites de sessão

Uma determinada sessão de modelo de linguagem tem um número máximo de tokens que pode processar. É possível verificar o uso e o progresso em relação a esse limite usando as seguintes propriedades no objeto de sessão:

console.log(`${session.inputUsage}/${session.inputQuota}`); 

Persistência de sessão

Cada sessão rastreia o contexto da conversa. As interações anteriores são consideradas para interações futuras até que a janela de contexto da sessão esteja cheia.

const session = await LanguageModel.create({   initialPrompts: [{     role: "system",     content: "You are a friendly, helpful assistant specialized in clothing choices."   }] });  const result1 = await session.prompt(   "What should I wear today? It is sunny. I am unsure between a t-shirt and a polo." ); console.log(result1);  const result2 = await session.prompt(   "That sounds great, but oh no, it is actually going to rain! New advice?" ); console.log(result2); 

Clonar uma sessão

Para preservar os recursos, você pode clonar uma sessão com a função clone(). O contexto da conversa é redefinido, mas o comando inicial permanece intato. A função clone() usa um objeto de opções opcional com um campo signal, que permite transmitir um AbortSignal para destruir a sessão clonada.

const controller = new AbortController(); stopButton.onclick = () => controller.abort();  const clonedSession = await session.clone({   signal: controller.signal, }); 

Solicitar o modelo

É possível solicitar o modelo com as funções prompt() ou promptStreaming().

Saída sem streaming

Se você espera um resultado curto, use a função prompt(), que retorna a resposta quando ela estiver disponível.

// Start by checking if it's possible to create a session based on the // availability of the model, and the characteristics of the device. const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =   await LanguageModel.params();  const available = await LanguageModel.availability();  if (available !== 'unavailable') {   const session = await LanguageModel.create();    // Prompt the model and wait for the whole result to come back.   const result = await session.prompt("Write me a poem!");   console.log(result); } 

Saída transmitida

Se você espera uma resposta mais longa, use a função promptStreaming(), que permite mostrar resultados parciais conforme eles chegam do modelo. A função promptStreaming() retorna um ReadableStream.

const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =   await LanguageModel.params();  const available = await LanguageModel.availability(); if (available !== 'unavailable') {   const session = await LanguageModel.create();    // Prompt the model and stream the result:   const stream = session.promptStreaming('Write me an extra-long poem!');   for await (const chunk of stream) {     console.log(chunk);   } } 

Interromper a execução de um comando

prompt() e promptStreaming() aceitam um segundo parâmetro opcional com um campo signal, que permite interromper a execução de avisos.

const controller = new AbortController(); stopButton.onclick = () => controller.abort();  const result = await session.prompt(   'Write me a poem!',   { signal: controller.signal } ); 

Encerrar uma sessão

Chame destroy() para liberar recursos se você não precisar mais de uma sessão. Quando uma sessão é destruída, ela não pode mais ser usada, e qualquer execução em andamento é abortada. Talvez seja melhor manter a sessão se você pretende solicitar o modelo com frequência, já que a criação de uma sessão pode levar algum tempo.

await session.prompt(   "You are a friendly, helpful assistant specialized in clothing choices." );  session.destroy();  // The promise is rejected with an error explaining that // the session is destroyed. await session.prompt(   "What should I wear today? It is sunny, and I am unsure between a   t-shirt and a polo." ); 

Recursos multimodais

A API Prompt oferece suporte a entradas de áudio e imagem do Chrome 138 Canary para experimentação local. A API retorna uma saída de texto.

Com esses recursos, é possível:

  • Permitir que os usuários transcrevam mensagens de áudio enviadas em um app de chat.
  • Descreva uma imagem enviada para seu site para uso em uma legenda ou texto alternativo.
const session = await LanguageModel.create({   // { type: "text" } is not necessary to include explicitly, unless   // you also want to include expected input languages for text.   expectedInputs: [     { type: "audio" },     { type: "image" }   ] });  const referenceImage = await (await fetch("/reference-image.jpeg")).blob(); const userDrawnImage = document.querySelector("canvas");  const response1 = await session.prompt([{   role: "user",   content: [     { type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },     { type: "image", value: referenceImage },     { type: "image", value: userDrawnImage }   ] }]);  console.log(response1);  const audioBlob = await captureMicrophoneInput({ seconds: 10 });  const response2 = await session.prompt([{   role: "user",   content: [     { type: "text", value: "My response to your critique:" },     { type: "audio", value: audioBlob }   ] }]); 

Demonstrações multimodais

Consulte a demonstração Mediarecorder Audio Prompt para usar a API Prompt com entrada de áudio e a Canvas Image Prompt para usar a API Prompt com entrada de imagem.

Estratégia de performance

A API Prompt para a Web ainda está em desenvolvimento. Enquanto criamos essa API, consulte nossas práticas recomendadas de gerenciamento de sessão para ter o melhor desempenho.

Feedback

Seu feedback ajuda a definir o futuro dessa API e melhorias no Gemini Nano. Isso pode até resultar em APIs de tarefas dedicadas, como APIs para transcrição de áudio ou descrição de imagens, para atender às suas necessidades e às dos seus usuários.

Participar e compartilhar feedback

Sua contribuição pode afetar diretamente a criação e implementação de versões futuras dessa API e de todas as APIs de IA integradas.