Après OpenAI, POC sur Mistral AI le concurrent français !

Introduction

Cet article explore un script Python développé comme un Proof of Concept (POC) pour interagir avec Mistral AI, une alternative française à OpenAI. Il reprend le principe du script développé précédement pour interagir avec OpenAI.

Collaboration avec GPT-4 pour le développement du script

Ce projet a été une “collaboration” avec ChatGPT-4, la dernière version de l’IA conversationnelle d’OpenAI. Ensemble, nous avons conçu le script Python, profitant de la capacité de GPT-4 à comprendre et à générer du code. Cette synergie entre l’expertise humaine et l’intelligence artificielle ouvre la voie à de nouvelles méthodes de développement et d’innovation.

Objectifs du Script

L’intention principale était d’expérimenter avec l’API Mistral AI en Python pour développer mes compétences sur le sujet.

  • Tester Mistral AI : Explorer les fonctionnalités de Mistral AI et comprendre comment l’utiliser efficacement.
  • Automatisation avec Python : Montrer comment Python peut être utilisé pour automatiser les interactions avec les APIs d’IA.
  • Enrichissement des Prompts : Expérimenter avec l’enrichissement des prompts en intégrant du contenu web récupéré via Selenium.

Potentiel du Script

Ce script ouvre la voie à diverses applications, notamment :

  • Génération de contenu enrichi : Enrichir dynamiquement les prompts avec des informations pertinentes issues du web.
  • Assistance virtuelle personnalisée : Utiliser l’IA pour créer des réponses personnalisées basées sur le contenu web.
  • Amélioration des outils d’automatisation : Intégrer l’IA dans les outils existants pour une meilleure performance.

Fonctionnement du Script

Le script mistral-ai.py utilise le modèle mistral-small pour générer des réponses. Voici son fonctionnement :

  1. Récupération du Contenu Web : Utilise Selenium pour extraire le contenu des URLs spécifiées dans le prompt.
  2. Génération des Réponses : Envoie le prompt enrichi à Mistral AI pour obtenir une réponse.

Remarques Importantes

  • Ce script est un POC : Il est destiné à des fins éducatives et d’expérimentation, et non pour une utilisation en production.
  • Toujours respecter les règles d’utilisation des API et des sites web : Lors de l’utilisation de l’API MistralAI et du scraping de sites web, assurez-vous de respecter les conditions d’utilisation et les politiques de confidentialité.

Code du Script mistral-ai.py

#!/usr/bin/env python3
import re
import sys
import os 
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage


def get_web_content(url):
    if not url:
        return ""

    # Configure Chrome options
    chrome_options = Options()

    # Create a new browser instance with the configured options
    driver = webdriver.Chrome(options=chrome_options)

    # Make a request to the web page
    driver.get(url)

    # Retrieve the JavaScript content of the page
    web_content = driver.execute_script("return document.documentElement.innerText")

    # Don't forget to close the browser when you're done
    driver.quit()

    return web_content

def get_response(question, client):
    urls = re.findall(r'(https?://\S+)', question)
    if urls:  # Vérifiez si une URL a été fournie
        for url in urls:
            web_content = get_web_content(url)
            if web_content:
                # Remplacez l'URL par le contenu du web dans le prompt
                question = question.replace(url, web_content)

    messages = [ChatMessage(role="user", content=question)]
    response = client.chat(model=model, messages=messages, safe_mode=False)

    for choice in response.choices:
        print(f"{choice.message.content}")


# Récupération de la question depuis l'argument de la ligne de commande
question = sys.argv[1] if len(sys.argv) > 1 else "Quelle est votre question ?"

api_key = os.getenv("MISTRAL_API_KEY", "YOUR_MISTRAL_API_KEY")
model = "mistral-small"

try:
    client = MistralClient(api_key=api_key)
    get_response(question, client)
except Exception as e:
    print(f"Une erreur est survenue : {e}")

try:
    del client
except TypeError:
    pass

Explication Détaillée du Script

