继 OpenAI 之后,对法国竞争对手 Mistral AI 的 POC!

引言

本篇文章探讨了一个作为概念验证 (POC) 开发的 Python 脚本,用于与 Mistral AI - 一个 OpenAI 的法国替代方案进行交互。 这个脚本继承了之前为了与 OpenAI 交互而开发的脚本的原理。

与 GPT-4 合作开发脚本

这个项目是与 ChatGPT-4(OpenAI 的最新会话式人工智能版本)的一次 “合作"。我们共同设计了 Python 脚本,利用 GPT-4 理解和生成代码的能力。这种人类专家知识和人工智能之间的协同作用为开发和创新的新方法铺平了道路。

脚本目标

主要意图是利用 Python 与 Mistral AI API 进行实验,以此来发展我的相关技能。

  • 测试 Mistral AI:探索 Mistral AI 的功能,并了解如何有效使用。
  • 用 Python 实现自动化:展示如何使用 Python 自动化与人工智能 APIs 的交互。
  • 提示的丰富化:通过整合通过 Selenium 检索到的网络内容,实验提示的丰富化。

脚本潜力

该脚本开辟了各种应用的道路,包括:

  • 丰富内容生成:用网页内容动态丰富提示。
  • 个性化虚拟协助:利用人工智能创建基于网络内容的个性化回复。
  • 自动化工具的改进:将人工智能集成到现有工具中,以提高性能。

脚本运作方式

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

  • 处理在提示中找到的URLs。
  • 通过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-4-1106-preview从法语版本翻译成中文。关于翻译过程的更多信息,请访问 https://gitlab.com/jls42/ai-powered-markdown-translator