Fermer

février 19, 2024

Création d’un outil d’assistant de recherche avec l’IA et JavaScript —

Création d’un outil d’assistant de recherche avec l’IA et JavaScript —


Dans cet article, nous développerons un outil de recherche basé sur l’IA utilisant JavaScript, en nous concentrant sur l’exploitation des dernières avancées en matière d’intelligence artificielle (IA) pour passer plus rapidement au crible des tonnes de données.

Nous commencerons par expliquer les concepts de base de l’IA pour vous aider à comprendre comment fonctionnera l’outil de recherche. Nous explorerons également les limites de l’outil de recherche et de certains outils disponibles qui nous aideront à améliorer les capacités de notre outil de recherche en IA de manière à lui permettre d’accéder plus efficacement à des informations personnalisées.

À la fin de l’article, vous aurez créé un outil avancé d’assistant de recherche en IA pour vous aider à obtenir des informations plus rapidement et à prendre des décisions plus éclairées, fondées sur la recherche.

Table des matières

Contexte et bases

Avant de commencer la création, il est important que nous abordions certains concepts fondamentaux qui vous aideront à mieux comprendre le fonctionnement des applications populaires basées sur l’IA telles que Bard et ChatGPT. Commençons par les intégrations vectorielles.

Intégrations vectorielles

Les intégrations vectorielles sont des représentations numériques de données textuelles. Ils sont essentiels car ils permettent aux modèles d’IA de comprendre le contexte du texte fourni par l’utilisateur et de trouver la relation sémantique entre le texte fourni et les tonnes de connaissances sur lesquelles ils ont été formés. Ces incorporations de vecteurs peuvent ensuite être stockées dans des bases de données vectorielles comme Pinecone, permettant une recherche et une récupération optimales des vecteurs stockés.

Méthodes de récupération

Les modèles d’IA ont été affinés pour apporter des réponses satisfaisantes. Pour y parvenir efficacement, ils ont été formés sur de grandes quantités de données. Ils ont également été conçus pour s’appuyer sur des techniques de récupération efficaces, telles que la recherche de similarité sémantique, afin de trouver rapidement les blocs de données les plus pertinents (intégrations vectorielles) pour la requête fournie.

Lorsque nous fournissons au modèle des données externes, comme nous le ferons dans les étapes suivantes, ce processus devient une génération augmentée par récupération. Cette méthode combine tout ce que nous avons appris jusqu’à présent, nous permettant d’améliorer les performances d’un modèle avec des données externes et de le synthétiser avec des intégrations vectorielles similaires pour fournir des données plus précises et plus fiables.

Récupération

Le rôle de JavaScript dans le développement de l’IA

JavaScript est le langage de programmation le plus populaire depuis 11 ans, selon l’enquête Stack Overflow 2023. Il alimente la plupart des interfaces Web dans le monde, dispose d’un écosystème de développeurs robuste et bénéficie d’une compatibilité multiplateforme polyvalente avec d’autres composants Web clés tels que les navigateurs.

Aux premiers stades de la révolution de l’IA, Python était le principal langage utilisé par les chercheurs en IA pour former de nouveaux modèles d’IA. Cependant, à mesure que ces modèles deviennent prêts pour le consommateur, il devient de plus en plus nécessaire de créer des applications Web complètes, dynamiques et interactives pour présenter les dernières avancées de l’IA aux utilisateurs finaux.

C’est là que JavaScript brille. Combiné avec HTML et CSS, JavaScript est le meilleur choix pour le développement Web et (dans une certaine mesure) mobile. C’est pourquoi des sociétés d’IA comme OpenAI et Mistral ont créé des kits de développement que les développeurs JavaScript peuvent utiliser pour créer un développement basé sur l’IA accessible à un public plus large.

Présentation du SDK Node d’OpenAI

Le SDK de nœud d’OpenAI fournit une boîte à outils qui expose une suite d’API que les développeurs JavaScript peuvent utiliser pour interagir avec les capacités de leurs modèles d’IA. Les séries de modèles GPT 3.5 et GPT 4, Dall-E, TTS (texte en parole) et Whisper (modèles parole en texte) sont disponibles via le SDK.

Dans la section suivante, nous utiliserons le dernier modèle GPT 4 pour créer un exemple simple de notre assistant de recherche.

Remarque : vous pouvez consulter le Dépôt GitHub au fur et à mesure que vous suivez les étapes ci-dessous.

Conditions préalables

  • Connaissance de base de JavaScript.
  • Node.js installé. Visitez le site officiel Noeud.js site Web pour installer ou mettre à jour le runtime Node.js sur votre ordinateur local.
  • Clé API OpenAI. Prenez votre Clés APIet si vous n’en avez pas, inscrivez-vous sur leur site officiel.

Étape 1 : Monter votre projet

Exécutez la commande ci-dessous pour créer un nouveau dossier de projet :

mkdir research-assistant
cd research-assistant

Étape 2 : initialiser un nouveau projet Node.js

La commande ci-dessous créera un nouveau package.json dans ton dossier :

npm init -y

Étape 3 : Installer le SDK OpenAI Node

Exécutez la commande suivante :

