Créer un chatbot local et compatible avec le mode hors connexion avec l'API Prompt

Publié le 13 janvier 2025

Il s'agit du dernier article d'une série en trois parties sur les chatbots LLM. Les articles précédents ont abordé la puissance des LLM côté client et vous ont montré comment ajouter un chatbot optimisé par WebLLM à une application de liste de tâches.

Certains appareils récents sont livrés avec de grands modèles de langage et d'autres modèles d'IA directement sur l'appareil. Chrome a proposé d'intégrer des API d'IA intégrées au navigateur, avec un certain nombre d'API à différentes étapes de développement. Bon nombre de ces API sont en cours de normalisation, afin que les sites Web puissent utiliser la même implémentation et le même modèle pour obtenir des performances d'inférence maximales.

L'API Prompt est l'une de ces API d'IA. Pour l'utiliser, nous encourageons les développeurs à s'inscrire au programme Preview anticipée. Une fois votre demande acceptée, vous recevrez des instructions sur la façon d'activer l'API Prompt dans les navigateurs. L'API Prompt est disponible dans une phase d'évaluation pour les extensions Chrome. Vous pouvez donc tester cette API pour de vrais utilisateurs d'extensions.

Accès partagé aux modèles

L'API Prompt se comporte de la même manière que WebLLM. Toutefois, il n'y a pas de sélection de modèle cette fois-ci (vous devez utiliser le LLM fourni avec le navigateur). Lorsque vous activez l'IA intégrée, Chrome télécharge Gemini Nano dans le navigateur. Ce modèle peut ensuite être partagé entre plusieurs origines et s'exécuter avec des performances maximales. Une demande GitHub a été ouverte par un développeur pour ajouter une fonctionnalité de sélection de modèle.

Configurer la conversation

Vous pouvez démarrer la conversation de message exactement de la même manière, mais l'API Prompt propose également une syntaxe abrégée pour spécifier l'invite système. Démarrez la session du modèle de langage à l'aide de la méthode create() sur l'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)}`,
    },
  ],
});

Répondre à votre première question

Au lieu d'avoir un objet de configuration pour configurer le streaming, l'API Prompt propose deux méthodes distinctes :

  • prompt() renvoie la chaîne complète.
  • promptStreaming() renvoie un itérable asynchrone. Contrairement à WebLLM, l'API Prompt répond avec la chaîne de réponse complète. Vous n'avez donc pas besoin de combiner les résultats vous-même.

Si aucune autre origine n'a déclenché le téléchargement du modèle auparavant, votre première requête peut prendre beaucoup de temps pendant que Gemini Nano est téléchargé dans votre navigateur. Si le modèle est déjà disponible, l'inférence commence immédiatement.

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

Démo

Résumé

L'intégration de LLM dans les applications peut améliorer considérablement l'expérience utilisateur. Alors que les services cloud offrent des modèles de meilleure qualité et des performances d'inférence élevées, quel que soit l'appareil de l'utilisateur, les solutions sur l'appareil, telles que WebLLM et l'API Prompt de Chrome, sont utilisables hors connexion, améliorent la confidentialité et permettent de réaliser des économies par rapport aux alternatives basées sur le cloud. Testez ces nouvelles API et rendez vos applications Web plus intelligentes.