OpenAI 다음으로 프랑스의 경쟁자인 Mistral AI를 활용한 POC!

소개

이 글에서는 OpenAI와 상호작용하기 위해 개발된 스크립트 원리를 바탕으로, Mistral AI라는 프랑스의 대안을 활용하기 위한 개념 증명(POC) Python 스크립트를 탐구합니다.

스크립트 개발을 위한 GPT-4와의 협력

이 프로젝트는 OpenAI의 최신 대화형 AI인 ChatGPT-4와의 “협력“을 통해 진행되었습니다. 함께 Python 스크립트를 설계했으며, GPT-4의 코드 이해 및 생성 능력을 활용했습니다. 인간의 전문성과 인공지능의 시너지는 새로운 개발 및 혁신 방법을 열어줍니다.

스크립트의 목표

주된 목표는 Mistral AI API를 Python으로 실험하여 해당 주제에 대한 내 역량을 개발하는 것이었습니다.

  • Mistral AI 테스트 : Mistral AI의 기능을 탐색하고 효과적으로 사용하는 방법을 이해합니다.
  • Python을 통한 자동화 : Python을 사용하여 AI API와의 상호작용을 자동화하는 방법을 보여줍니다.
  • 프롬프트 확장 : Selenium을 통해 웹에서 회수한 콘텐츠를 포함하여 프롬프트를 확장하는 실험을 합니다.

스크립트의 가능성

이 스크립트는 다양한 응용 프로그램의 가능성을 열어줍니다. 특히:

  • 풍부한 콘텐츠 생성 : 웹에서 수집한 관련 정보를 사용해 프롬프트를 동적으로 확장합니다.
  • 맞춤형 가상 비서 : 웹 콘텐츠를 바탕으로 맞춤형 응답을 생성하기 위해 AI를 활용합니다.
  • 자동화 도구 개선 : 기존 도구에 AI를 통합하여 성능을 향상시킵니다.

스크립트의 작동 원리

mistral-ai.py 스크립트는 mistral-small 모델을 사용하여 응답을 생성합니다. 작동 방식은 다음과 같습니다:

  1. 웹 콘텐츠 회수 : Selenium을 사용하여 프롬프트에 지정된 URL들의 콘텐츠를 추출합니다.
  2. 응답 생성 : 프롬프트를 확장하여 Mistral AI에 전송하고 응답을 받습니다.

중요한 주의사항

  • 이 스크립트는 POC입니다 : 교육 목적 및 실험용으로만 사용되며, 실제 프로덕션용이 아닙니다.
  • API 및 웹사이트 사용 규칙을 항상 준수하십시오 : MistralAI API를 사용하거나 웹사이트를 스크래핑할 때는 사용 조건 및 개인정보 보호정책을 준수해야 합니다.

다음은 블로그 원문에 통합된 코드 업데이트 및 사용 예제 섹션입니다:

2024년 9월 28일 업데이트: Mistral AI를 위한 스크립트 수정

2024년 1월 초기 발표 이후, 특히 최신 버전의 Mistral API 및 사용된 라이브러리(Selenium 및 ChromeDriver)로 여러 중요한 변화가 있었습니다. 이전 스크립트는 이제 더 이상 사용되지 않으며, 이러한 새로운 버전과의 호환성을 보장하도록 업데이트되었습니다. 새로운 스크립트는 mistral-large-latest 모델을 사용하며 webdriver_manager를 통한 ChromeDriver의 자동 관리 기능을 포함합니다.

새로운 mistral-ai.py 스크립트 코드

#!/usr/bin/env python3
import re
import sys
import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from mistralai import Mistral


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

    try:
        # Configure Chrome options
        chrome_options = Options()

        # Use ChromeDriverManager to automatically manage the ChromeDriver installation
        driver = webdriver.Chrome(
            service=Service(ChromeDriverManager().install()), 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")

        # Close the browser when you're done
        driver.quit()

        return web_content if web_content else None
    except Exception as e:
        return None


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)
            else:
                print(f"Erreur: Le contenu web pour {url} ne peut être récupéré.")
                sys.exit(1)  # Exit the script with an error code

    messages = [{"role": "user", "content": question}]
    response = client.chat.complete(model=model, messages=messages)

    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-large-latest"