npm install openai

Étape 4 : Construire les fonctionnalités de l’assistant de recherche

Créons un nouveau fichier nommé index.js dans le dossier et placez-y le code ci-dessous.

J’ajouterai des commentaires en ligne pour vous aider à mieux comprendre le bloc de code :

const { OpenAI } = require("openai");

const openai = new OpenAI({
      apiKey: "YOUR_OPENAI_API_KEY",
      dangerouslyAllowBrowser: true,
});

async function queryAIModel(question) {
  try {
    const completion = await openai.chat.completions.create({
      model: "gpt-4",
      messages: [
        { role: "system", content: "You are a helpful research assistant." },
        { role: "user", content: question }
      ],
    });
    return completion.choices[0].message.content.trim();
  } catch (error) {
    console.error("An error occurred while querying GPT-4:", error);
    return "Sorry, an error occurred. Please try again.";
  }
}

async function queryResearchAssistant() {
  const query = "What is the role of JavaScript in building AI Applications?";
  const answer = await queryAIModel(query);
  console.log(`Question: ${query}\nAnswer: ${answer}`);
}

queryResearchAssistant();

Courir node index.js dans la ligne de commande et vous devriez obtenir un résultat comme celui illustré ci-dessous.

Assistant de recherche

Veuillez noter qu’il n’est pas recommandé de gérer les clés API directement dans le frontend pour des raisons de sécurité. Cet exemple est uniquement destiné à des fins d’apprentissage. À des fins de production, créez un .env déposez et placez votre OPENAI_API_KEY dedans. Vous pouvez ensuite initialiser le SDK OpenAI comme ci-dessous :

const openai = new OpenAI({
  apiKey: process.env['OPENAI_API_KEY'], 
});

Alors que nous passons à la section suivante, réfléchissez aux façons dont vous pouvez améliorer la configuration actuelle de notre assistant IA.

Notre assistant de recherche est un excellent exemple de la manière dont nous pouvons utiliser les derniers modèles d’IA pour améliorer considérablement notre flux de recherche. Cependant, il comporte certaines limitations, qui sont abordées ci-dessous.

Limites de l’outil de recherche fondamentale

Mauvaise expérience utilisateur. Notre configuration actuelle nécessite une meilleure expérience utilisateur en termes de saisie. Nous pouvons utiliser un framework JavaScript comme React pour créer des champs de saisie afin de résoudre ce problème. De plus, il faut quelques secondes avant de recevoir une réponse du modèle, ce qui peut être frustrant. Ce problème peut être résolu en utilisant des chargeurs et en intégrant la fonctionnalité de streaming intégrée d’OpenAI pour garantir que nous obtenons des réponses dès que le modèle les génère.

Base de connaissances limitée. La version actuelle s’appuie sur les connaissances pré-entraînées du GPT-4 pour obtenir une réponse. Bien que cet ensemble de données soit massif, sa date limite de connaissance est avril 2023 au moment de la rédaction. Cela signifie qu’il pourrait ne pas être en mesure de fournir des réponses pertinentes aux questions de recherche sur l’actualité. Nous tenterons de résoudre cette limitation avec notre prochaine version de l’outil en ajoutant des données externes.

Contexte limité. Lorsque nous déléguons des tâches de recherche à un humain, nous attendons de lui qu’il dispose de suffisamment de contexte pour traiter efficacement toutes les requêtes. Cependant, notre configuration actuelle traite chaque requête de manière isolée, ce qui ne convient pas aux configurations plus complexes. Pour résoudre ce problème, nous avons besoin d’un système permettant de stocker et de concaténer les réponses précédentes aux réponses actuelles afin de fournir un contexte complet.

Introduction à l’appel de fonction OpenAI

La fonctionnalité d’appel de fonctions d’OpenAI a été publiée en juin 2023, permettant aux développeurs de connecter les modèles GPT pris en charge (3.5 et 4) à des fonctions capables de récupérer des données externes contextuellement pertinentes à partir de diverses sources telles que des outils, des API et des requêtes de base de données. L’intégration de cette fonctionnalité peut nous aider à résoudre certaines des limitations de notre assistant IA mentionnées précédemment.

Création d’un outil d’assistance à la recherche amélioré

Conditions préalables

  • Clé API Actualités. Outre les prérequis que nous avons mentionnés pour la version actuelle de l’assistant, nous aurons besoin d’une clé API gratuite de ActualitésAPI. Ils disposent d’un généreux niveau de développeur gratuit, parfait pour nos besoins.

Remarque : vous pouvez consulter le Dépôt GitHub au fur et à mesure que vous suivez les étapes ci-dessous et les Livre de recettes officiel d’OpenAI pour intégrer les appels de fonction dans les modèles GPT.

J’ai également ajouté des commentaires de code en ligne pertinents afin que vous puissiez suivre.

Étape 1 : Configurez la fonction de récupération NewsAPI pour les données externes

Remarque : vous pouvez consulter le Documentation API pour voir comment la réponse est structurée.

Tout d’abord, nous allons créer une fonction pour récupérer les dernières nouvelles en fonction de la requête fournie :