Importation des Modules

  • os, sys : Utilisés pour les interactions avec le système d’exploitation.
  • argparse : Permet de gérer les arguments de ligne de commande.
  • re : Module pour le traitement des expressions régulières.
  • webdriver : Permet d’utiliser Selenium pour automatiser les actions dans un navigateur web.

Fonction get_web_content

  • Cette fonction utilise Selenium pour naviguer vers une URL et récupérer son contenu.
  • Elle est essentielle pour enrichir les prompts avec des informations issues d’Internet.

Fonction get_response

  • Traite les URLs trouvées dans le prompt.
  • Récupère leur contenu via get_web_content.
  • Envoie le prompt enrichi à Mistral AI pour obtenir une réponse.

Bloc main

  • Point d’entrée du script.
  • Gère les arguments de ligne de commande.
  • Initialise le client Mistral AI et traite la réponse.

Utilisation de Mistral AI

  • Le script interagit avec le modèle mistral-small.
  • Il envoie le prompt, enrichi par le contenu web, à Mistral AI pour obtenir une réponse pertinente.

Cet aperçu du script donne une idée de son fonctionnement et de sa structure, permettant de comprendre comment il utilise Python, Selenium et Mistral AI pour automatiser et enrichir les interactions avec l’IA.

Exemples d’Usage

# Optionnel - Vous aurez peut être besoin d'installer les dépendances : 
pip install selenium
pip install mistralai

# Définir la clé API Mistral AI
export MISTRAL_API_KEY="votre_clé_api"

# on rend le script executable
chmod 700 mistral-ai.py

./mistral-ai.py "Résume en français ce contenu : https://platform.openai.com/docs/guides/prompt-engineering"

Ce guide partage des stratégies et tactiques pour obtenir de meilleurs résultats des grands modèles linguistiques (parfois appelés modèles GPT, tels que GPT-4). Les méthodes décrites peuvent être déployées en combinaison pour un effet plus important. L'expérimentation est encouragée pour trouver les méthodes qui fonctionnent le mieux pour vous.

Certains des exemples présentés fonctionnent actuellement uniquement avec le modèle le plus capable, gpt-4. En général, si vous constatez qu'un modèle échoue à une tâche et qu'un modèle plus capable est disponible, il vaut souvent la peine d'essayer à nouveau avec le modèle plus capable.

Des exemples de invites sont également fournis pour montrer ce que les modèles sont capables de faire.

Voici les six stratégies présentées dans le guide :

1. Rédiger des instructions claires
2. Fournir des détails dans votre requête pour obtenir des réponses plus pertinentes
3. Demander au modèle d'adopter une personnalité
4. Utiliser des délimiteurs pour indiquer distinctement les parties de l'entrée
5. Spécifier les étapes requises pour terminer une tâche
6. Fournir des exemples et spécifier la longueur de la sortie

Le guide décrit également des tactiques pour améliorer les performances des modèles, telles que la décomposition de tâches complexes en tâches plus simples, l'utilisation de références textuelles pour aider les modèles à fournir des réponses moins fabriquées, et l'utilisation de l\'exécution de code pour effectuer des calculs plus précis ou appeler des API externes.

Enfin, le guide présente des stratégies pour tester systématiquement les changements apportés aux systèmes en évaluant les sorties des modèles par rapport aux réponses standardisées.


# Sans url dans le prompt :
./mistral-ai.py "que sais tu faire ?"

Je suis capable de comprendre et de générer du langage naturel, ce qui me permet de répondre à une grande variété de questions, 
de traduire du texte d'une langue à une autre, de résumer du texte, de répondre à des demandes de manière polie, et bien plus encore. 
Je peux également effectuer des tâches telles que la recherche de informations sur le web, la programmation, la création de contenu 
et l'automatisation de tâches. 
Cependant, il est important de noter que mes compétences et connaissances sont limitées à ce qui m'a été appris et je suis dépendant 
de la qualité de l'information avec laquelle je suis entrainé.