Publicado em 20 de maio de 2025
Explicação | Web | Extensões | Status do Chrome | Intenção |
---|---|---|---|---|
GitHub | 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 entre0.0
e2.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.
- Participe do Programa de testes.
- Para enviar feedback sobre a implementação do Chrome, envie um relatório de bug ou uma solicitação de recurso.
- Compartilhe seu feedback sobre a forma da API comentando em um problema existente ou abrindo um novo no repositório da API Prompt no GitHub.
- Participe do esforço de padronização entrando no grupo da comunidade do Web Incubator.