Article original : How to Start Building Projects with LLMs

Si vous êtes un professionnel de l'IA en devenir, devenir un ingénieur LLM offre un parcours de carrière passionnant et prometteur.

Mais par où commencer ? À quoi devrait ressembler votre trajectoire ? Comment devriez-vous apprendre ?

Dans l'un de mes articles précédents, j'ai tracé la feuille de route complète pour devenir un ingénieur IA / LLM. La lecture de cet article vous donnera un aperçu des types de compétences que vous devrez acquérir et de la manière de commencer à apprendre.

La meilleure façon d'apprendre est de CONSTRUIRE !

Comme le dit Andrej Karpathy :

Message de Karpathy sur la façon de devenir un expert dans un domaine

Andrej souligne que vous devriez construire des projets concrets et expliquer tout ce que vous apprenez avec vos propres mots. (Il nous conseille également de ne nous comparer qu'à une version plus jeune de nous-mêmes – jamais aux autres.)

Et je suis d'accord – construire des projets est le meilleur moyen non seulement d'apprendre, mais de vraiment bien assimiler ces concepts. Cela affinera davantage les compétences que vous apprenez pour réfléchir à des cas d'utilisation de pointe.

Mais le principal défi de cette philosophie d'apprentissage est que les bons projets peuvent être difficiles à trouver.

Et c'est le problème que j'essaie de résoudre. Je veux aider les gens, moi-même y compris, à découvrir et à construire des projets pratiques et concrets qui vous aident à développer des compétences dignes d'être présentées dans votre portfolio.

Voici ce que nous allons couvrir :

  1. Quel devrait être votre premier projet ?

  2. Projet n°1 : Résumeur de vidéos YouTube

  3. Aperçu du projet n°2 : Bot de service client polyvalent

  4. Aperçu du projet n°3 : Bot de support propulsé par RAG

  5. Conclusion

Quel devrait être votre premier projet ?

Si vous êtes un débutant ayant des bases en programmation, vos projets initiaux devraient montrer que vous pouvez construire confortablement des applications avec des LLM.

Ils devraient démontrer que :

  • vous savez ce que sont les API

  • vous savez comment les consommer

  • vous savez comment construire des produits que les gens veulent réellement utiliser

Construire un chatbot offre un excellent point de départ, mais à ce stade, tout le monde en a développé un. Et il existe de nombreuses solutions pour des prototypes simples basés sur Streamlit. Vous devez donc développer quelque chose qui soit réellement utilisable et qui ait le potentiel d'atteindre un public plus large.

Je suggérerais de construire un chatbot pour WhatsApp, Discord ou Telegram. Construisez un chatbot qui résout un problème auquel les gens sont confrontés, un problème pour lequel les entreprises ont commencé à construire des solutions.

Si je devais choisir un bon projet d'IA, et sans doute le plus courant sur lequel chaque entreprise a commencé à travailler, ce serait les chatbots propulsés par RAG.

Mais avant de passer à la construction de bots propulsés par RAG, vous devriez commencer par construire quelque chose d'un peu plus basique mais pratique avec les LLM.

Pour commencer, construisons un résumeur YouTube.

Projet n°1 : Résumer des vidéos YouTube

Nous allons construire la première partie de ce projet dans ce tutoriel : la fonctionnalité de base d'un outil de résumé de vidéos YouTube.

Projet de Wiplane sur la construction d'un chatbot WhatsApp de résumé Youtube

Notre bot va :

  • Recevoir l'URL YouTube.

  • Valider si l'URL est correcte.

  • Récupérer la transcription de la vidéo.

  • Utiliser un LLM pour analyser et résumer le contenu de la vidéo.

  • Renvoyer le résumé à l'utilisateur.

Installation et prérequis

Pour ce projet, nous allons coder la fonctionnalité de base dans un Jupyter Notebook en utilisant les packages Python suivants :

  • langchain-together — pour le LLM en utilisant l'intégration LangChain <> Together AI

  • langchain-community — pour les chargeurs de données spécifiques

  • langchain — pour la programmation avec les LLM

  • pytube — pour récupérer les informations de la vidéo

  • youtube-transcript-api — pour la transcription de la vidéo YouTube

Nous utiliserons le modèle Llama 3.1 proposé comme API par Together AI.

Together AI est une plateforme cloud qui propose des modèles open source sous forme d'API d'inférence, sans se soucier de l'infrastructure sous-jacente.

Commençons par installer ceux-ci :

!pip install — upgrade — quiet langchain
!pip install — quiet langchain-community
!pip install — upgrade — quiet langchain-together
!pip install youtube_transcript_api
!pip install pytube

Configurons maintenant notre LLM :

## configuration du modèle de langage
from langchain_together import ChatTogether
import api_key

llm = ChatTogether(api_key=api_key.api,temperature=0.0, 
                   model="meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo")

L'étape suivante consiste à traiter les vidéos YouTube comme une source de données. Pour cela, nous devrons comprendre le concept de chargeurs de documents (document loaders).

Introduction aux chargeurs de documents

Les chargeurs de documents fournissent une interface unifiée pour charger des données de diverses sources dans un format Document standardisé.

  • Ils extraient et attachent automatiquement des métadonnées pertinentes au contenu chargé.

  • Les métadonnées peuvent inclure des informations sur la source, des horodatages ou d'autres données contextuelles précieuses pour le traitement en aval.

  • LangChain propose des chargeurs pour CSV, PDF, HTML, JSON, et même des chargeurs spécialisés pour des sources comme les transcriptions YouTube ou les dépôts GitHub, comme indiqué sur leur page d'intégrations.

LangChain prend en charge différents types de chargeurs de documents

Catégories de chargeurs de documents

Les chargeurs de documents dans LangChain peuvent être globalement classés en deux types :

  1. Chargeurs basés sur le type de fichier
  • Analysent et chargent des documents basés sur des formats de fichiers spécifiques

  • Exemples : CSV, PDF, HTML, Markdown

2. Chargeurs basés sur la source de données

  • Récupèrent des données de diverses sources externes

  • Chargent les données dans des objets Document

  • Exemples : YouTube, Wikipedia, GitHub

Capacités d'intégration

  • Les chargeurs de documents de LangChain peuvent s'intégrer à presque tous les formats de fichiers dont vous pourriez avoir besoin.

  • Ils prennent également en charge de nombreuses sources de données tierces.

Pour notre projet, nous utiliserons le YoutubeLoader pour obtenir les transcriptions dans le format requis.

YoutubeLoader de LangChain pour obtenir la transcription :

## importer le chargeur de documents youtube de LangChain
from langchain_community.document_loaders import YoutubeLoader

video_url = 'https://www.youtube.com/watch?v=gaWxyWwziwE'
loader = YoutubeLoader.from_youtube_url(video_url, add_video_info=False)
data = loader.load()

Traiter la transcription YouTube

  • Afficher le contenu brut de la transcription

  • Utiliser le LLM pour résumer et extraire les points clés de la transcription :

# afficher le contenu de la page extrait
data[0].page_content

L'attribut page_content contient la transcription complète comme indiqué dans la sortie ci-dessous :

Transcription vidéo Youtube du chargeur youtube

Maintenant que nous avons la transcription, il nous suffit de la passer au LLM que nous avons configuré ci-dessus avec le prompt pour résumer.

Tout d'abord, comprenons une méthode simple :

Langchain propose la méthode invoke() à laquelle vous devez passer le message système et le message utilisateur ou humain.

Le message système est essentiellement les instructions pour le LLM sur la façon dont il est censé traiter la demande humaine.

Et le message humain est simplement ce que nous voulons que le LLM fasse.

# Ce code crée une liste de messages pour le modèle de langage :
# 1. Un message système avec des instructions sur la façon de résumer la transcription vidéo
# 2. Un message humain contenant la transcription vidéo réelle

# Les messages sont ensuite transmis au modèle de langage (llm) pour traitement
# La réponse du modèle est stockée dans la variable 'ai_msg' et renvoyée

messages = [
    (
        "system", 
        """Lisez attentivement l'intégralité de la transcription.
           Fournissez un résumé concis du sujet principal et de l'objectif de la vidéo.
           Extrayez et listez les cinq points les plus intéressants ou importants de la transcription. Pour chaque point : Énoncez l'idée clé de manière claire et concise.

        - Assurez-vous que votre résumé et vos points clés capturent l'essence de la vidéo sans inclure de détails inutiles.
        - Utilisez un langage clair et engageant, accessible à un public général.
        - Si la transcription comprend des données statistiques, des avis d'experts ou des idées uniques, donnez la priorité à leur inclusion dans votre résumé ou vos points clés.""",
    ),
    ("human", data[0].page_content),
]
ai_msg = llm.invoke(messages)
ai_msg

Mais cette méthode ne fonctionnera pas lorsque vous aurez plus de variables et que vous voudrez une solution plus dynamique.

Pour cela, LangChain propose PromptTemplate :

Un PromptTemplate dans LangChain est un outil puissant qui aide à créer des prompts dynamiques pour les grands modèles de langage (LLM). Il vous permet de définir un modèle avec des placeholders pour les variables qui peuvent être remplies avec des valeurs réelles au moment de l'exécution.

Cela aide à gérer et à réutiliser les prompts efficacement, assurant la cohérence et réduisant la probabilité d'erreurs lors de la création de prompts.

Un PromptTemplate se compose de :

  • Chaîne de modèle (Template String) : Le texte réel du prompt avec des placeholders pour les variables.

  • Variables d'entrée (Input Variables) : Une liste de variables qui seront remplacées dans la chaîne de modèle au moment de l'exécution.

# Configurer un modèle de prompt pour résumer une transcription vidéo en utilisant LangChain

# Importer les classes nécessaires depuis LangChain
from langchain.prompts import PromptTemplate
from langchain import LLMChain

# Définir un PromptTemplate pour résumer les transcriptions vidéo
# Le modèle inclut des instructions pour le modèle d'IA sur la façon de traiter la transcription
product_description_template = PromptTemplate(
    input_variables=["video_transcript"],
    template="""
    Lisez attentivement l'intégralité de la transcription.
           Fournissez un résumé concis du sujet principal et de l'objectif de la vidéo.
           Extrayez et listez les cinq points les plus intéressants ou importants de la transcription. 
           Pour chaque point : Énoncez l'idée clé de manière claire et concise.

        - Assurez-vous que votre résumé et vos points clés capturent l'essence de la vidéo sans inclure de détails inutiles.
        - Utilisez un langage clair et engageant, accessible à un public général.
        - Si la transcription comprend des données statistiques, des avis d'experts ou des idées uniques, 
        donnez la priorité à leur inclusion dans votre résumé ou vos points clés.

    Transcription de la vidéo : {video_transcript}    """
)

Comment utiliser LLMChain / LCEL pour le résumé

Une chaîne (chain) est une séquence d'étapes composée d'un modèle de langage, d'un PromptTemplate et d'un parseur de sortie optionnel.

  • Créer une LLMChain avec le modèle de prompt personnalisé

  • Générer un résumé de la transcription vidéo en utilisant la chaîne

Ici, nous utilisons LLMChain mais vous pouvez également utiliser le LangChain Expression Language (LCEL) pour faire cela :

## invoquer la chaîne avec la transcription vidéo 
chain = LLMChain(llm=llm, prompt=product_description_template)

# Exécuter la chaîne avec les détails de la vidéo fournis
summary = chain.invoke({
    "video_transcript": data[0].page_content
})

Cela vous donnera l'objet summary qui possède l'attribut text contenant la réponse au format Markdown.

summary['text']

La réponse brute ressemblera à ceci :

réponse du résumé de la simple chaîne LLM

Pour voir la réponse formatée en Markdown :

from IPython.display import Markdown, display

display(Markdown(summary['text']))

Et voilà :

Affichage structuré du résumé utilisant la fonction Markdown

Ainsi, la fonctionnalité de base de notre résumeur YouTube fonctionne maintenant.

Mais cela fonctionne dans votre Jupyter Notebook ; pour le rendre plus accessible, nous devrions déployer cette fonctionnalité sur WhatsApp.

Comment servir le résumeur YT sur WhatsApp

Établissement de la connexion entre youtube et le serveur flask en utilisant Twilio

Pour cela, nous devrons servir notre fonctionnalité de résumé YT comme un point de terminaison API pour lequel nous allons utiliser Flask. Vous pouvez également utiliser FastAPI.

Maintenant, nous allons transformer tout le code du Jupyter Notebook en fonctions. Ainsi, ajoutez une fonction pour vérifier s'il s'agit d'une URL YouTube valide, puis définissez la fonction summarise qui est essentiellement une compilation de ce que nous avons écrit dans le notebook.

Vous pouvez configurer notre endpoint de la manière suivante :

@app.route('/summary', methods=['POST'])
def summary():
    url = request.form.get('Body')  # Récupérer les données du corps de la requête
    print(url)
    if is_youtube_url(url):
        response = summarise(url)
    else:
        response = "veuillez vérifier s'il s'agit d'une URL de vidéo YouTube correcte"
    print(response)
    resp = MessagingResponse()
    msg = resp.message()
    msg.body(response)
    return str(resp)

Une fois que votre app.py est prêt avec votre API Flask, lancez le script Python, et vous devriez avoir votre serveur fonctionnant localement sur votre système.

L'étape suivante consiste à connecter votre serveur local avec WhatsApp, et c'est là que nous utiliserons Twilio.

Twilio nous permet d'implémenter cette connexion en offrant un bac à sable (sandbox) WhatsApp pour tester votre bot. Vous pouvez suivre les étapes de ce guide ici pour construire cette connexion.

J'ai réussi à établir la connexion :

Configurer les paramètres du sandbox twilio

Maintenant, nous pouvons commencer à tester notre bot WhatsApp :

Capture d'écran du chatbot résumeur

Incroyable !

J'explique toutes les étapes en détail dans mon cours basé sur des projets sur la construction de chatbots WhatsApp propulsés par LLM.

C'est un cours de 3 projets qui contient deux autres projets plus complexes. Je vais vous donner un bref résumé de ces autres projets ici afin que vous puissiez les essayer par vous-mêmes. Et si vous êtes intéressé, vous pouvez également consulter le cours.

Projet n°2 — Construire un bot capable de gérer différents types de requêtes utilisateurs

Ce bot agit comme un représentant du service client pour une compagnie aérienne. Il peut répondre à des questions liées au statut des vols, aux demandes de bagages, à la réservation de billets, et plus encore. Il utilise le Router de LangChain et des modèles LLM pour générer dynamiquement des réponses basées sur l'entrée de l'utilisateur.

  • Différents modèles de prompts sont définis pour diverses requêtes clients, telles que le statut du vol, les demandes de bagages et les plaintes.

  • En fonction de la requête, le routeur sélectionne le modèle approprié et génère une réponse.

  • Twilio renvoie ensuite la réponse au chat WhatsApp.

Projet 2 de Wiplane - Support client aérien pour gérer différents types de requêtes

Projet n°3 — Bot de support propulsé par RAG

Ce chatbot répond aux questions liées aux services aériens en utilisant un système basé sur des documents. Le document est converti en embeddings, qui sont ensuite interrogés en utilisant le système RAG de LangChain pour générer des réponses. Les entreprises recherchent aujourd'hui des développeurs possédant ces compétences, c'est donc un projet particulièrement pratique.

  • Le document des directives/règles est incorporé en utilisant FAISS et les modèles HuggingFace.

  • Lorsqu'un utilisateur soumet une question, le système RAG récupère les informations pertinentes du document.

  • Le système génère ensuite une réponse en utilisant un LLM pré-entraîné et la renvoie via Twilio.

Projet 3 de Wiplane - Bot de support propulsé par RAG

Ces 3 projets vous permettront de démarrer afin que vous puissiez continuer à expérimenter et à en apprendre davantage sur l'ingénierie de l'IA.

Cours de 3 projets de Wiplane sur la construction de chatbots whatsapp propulsés par LLM

Le support client est la catégorie la plus financée en IA car elle réduit instantanément les coûts si l'IA peut gérer la communication avec les utilisateurs mécontents.

C'est pourquoi nous construisons des bots capables de gérer différents types de requêtes, des bots intelligents propulsés par RAG qui auront accès à des documents propriétaires pour fournir des informations à jour aux utilisateurs.

C'est pour cela que j'ai créé ce cours basé sur des projets pour vous aider à commencer à construire avec les LLM.

Consultez l'aperçu du cours ici :

Et pour vous remercier d'avoir lu ce guide, vous pouvez utiliser le code FREECODECAMP pour obtenir une réduction de 20 % sur mon cours.

Je veux rendre cela accessible à tous ceux qui souhaitent sincèrement construire avec l'IA, je l'ai donc proposé au prix abordable de 14,99 $ USD.

Conclusion

Dans ce tutoriel, nous nous sommes concentrés sur la construction d'un outil amusant de résumé de vidéos YouTube servi sur WhatsApp.

La fonctionnalité de base du bot comprend :

  • La réception d'une URL YouTube

  • La validation de l'URL

  • La récupération de la transcription de la vidéo

  • L'utilisation d'un LLM pour résumer le contenu

  • Le renvoi du résumé à l'utilisateur

Nous avons utilisé un certain nombre de packages Python, notamment langchain-together, langchain-community, langchain, pytube et youtube-transcript-api.

Le projet utilise le modèle Llama 3.1 via l'API de Together AI.

Nous avons construit la fonctionnalité de résumé de base en utilisant :

  • La méthode invoke() de LangChain avec des messages système et humains

  • PromptTemplate et LLMChain pour des solutions plus dynamiques

Pour rendre l'outil accessible via WhatsApp :

  • La fonctionnalité est servie comme un point de terminaison API en utilisant Flask

  • Twilio est utilisé pour connecter le serveur local à WhatsApp

  • Un bac à sable WhatsApp est utilisé pour tester le bot

Pour continuer à construire d'autres projets, consultez le cours.

C'est un parcours pour débutants où vous commencez par apprendre à construire avec des LLM, puis appliquez ces compétences pour construire 3 types différents d'applications LLM. Pas seulement cela – vous apprenez à servir vos applications sous forme de chatbots WhatsApp (WA).