Criar um chatbot local e off-line com a API Prompt

Publicado em: 13 de janeiro de 2025

Esta é a última parte de uma série de três artigos sobre chatbots de LLM. Os artigos anteriores discutiram o poder dos LLMs do lado do cliente e mostraram como adicionar um chatbot com tecnologia WebLLM a um aplicativo de lista de tarefas.

Alguns dispositivos mais novos vêm com modelos de linguagem grandes e outros modelos de IA no dispositivo. O Chrome propôs integrar APIs de IA integradas ao navegador, com um número de APIs em diferentes estágios de desenvolvimento. Muitas dessas APIs estão passando pelo processo de padronização para que os sites possam usar a mesma implementação e o mesmo modelo e alcançar o desempenho máximo de inferência.

A API Prompt é uma dessas APIs de IA. Para usar, recomendamos que os desenvolvedores se inscrevam no Programa de prévia antecipada. Depois de aceito, você vai receber instruções sobre como ativar a API Prompt em navegadores. A API Prompt está disponível em um teste de origem para extensões do Chrome, assim você pode testar essa API para usuários reais de extensões.

Acesso compartilhado ao modelo

A API Prompt funciona de maneira semelhante ao WebLLM. No entanto, não há seleção de modelo desta vez. Você precisa usar o LLM que vem com o navegador. Ao ativar a IA integrada, o Chrome baixa o Gemini Nano no navegador. Esse modelo pode ser compartilhado em várias origens e execuções com desempenho máximo. Há um problema no GitHub em que um desenvolvedor pediu para adicionar um recurso de seleção de modelo.

Configurar a conversa

Você pode iniciar a conversa por mensagem da mesma forma, mas a API Prompt também oferece uma sintaxe abreviada para especificar o comando do sistema. Inicie a sessão do modelo de linguagem usando o método create() na interface LanguageModel:

const session = await LanguageModel.create({
  initialPrompt: [
    {
      type: 'system',
      content: `You are a helpful assistant. You will answer questions related
        to the user's to-do list. Decline all other requests not related to the
         user's todos. This is the to-do list in JSON: ${JSON.stringify(todos)}`,
    },
  ],
});

Responder à primeira pergunta

Em vez de ter um objeto de configuração para configurar o streaming, a API Prompt oferece dois métodos separados:

  • prompt() retorna a string completa
  • promptStreaming() retorna um iterável assíncrono. Ao contrário do WebLLM, a API de comandos responde com a string completa. Assim, não é preciso combinar os resultados por conta própria.

Se nenhuma outra origem tiver acionado o download do modelo antes, sua primeira solicitação pode levar muito tempo enquanto o Gemini Nano é baixado no navegador. Se o modelo já estiver disponível, a inferência vai começar imediatamente.

const stream = session.promptStreaming("How many open todos do I have?");
for await (const reply of stream) {
  console.log(reply);
}

Demonstração

Resumo

A integração de LLMs em aplicativos pode melhorar significativamente a experiência do usuário. Embora os serviços de nuvem ofereçam modelos de maior qualidade e alto desempenho de inferência, independentemente do dispositivo do usuário, as soluções no dispositivo, como o WebLLM e a API Prompt do Chrome, funcionam off-line, melhoram a privacidade e economizam custos em comparação com alternativas baseadas na nuvem. Teste essas novas APIs e deixe seus aplicativos da Web mais inteligentes.