try:
    client = Mistral(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

사용 예제

# Optionnel - Installer les dépendances si nécessaire :
pip install selenium
pip install mistralai
pip install webdriver_manager

# 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 "Fais moi un résumé de ce site stp : https://docs.mistral.ai/"
### Résumé du Site de Mistral AI

#### Introduction
Mistral AI est un laboratoire de recherche spécialisé dans la création des meilleurs modèles open source au monde. La Plateforme permet aux développeurs et aux entreprises de créer de nouveaux produits et applications grâce aux modèles de langage (LLMs) open source et commerciaux de Mistral.

#### Modèles de Langage de Mistral AI
Mistral AI propose des modèles généralistes, spécialisés et de recherche, tous à la pointe de la technologie, et dotés de capacités multilingues, de génération de code, de mathématiques et de raisonnement avancé.

##### Modèles Généralistes
- **Mistral Large**: Le modèle de raisonnement de haut niveau pour des tâches complexes, avec la version v2 sortie en juillet 2024.
- **Mistral NeMo**: Le meilleur modèle multilingue open source, sorti en juillet 2024.

##### Modèles Spécialisés
- **Codestral**: Le modèle de langage de pointe pour le codage, sorti en mai 2024.
- **Mistral Embed**: Le modèle sémantique pour l'extraction de représentations de textes.

##### Modèles de Recherche
- **Mistral 7b**: Le premier modèle dense, sorti en septembre 2023.
- **Mixtral 8x7b**: Le premier modèle sparse mixture-of-experts, sorti en décembre 2023.
- **Mixtral 8x22b**: Le meilleur modèle open source à ce jour, sorti en avril 2024.
- **Mathstral 7b**: Le premier modèle de mathématiques open source, sorti en juillet 2024.
- **Codestral Mamba**: Le premier modèle mamba 2 open source, sorti en juillet 2024.

#### Exploration des APIs de Mistral AI
Les APIs de Mistral AI permettent de développer des applications LLM via différentes fonctionnalités :
- **Génération de texte** : Permet le streaming et l'affichage en temps réel des résultats partiels du modèle.
- **Génération de code** : Facilite les tâches de génération de code, y compris le remplissage de texte et la complétion de code.
- **Embeddings** : Utile pour la RAG (Retrieval-Augmented Generation) où il représente la signification du texte sous forme de liste de nombres.
- **Appel de fonctions** : Permet aux modèles Mistral de se connecter à des outils externes.
- **Fine-tuning** : Permet aux développeurs de créer des modèles personnalisés et spécialisés.
- **Mode JSON** : Permet aux développeurs de définir le format de réponse en objet JSON.
- **Guardrailing** : Permet aux développeurs d'appliquer des politiques au niveau système des modèles Mistral.

#### Liens Utiles
- **Quickstart**
- **Documentation**
- **Contribution**
- **Communauté**
- **Discord**
- **GitHub**

#### Droits d'Auteur
Copyright © 2024 Mistral AI.

(라이브러리 최신 버전에서는 사용되지 않는) 구 버전의 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

스크립트 상세 설명

모듈 임포트

  • os, sys : 운영 체제와의 상호작용에 사용됩니다.
  • argparse : 명령행 인수를 처리하기 위해 사용됩니다.
  • re : 정규 표현식 처리를 위한 모듈.
  • webdriver : 웹 브라우저의 동작을 자동화하기 위해 Selenium을 사용합니다. ### 함수 get_web_content
  • 이 함수는 Selenium을 사용하여 URL로 이동하고 해당 콘텐츠를 가져옵니다.
  • 이는 인터넷에서 가져온 정보로 프롬프트를 풍부하게 하는 데 필수적입니다.

함수 get_response

  • 프롬프트에서 발견된 URL을 처리합니다.
  • get_web_content 을 통해 콘텐츠를 가져옵니다.
  • 가져온 프롬프트를 Mistral AI에 보내어 응답을 받습니다.

블록 main

  • 스크립트의 진입점.
  • 명령줄 인수를 처리합니다.
  • Mistral AI 클라이언트를 초기화하고 응답을 처리합니다.

Mistral AI 사용

  • 스크립트는 mistral-small 모델과 상호작용합니다.
  • 웹 콘텐츠로 풍부하게 된 프롬프트를 Mistral AI에 보내어 적절한 응답을 받습니다.

이 스크립트의 개요는 어떻게 Python, Selenium 및 Mistral AI를 사용하여 인공지능과의 상호작용을 자동화하고 풍부하게 하는지에 대한 아이디어를 제공합니다.

사용 예제

# 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é.

이 문서는 gpt-4o 모델을 사용하여 fr 버전에서 ko 언어로 번역되었습니다. 번역 과정에 대한 자세한 내용은 https://gitlab.com/jls42/ai-powered-markdown-translator를 참고하십시오.