AI Integration

Tutoriel Chroma : Construire un Chatbot Amélioré avec Anthropic Claude

A visual representation of using Anthropic Claude with ChromaDB for chatbots.

Introduction

Le Modèle Claude d'Anthropic Dévoilé : Déverrouillage de Capacités Uniques

Anthropic, une entreprise mondiale d'IA de premier plan, introduit le révolutionnaire Modèle Claude. De Notion à Quora, les grands acteurs technologiques exploitent sa polyvalence dans les conversations, le traitement de texte et même la programmation. Mais qu'est-ce qui distingue Claude ? Plongez dans ce tutoriel distinctif explorant les caractéristiques remarquables qui font de Claude un modèle à part.

La Puissance de ChromaDB et des Embeddings

Découvrez le rôle crucial des embeddings dans le traitement du langage naturel et l'apprentissage automatique. Apprenez comment ces représentations vectorielles capturent le sens sémantique, permettant des recherches textuelles basées sur la similarité. Explorez ChromaDB, une base de données d'embedding open-source, et sa capacité à stocker et interroger des embeddings en utilisant des représentations de documents. Plongez dans cette discussion éclairante sur le monde dynamique des embeddings et de ChromaDB.

Conditions Préalables

  • Connaissances de base en Python
  • Accès à l'API Claude d'Anthropic
  • Accès à l'API d'OpenAI (pour la fonction d'embedding)
  • Une base de données Chroma configurée

Plan

  • Initialiser le Projet
  • Configurer les Bibliothèques Nécessaires
  • Écrire les Fichiers du Projet
  • Tester le Chatbot de Base sans Conscience du Contexte
  • Utiliser la Grande Fenêtre de Contexte de Claude
  • Tester le Chatbot avec Conscience du Contexte
  • Fournir des Informations Contextuelles à Claude
  • Évaluer le Chatbot Amélioré (Contexte Additionnel Fournit)
  • Construire une Base de Connaissances pour Claude
  • Tester la Forme Finale de Claude (Améliorée par la Base de Connaissances)

Initialiser le Projet

D'accord, retroussons nos manches et commençons à coder ! Tout d'abord, nous devons initialiser le projet. Nous allons le nommer chroma-claude cette fois. Ouvrez donc votre terminal préféré, naviguez jusqu'à votre répertoire de codage ou de projet préféré, et créez un nouveau répertoire pour chroma-claude.

Ensuite, nous allons créer un nouvel environnement virtuel pour ce projet. Si vous vous demandez pourquoi, eh bien, un environnement virtuel nous aide à garder les dépendances de notre projet séparées de notre environnement Python global. Cette isolation est un véritable sauveur lorsque vous jonglez avec plusieurs projets ayant différentes dépendances.

Mais ce n'est pas le seul avantage d'un environnement virtuel ! Cela facilite également le suivi des bibliothèques et des versions spécifiques que nous utilisons. Nous faisons cela en les 'gelant' dans un fichier requirements.txt, qui est un enregistrement pratique de toutes les dépendances nécessaires à votre projet pour fonctionner.

Configurer les Bibliothèques Nécessaires

Ensuite, nous devons installer toutes les bibliothèques nécessaires. Si vous avez lu mes autres tutoriels sur Chroma et les modèles d'OpenAI, vous trouverez notre processus d'installation assez familier. Cette fois, cependant, nous allons également installer la bibliothèque anthropic.

Voici un rapide récapitulatif des bibliothèques que nous allons utiliser :

  • chromadb bibliothèque : Nous l'utiliserons pour stocker et interroger les embeddings.
  • anthropic bibliothèque : C'est nécessaire pour interagir avec le modèle Claude d'Anthropic.
  • halo bibliothèque : Cela fournit de superbes indicateurs de chargement qui apparaissent pendant l'attente des requêtes.

Écrire les Fichiers du Projet

Il est temps de plonger à nouveau dans la partie codage ! Assurez-vous que nous sommes toujours dans notre répertoire de projet. Ouvrez votre IDE ou éditeur de code préféré et créez un nouveau fichier, appelons-le main.py. Ce sera le seul fichier Python dont nous avons besoin pour ce projet.

Étape 1 : Importer les Bibliothèques Nécessaires

Commencez par importer les bibliothèques nécessaires. Celles-ci incluent dotenv pour charger les variables d'environnement, os pour des opérations au niveau système, anthropic pour interagir avec le modèle Claude, pprint pour un affichage soigné, et halo pour afficher un indicateur de chargement.

Étape 2 : Charger les Variables d'Environnement

Chargez les variables d'environnement à partir de votre fichier .env. C'est ici que vous stockez des données sensibles comme votre clé API d'Anthropic.

Étape 3 : Définir la Fonction de Génération de Réponse

Définissez une fonction appelée generate_response() qui prend des messages en entrée et renvoie une réponse générée par le modèle. À l'intérieur de cette fonction, vous initialisez d'abord un indicateur de chargement qui s'exécute pendant que le modèle génère une réponse.

Étape 4 : Créer un Client Anthropic et Envoyer une Requête de Complétion

Ensuite, créez un client Anthropic en utilisant votre clé API et utilisez-le pour envoyer une requête de complétion au modèle Claude. La requête inclut vos messages d'entrée, le nom du modèle, et les séquences d'arrêt pour signaler la fin d'un tour de conversation.

Étape 5 : Arrêter l'Indicateur et Imprimer la Requête et la Réponse

Une fois la réponse reçue, arrêtez l'indicateur de chargement. Imprimez à la console à la fois la requête et la réponse à des fins de débogage. Ensuite, retournez la réponse.

Étape 6 : Définir la Fonction Principale

Définissez la fonction principale. C'est ici que vous démarrez une boucle continue pour obtenir les entrées de l'utilisateur et générer des réponses.

Étape 7 : Préparer le Prompt et Gérer la Commande 'quit'

À l'intérieur de la boucle, vous préparez d'abord le prompt pour le modèle Claude en concaténant le texte d'entrée de l'utilisateur avec les marqueurs de conversation nécessaires. Vous gérez également la commande "quit" : si l'utilisateur tape "quit", vous brisez la boucle pour arrêter le chat.

Étape 8 : Générer la Réponse et l'Imprimer

Ensuite, vous appelez la fonction generate_response() avec les messages préparés pour générer une réponse du modèle Claude. Une fois la réponse reçue, vous l'imprimez à la console, avec le préfixe "Claude:" pour désigner la réponse du chatbot.

Étape 9 : Exécuter la Fonction Principale

Enfin, incluez une instruction conditionnelle pour garantir que la fonction principale s'exécute uniquement si le script est exécuté directement (et non importé en tant que module).

Chatbot de Base (Sans Conscience du Contexte)

Si vous avez suivi les étapes correctement, votre script complet main.py devrait ressembler à ceci :

Ce script permettra une interaction basique avec le modèle Claude ; cependant, il ne maintient pas le contexte entre les entrées de l'utilisateur. Cela signifie que chaque entrée est traitée comme une conversation distincte et que le modèle ne se souvient pas des entrées précédentes.

Tester le Chatbot de Base sans Conscience du Contexte

Maintenant, testons notre première itération du chatbot Claude ! Bien que cette version basique devrait bien fonctionner, elle manque de 'conscience du contexte' - un terme utilisé pour décrire la capacité d'un chatbot à se souvenir et à se référer à des parties antérieures de la conversation. Cela signifie qu'après chaque réponse, notre bot oubliera ce que l'utilisateur a précédemment dit.

Pour tester le chatbot, exécutez le script main.py avec la commande python ou python3 dans votre terminal :

Si tout a été configuré correctement, le terminal devrait afficher un prompt d'entrée, vous invitant à entrer un message. Essayez de taper quelque chose et appuyez sur entrer. Vous remarquerez un indicateur de chargement apparaître pendant que le bot génère une réponse.

Après quelques secondes, le terminal affichera la réponse du bot.

Maintenant, essayez de poser une question de suivi au bot basée sur sa réponse précédente. Vous remarquerez que Claude ne se souvient pas du contexte du message précédent.

Rappelez-vous que si vous rencontrez des problèmes lors de l'exécution du script, vérifiez le message d'erreur dans le terminal et essayez de résoudre le problème en conséquence.

Utiliser la Grande Fenêtre de Contexte de Claude

Nous utilisons donc un modèle avec une très grande fenêtre de contexte. Ce serait un terrible gâchis de l'utiliser uniquement pour une conversation dont il oublie instantanément le contenu. Modifions un peu notre code. Cette fois, notre code devrait capturer à la fois le chat précédent et l'entrée actuelle de l'utilisateur.

Ce nouveau bloc introduit une variable messages en dehors de la boucle principale. Cette variable contiendra l'historique complet de la conversation et sera mise à jour en continu tout au long de la conversation.

Ici, au lieu d'assigner simplement l'entrée actuelle de l'utilisateur à la variable messages, vous l'ajoutez maintenant. Cela garantit que la variable messages maintient un enregistrement de toutes les entrées de l'utilisateur.

Dans ce bloc, après avoir généré une réponse de Claude, vous ajoutez la réponse de Claude à la variable messages. Cela garantit que les entrées de l'utilisateur et les réponses de Claude sont conservées dans la variable messages, permettant à Claude d'accéder à l'historique complet de la conversation.

Enfin, pour s'adapter aux plus grands historiques de conversation que la variable messages pourrait contenir, vous avez augmenté max_tokens_to_sample de 300 à 1200. Cela demande à Claude de considérer jusqu'à 1200 tokens lors de la génération d'une réponse, ce qui est particulièrement important lors de la gestion de conversations plus longues. Cependant, notez que si une conversation dépasse la fenêtre de contexte du modèle de 1200 tokens, les parties plus anciennes de la conversation seront tronquées ou ignorées, ce qui peut entraîner une perte de contexte.

Tester le Chatbot avec Conscience du Contexte

Dans cette section, nous allons mettre notre chatbot conscient du contexte à l'épreuve. En particulier, nous demanderons à Claude de parler du jeu vidéo Dota 2, et en particulier du dernier patch, "Nouveau Front".

Jusqu'ici, tout va bien. Maintenant, posons une deuxième question : "Que savez-vous du dernier patch, Nouveau Front ?" Claude, malgré le fait d'être un chatbot avancé, confesse ne pas avoir de connaissances spécifiques sur le dernier patch. Cela est dû à la date de coupure de l'entraînement du modèle, qui s'est terminée à la fin de 2021. Dans un scénario plus optimal, Claude offrirait des informations pertinentes, mais peut-être obsolètes. Dans un scénario moins souhaitable, Claude pourrait générer ce qui semble être des informations précises mais qui sont en réalité incorrectes, un phénomène connu sous le nom d'"hallucination". Il est crucial d'être conscient de ces limitations et d'exercer de la prudence lorsque l'on questionne le modèle sur des événements ou des informations postérieures à sa formation.

Alors, comment pouvons-nous contourner cette limitation et doter Claude d'informations plus récentes ? Eh bien, dans le cadre de ce tutoriel, nous fournirons à Claude des matériaux d'apprentissage complémentaires manuellement, en copiant et collant les données dans des fichiers texte, que nous pourrons ensuite lire en utilisant la fonctionnalité intégrée de Python. Bien que nous ne fassions pas techniquement apprendre à Claude dans le sens conventionnel, nous fournissons des données fraîches qu'il peut utiliser pour générer des réponses plus à jour. Approfondissons cela dans la prochaine section.

Fournir des Informations Contextuelles à Claude

Pour tester le plein potentiel de Claude, nous devons lui fournir suffisamment de données contextuellement pertinentes. Pour ce tutoriel, j'ai copié du texte de sites wiki, comme celui d'IGN discutant du patch "Nouveau Frontiers". Ce texte est enregistré dans un fichier nommé patch_notes.txt. Commençons par lire ce fichier dans notre fonction principale.

Nous lisons le fichier texte et utilisons son contenu pour former le message initial pour Claude. Ce message fournira à Claude un contexte sur le patch Dota 2, auquel il pourra se référer lors de la réponse à des requêtes connexes. Cette méthode n'est pas techniquement doter Claude de "nouvelles informations", mais elle aide à générer des réponses précises pour cette interaction spécifique.

Nous ajoutons également un compteur de tokens près de la fin de la fonction main(). Cela nous aide à surveiller le nombre total de tokens utilisés dans la conversation, garantissant que nous ne dépassons pas la limite maximale de tokens du modèle. Voici à quoi ressemble notre code mis à jour :

Évaluer le Chatbot Amélioré (Contexte Additionnel Fournit)

Mettont notre chatbot amélioré à l'épreuve ! Tout d'abord, nous demanderons des informations générales concernant le dernier patch de Dota 2, "Nouveau Frontiers".

Impressionnant, Claude énumère maintenant tous les principaux changements introduits par le patch avec une précision remarquable. Cependant, il est à noter que le compteur de tokens a déjà atteint 5298. Cela nous rappelle que les réponses détaillées et l'historique de conversation étendu peuvent rapidement consommer des tokens.

Pour évaluer davantage la compréhensibilité de Claude concernant le contexte fourni, nous lui demanderons ce que sont les "Tormentors". Cette question peut être considérée comme un test de pH de la conscience du contexte de Claude. Pour un auditeur non informé, "Tormentors" pourrait évoquer des images de créatures cruelles et menaçantes, alors que dans Dota 2, ils sont en réalité des cubes flottants bénins.

Claude a passé le test haut la main ! Il est vraiment fascinant de voir comment des prompts appropriés, couplés à un contexte additionnel, peuvent considérablement améliorer la précision des réponses de Claude.

Alors, quelle est la suite ? Que se passe-t-il si nous voulons comparer les capacités de deux héros différents, ou peut-être en savoir plus sur de nouveaux héros qui ont été introduits après fin 2021, comme Dawnbringer ou Primal Beast ? Théoriquement, nous pourrions continuer à alimenter Claude avec de plus en plus d'informations jusqu'à atteindre la limite de la fenêtre de contexte, même avec la généreuse limite de 100k.

C'est à ce stade que nous devons envisager d'établir une base pour la base de connaissances du bot. C'est semblable à comment des professionnels hautement qualifiés, comme des avocats ou des médecins, doivent souvent consulter des livres de référence. De même, Claude peut grandement bénéficier d'une base de données de connaissances à laquelle il peut se référer lorsqu'il répond à des questions pertinentes. Cela cadre parfaitement pour introduire Chroma, un outil qui permet de faire des requêtes avec des mots similaires et apparentés, améliorant la capacité de Claude à accéder et utiliser une base de données de connaissances.

Construire une Base de Connaissances pour Claude

L'objectif de construire une base de connaissances pour Claude est de l'équiper d'une vaste gamme de données auxquelles il peut se référer lors de la génération de réponses. Cela lui permet de fournir des réponses plus précises et conscientes du contexte, même lors de la gestion de données complexes et diversifiées, comme les dernières notes de patch Dota 2.

Pour ce faire, nous allons utiliser la base de données Chroma comme notre base de connaissances. De cette façon, nous pouvons diviser les données en morceaux plus petits et les stocker dans la base de données. Cela est plus efficace que de nourrir l'intégralité des données à Claude chaque fois que nous communiquons avec lui. Pour diviser les données en morceaux plus petits, nous utiliserons la bibliothèque tiktoken.

Tout d'abord, installons tiktoken et chromadb, et mettons à jour notre fichier requirements.txt :

Ensuite, nous allons introduire quelques changements à notre script pour permettre la fonctionnalité de la base de données Chroma :

  • Tout d'abord, nous importons toutes les bibliothèques nécessaires.
  • Maintenant, créons une fonction create_chunks pour diviser notre texte volumineux en morceaux plus petits. Cette fonction renverra les morceaux de texte successifs :

Dans la fonction principale, nous initialisons le tokenizeur, fractionnons les notes de patch et créons une nouvelle collection Chroma. Chaque morceau de texte est ensuite ajouté à la collection en tant que document séparé :

Lors de la conversation avec l'utilisateur, nous interrogeons la collection Chroma pour les 20 documents les plus pertinents par rapport à l'entrée de l'utilisateur. Les résultats de cette requête sont ensuite ajoutés au contexte pour Claude, améliorant ainsi ses réponses :

Tester la Forme Finale de Claude (Améliorée par la Base de Connaissances)

Nous sommes enfin arrivés au moment de vérité ! Ce tutoriel peut avoir été un peu plus long que d'habitude, mais il est crucial pour démontrer la grande fenêtre de contexte de Claude et la puissance de la base de données Chroma pour améliorer la base de connaissances de Claude. Alors, mettons notre Claude amélioré à l'épreuve !

Lors du premier test, je demanderai à Claude de lister les trois mises à jour les plus significatives qui changent la donne dans le dernier patch de Dota 2.

Claude a impressionné en identifiant les trois mises à jour les plus marquantes : la carte élargie avec 40 % de terrain en plus, le retravail de l'armure du roi noir, et le nouveau type d'attribut de héros : Universel. Rappelez-vous que nous n'avons pas alimenté Claude avec l'intégralité des notes de patch en une fois. Au lieu de cela, il exploite la puissance de sa base de connaissances améliorée pour obtenir ces informations pertinentes.

Pour le prochain défi, je demanderai à Claude d'expliquer ce que sont les Tormentors dans le dernier patch, comme si j'allais entrer dans un match complètement à l'aveugle.

Claude fournit un aperçu général des Tormentors mais manque certains détails importants. Par exemple, il se réfère à "plusieurs Tormentors" alors que seulement deux apparaissent à des emplacements spécifiques sur l'ensemble de la carte. Cela souligne le besoin de mettre continuellement à jour la base de connaissances avec des données plus précises pour aider Claude à fournir des analyses plus précises et utiles.

Ces tests démontrent le potentiel des modèles d'IA comme Claude lorsqu'ils sont combinés avec une base de connaissances riche et continuellement mise à jour. Ils montrent également la nature continue du développement de l'IA : plus nous alimentons nos modèles avec des données de meilleure qualité, plus ils peuvent délivrer des réponses précises et nuancées.

Conclusion : Libérer la Puissance du Modèle Claude d'Anthropic et de l'Intégration de Chroma

Dans ce tutoriel complet sur l'anthropique, nous avons exploré les capacités extraordinaires du modèle Claude d'Anthropic et de la base de données Chroma. Le modèle Claude, avec sa vaste fenêtre de contexte, a été essentiel pour développer un chatbot capable de lire et de comprendre de vastes données textuelles, fournissant des analyses détaillées sur les mises à jour de Dota 2. La base de données Chroma a encore amplifié cette capacité, permettant la création d'une base de connaissances plus efficace et évolutive, tout en économisant l'utilisation des tokens dans le processus.

Bien que nous ayons atteint un succès notable, ce tutoriel d'application anthropique a également mis en lumière les domaines potentiels d'amélioration. Par exemple, affiner la compréhension de notre modèle des éléments de jeu spécifiques, comme les Tormentors dans Dota 2, et mettre continuellement à jour et étendre la base de connaissances pour garantir l'exactitude du chatbot.

Le potentiel de ce que nous pouvons construire ensuite avec la combinaison Claude + Chroma est vraiment stupéfiant. Qu'il s'agisse d'un chatbot pour une analyse approfondie de stratégie de jeu, d'un assistant virtuel ayant une expertise dans une large gamme de sujets, ou d'un outil puissant pour aider les chercheurs à donner du sens à d'énormes quantités de données - les possibilités ne sont limitées que par notre imagination, et oui, notre espace disque !

En lire plus

An illustration of book characters generated using Stable Diffusion
A tutorial on making API calls in monday.com to boost team productivity.

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés.

Ce site est protégé par hCaptcha, et la Politique de confidentialité et les Conditions de service de hCaptcha s’appliquent.