Publicado em 11 de novembro de 2024. Última atualização: 20 de maio de 2025
Explicação | Web | Extensões | Status do Chrome | Intenção |
---|---|---|---|---|
GitHub | Ver | Intenção de experimentar |
Com a API Prompt, você pode enviar solicitações em linguagem natural para o Gemini Nano no navegador.
Há muitas maneiras de usar a API de solicitação em extensões do Chrome. Exemplo:
- Eventos instantâneos da agenda. Desenvolva uma extensão do Chrome que extraia automaticamente os detalhes de eventos de páginas da Web para que os usuários possam criar entradas de agenda em apenas algumas etapas.
- Extração de contatos integrada. Crie uma extensão que extraia informações de contato de sites, facilitando o contato dos usuários com uma empresa ou a adição de detalhes à lista de contatos.
- Filtragem de conteúdo dinâmico. Crie uma extensão do Chrome que analise artigos de notícias e oculte ou desfoca automaticamente o conteúdo com base em temas definidos pelo usuário.
Essas são apenas algumas possibilidades, e estamos ansiosos para ver o que você vai criar.
Revisar os requisitos de hardware
Os desenvolvedores e usuários que operam recursos usando essas APIs no Chrome precisam atender aos seguintes requisitos. Outros navegadores podem ter requisitos operacionais diferentes.
As APIs Language Detector e Translator funcionam no Chrome em computadores. Essas APIs não funcionam em dispositivos móveis. 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 posteriores) ou Linux. O Chrome para Android, iOS e ChromeOS ainda não é compatível com as APIs que usam o Gemini Nano.
- Armazenamento: pelo menos 22 GB no volume que contém seu perfil do Chrome.
- GPU: mais de 4 GB de VRAM.
- Rede: dados ilimitados ou uma conexão ilimitada.
O tamanho exato do Gemini Nano pode variar um pouco. Para encontrar o tamanho atual, acesse
chrome://on-device-internals
e clique em Status do modelo.
Abra o Caminho do arquivo listado para determinar o tamanho do modelo.
Usar a API de comandos nas extensões
Antes de usar essa API, leia e aceite a Política de uso proibido da IA generativa do Google.
Há duas funções de extensão disponíveis para você no
namespace LanguageModel
:
availability()
para verificar o que o modelo pode 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 seja integrada ao Chrome, o modelo é baixado separadamente na primeira vez que uma extensão usa a API.
Para determinar se o modelo está pronto para uso, chame a função assíncrona
LanguageModel.availability()
. Isso vai retornar uma das
seguintes respostas:
"unavailable"
significa que a implementação não é compatível com as opções solicitadas ou não é compatível com a solicitação de um modelo de linguagem."downloadable"
significa que a implementação oferece suporte às opções solicitadas, mas precisa baixar algo (por exemplo, o próprio modelo de linguagem ou um ajuste refinado) 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
assíncrona LanguageModel.availability()
. Se a resposta a availability()
foi 'downloadable'
, a prática recomendada é
ouvir 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
Depois que a API Prompt puder ser executada, crie uma sessão com a função create()
.
É possível enviar comandos ao 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, você pode fornecer ao modelo de linguagem contexto sobre interações anteriores, por exemplo, para permitir que o usuário retome uma sessão armazenada após a 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. Para verificar o uso e o progresso em relação a esse limite, use as seguintes propriedades no objeto de sessão:
console.log(`${session.inputUsage}/${session.inputQuota}`);
Persistência da sessão
Cada sessão acompanha o contexto da conversa. As interações anteriores são consideradas para as 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 recursos, é possível clonar uma sessão atual com a função clone()
. O contexto da conversa é redefinido, mas o comando inicial permanece
intacto. 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,
});
Comandar o modelo
É possível enviar comandos ao modelo com as funções prompt()
ou promptStreaming()
.
Saída não streaming
Se você espera um resultado curto, use a função prompt()
, que retorna
a resposta assim que 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 à medida que 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);
}
}
Parar de executar um comando
As funções prompt()
e promptStreaming()
aceitam um segundo parâmetro opcional com
um campo signal
, que permite interromper a execução de solicitações.
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 é
interrompida. É recomendável 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."
);
Demonstração
Para testar a API Prompt nas extensões do Chrome, instale a extensão de demonstração. O código-fonte da extensão está disponível no GitHub.
Participe e compartilhe feedback
Sua opinião pode afetar diretamente a forma como criamos e implementamos versões futuras dessa API e de todas as APIs de IA integradas.
- Para enviar feedback sobre a implementação do Chrome, registre um relatório de bug ou uma solicitação de recurso.
- Compartilhe seu feedback sobre o formato da API comentando um problema atual ou abrindo um novo no repositório do GitHub da API Prompt.
- Faça o download da extensão de exemplo da API Prompt no GitHub.
- Participe do esforço de padrões entrando no Web Incubator Community Group (em inglês).