async function fetchLatestNews(query) {
    const apiKey = 'your_newsapi_api_key';
    const url = `https://newsapi.org/v2/everything?q=${encodeURIComponent(query)}&from=2024-02-9&sortBy=popularity&apiKey=${apiKey}`;

    try {
        const response = await fetch(url);
        const data = await response.json();

        
        const first5Articles = data.articles && data.articles.length > 0
            ? data.articles.slice(0, 5)
            : [];

        
        const resultJson = JSON.stringify({ articles: first5Articles });

        return resultJson
    } catch (error) {
        console.error('Error fetching data:', error);
    }
}

Étape 2 : Décrire notre fonction

Ensuite, nous implémenterons une configuration d’outils décrivant la composition de notre fonction de données externes afin que le modèle d’IA sache à quel type de données s’attendre. Cela devrait inclure name, descriptionet parameters:

const tools = [
    
    {
      type: "function",
      function: {
        name: "fetchLatestNews",
        description: "Fetch the latest news based on a query",
        parameters: {
          type: "object",
          properties: {
            query: {
              type: "string",
            },
          },
          required: ["query"],
        },
      }
    },
  ];

  const availableTools = {
    fetchLatestNews, 
  };

Étape 3 : Intégrer des outils externes dans notre assistant IA

Dans cette étape, nous allons créer une fonction appelée researchAssistant. Il déclenchera une conversation avec le modèle GPT-4 d’OpenAI, exécutera la fonction de données externes spécifiée dans les outils et intégrera les réponses de manière dynamique.

Pour commencer, nous définirons un tableau qui garde une trace de toutes nos conversations avec l’AI Assistant, fournissant un contexte détaillé lorsqu’une nouvelle demande est faite :

const messages = [
    {
      role: "system",
      content: `You are a helpful assistant. Only use the functions you have been provided with.`,
    },
  ];

Une fois cela fait, nous configurerons les fonctionnalités de base de l’assistant. Cela implique de traiter les réponses des fonctions externes pour générer pour vous un rapport complet et pertinent :

async function researchAssistant(userInput) {
    
    messages.push({
      role: "user",
      content: userInput,
    });

    
        
    
    for (let i = 0; i < 5; i++) {
      
      const response = await openai.chat.completions.create({
        model: "gpt-4", 
        messages: messages, 
        tools: tools, 
        max_tokens: 4096 
      });

      
      const { finish_reason, message } = response.choices[0];

      
      if (finish_reason === "tool_calls" && message.tool_calls) {
        
        const functionName = message.tool_calls[0].function.name;
        
        const functionToCall = availableTools[functionName];
        
        const functionArgs = JSON.parse(message.tool_calls[0].function.arguments);
        
        const functionResponse = await functionToCall.apply(null, [functionArgs.query]);

        
        messages.push({
          role: "function",
          name: functionName,
          content: `
                The result of the last function was this: ${JSON.stringify(
                  functionResponse
                )}
                `,
        });
      } else if (finish_reason === "stop") {
        
        messages.push(message);
        
        return message.content;
      }
    }
    
    return "The maximum number of iterations has been met without a relevant answer. Please try again.";
}

Étape 4 : Exécutez notre assistant IA

Notre dernière étape consiste à créer une fonction qui fournit le researchAssistant paramètre de requête de fonction avec notre requête de recherche et traite son exécution :

async function main() {
    const response = await researchAssistant("I have a presentation to make. Write a market research report on Apple Vision Pro and summarize the key points.");

    console.log("Response:", response);
 }
  main();

Courir node index.js dans votre terminal, et vous devriez voir une réponse similaire à celle ci-dessous.

Assistant de recherche avec données externes

Il est intéressant de noter que la date limite de connaissance du modèle GPT-4 était en avril 2023, soit avant la sortie de Vision Pro d’Apple en février 2024. Malgré cette limitation, le modèle a fourni un rapport de recherche pertinent car nous avons complété notre requête avec des données externes.

D’autres API que vous pouvez intégrer dans votre AI Assistant peuvent être TimeAPI, API de localisationou toute autre API avec des réponses structurées à laquelle vous avez accès.

Conclusion

Quel voyage passionnant cela a été ! Ce didacticiel a exploré les concepts clés qui nous ont aidé à comprendre le fonctionnement des applications populaires basées sur l’IA.

Nous avons ensuite construit un assistant de recherche en IA capable de comprendre nos requêtes et de générer des réponses de type humain à l’aide du SDK d’OpenAI.

Pour améliorer encore notre exemple de base, nous avons incorporé des sources de données externes via des appels de fonction, garantissant ainsi que notre modèle d’IA ait accès aux informations les plus récentes et les plus pertinentes du Web. Grâce à tous ces efforts, nous avons finalement construit un assistant de recherche sophistiqué alimenté par l’IA.

Les possibilités sont infinies avec l’IA, et vous pouvez vous appuyer sur cette base pour créer des outils et des applications passionnants qui exploitent des modèles d’IA de pointe et, bien sûr, JavaScript pour automatiser les tâches quotidiennes, nous permettant ainsi d’économiser du temps et de l’argent précieux.




Source link