Maison >développement back-end >Tutoriel Python >Tutoriel : Créez votre propre compagnon d'étude sur l'IA

Tutoriel : Créez votre propre compagnon d'étude sur l'IA

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 19:36:19952parcourir

Tutorial: Create Your Own AI Study Buddy

Vous êtes-vous déjà senti dépassé en apprenant quelque chose de nouveau ? Comme si vous étiez noyé sous les informations mais que vous n’absorbiez rien ? Nous sommes tous passés par là. Ne serait-il pas génial d'avoir un compagnon d'étude personnalisé qui comprend votre niveau et explique les choses d'une manière qui clique ? C'est exactement ce que nous allons construire ensemble.

Ce tutoriel vous montrera comment combiner l'API BotHub avec PyQt5 pour créer un outil d'apprentissage interactif et adaptable. Ce n'est pas juste un autre chatbot ; c'est plutôt un tuteur personnel, disponible 24h/24 et 7j/7.

Préparer votre espace de travail

Avant de commencer à construire, rassemblons nos outils. Nous aurons besoin de quelques bibliothèques Python clés :

import os
import datetime
import json
from dataclasses import dataclass
from typing import List, Dict
from openai import OpenAI
from dotenv import load_dotenv
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QMovie
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QTextEdit, QRadioButton, QButtonGroup, QPushButton, QGroupBox, QListWidget, QListWidgetItem, QTabWidget, QFileDialog, QComboBox, QCheckBox, QMessageBox, QDialogButtonBox, QSpinBox, QFormLayout, QDialog, QDateEdit)

Considérez ces bibliothèques comme différentes parties de votre boîte à outils. Certains gèrent les bases, comme la gestion des fichiers (os), la chronométrage (datetime) et la gestion des données (json). D'autres, comme les classes de données et la saisie, nous aident à écrire du code propre et organisé. La vraie magie opère avec openai, qui nous permet d'exploiter la puissance de l'IA. dotenv protège nos informations sensibles (comme les clés API). Et enfin, PyQt5 nous aide à créer une interface utilisateur belle et intuitive.

Rédiger les demandes des utilisateurs

Pour communiquer avec notre IA, nous allons créer une classe UserRequest. Cela permet d'organiser les informations fournies par l'utilisateur :

@dataclass
class UserRequest:
   query: str
   user_level: str
   preferences: Dict

À l'aide du décorateur pratique @dataclass, nous définissons trois informations clés : la requête de l'utilisateur (ce qu'il demande), son niveau d'utilisateur (débutant, intermédiaire ou avancé) et ses préférences (comme la durée pendant laquelle il souhaite que le réponse à être). Cela regroupe parfaitement tout dans un seul objet.

Mémorisation des sessions utilisateur

Pour rendre l'expérience d'apprentissage véritablement personnalisée, nous devons nous rappeler ce que l'utilisateur a fait et comment il aime apprendre. C'est là qu'intervient la classe UserSession :

class UserSession:
   def __init__(self):
       self.history: List[Dict] = []
       self.preferences: Dict = {}
       self.level: str = "beginner"


   def add_to_history(self, query, response):
       self.history.append({"query": query, "response": response, "timestamp": datetime.datetime.now().isoformat()})


   def update_preferences(self, new_preferences):
       self.preferences.update(new_preferences)

Une session utilisateur garde une trace de l'historique des conversations, des préférences de l'utilisateur et de son niveau actuel. C'est comme avoir un assistant dédié qui se souvient de tout et s'adapte aux besoins de l'utilisateur.

Le cerveau de l’opération : Assistante pédagogique

La classe EducationalAssistant est le cœur de notre application. Il est responsable de l'interaction avec l'API BotHub :

class EducationalAssistant:
   def __init__(self):
       load_dotenv()
       self.client = OpenAI(api_key=os.getenv('BOTHUB_API_KEY'), base_url='https://bothub.chat/api/v2/openai/v1')
       self.session = UserSession()


   def generate_prompt(self, request):
       prompt = f"""As an educational assistant, provide a response for a {request.user_level} level student.
       Query: {request.query}\n"""


       if request.preferences:
           prompt += "Consider these preferences:\n"
           for key, value in request.preferences.items():
               if key == "response_length":
                   prompt += f"Desired Length: Approximately {value} words\n"
               elif key == "include_examples" and value:
                   prompt += "Include Examples: Yes\n"
               else:
                   prompt += f"{key.capitalize()}: {value}\n"


       prompt += "Please provide a detailed explanation."
       return prompt
   def generate_text_response(self, request):
       try:
           response = self.client.chat.completions.create(
               model="claude-3.5-sonnet", // u can use any model in "Models available" on BotHub
               messages=[
                   {"role": "system", "content": "You are an educational assistant."},
                   {"role": "user", "content": self.generate_prompt(request)}
               ]
           )
           return response.choices[0].message.content
       except Exception as e:
           return f"Error generating text response: {e}"

Cette classe gère quelques tâches cruciales. Tout d’abord, il initialise la connexion à BotHub à l’aide de votre clé API (nous en avons parlé précédemment). Il configure également une UserSession pour garder une trace de l'interaction. La méthode generate_prompt prend la demande de l'utilisateur et la transforme en une invite que l'API peut comprendre. Enfin, generate_text_response envoie l'invite à l'API et récupère la réponse générée par l'IA.

Fluide et réactif : GenerateResponseThread

Pour éviter de faire attendre l'utilisateur pendant que l'IA réfléchit, nous utiliserons un fil de discussion séparé pour les appels d'API :

import os
import datetime
import json
from dataclasses import dataclass
from typing import List, Dict
from openai import OpenAI
from dotenv import load_dotenv
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QMovie
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QTextEdit, QRadioButton, QButtonGroup, QPushButton, QGroupBox, QListWidget, QListWidgetItem, QTabWidget, QFileDialog, QComboBox, QCheckBox, QMessageBox, QDialogButtonBox, QSpinBox, QFormLayout, QDialog, QDateEdit)

Ce GenerateResponseThread, basé sur QThread de PyQt5, exécute la requête API en arrière-plan, garantissant que l'interface utilisateur reste réactive.

Personnaliser l'expérience

Chacun apprend différemment. Pour répondre aux préférences individuelles, nous allons créer une boîte de dialogue Préférences :

@dataclass
class UserRequest:
   query: str
   user_level: str
   preferences: Dict

Cette boîte de dialogue permet aux utilisateurs de personnaliser les paramètres tels que le ton de la voix de l'IA, la longueur de réponse souhaitée et l'inclusion ou non d'exemples. Ce niveau de personnalisation garantit une expérience d'apprentissage plus engageante et efficace.

Construire l'interface

Enfin, créons l'interface utilisateur avec la classe EducationalAssistantGUI :

class UserSession:
   def __init__(self):
       self.history: List[Dict] = []
       self.preferences: Dict = {}
       self.level: str = "beginner"


   def add_to_history(self, query, response):
       self.history.append({"query": query, "response": response, "timestamp": datetime.datetime.now().isoformat()})


   def update_preferences(self, new_preferences):
       self.preferences.update(new_preferences)

Cette classe construit la fenêtre principale, qui comprend deux onglets : « Chat » et « Historique ». L'onglet « Chat » permet aux utilisateurs de saisir leurs requêtes, de sélectionner leur niveau et de voir les réponses de l'IA. L'onglet "Historique" affiche les conversations passées, offrant des fonctionnalités de recherche et d'exportation.

Lancement de votre compagnon d'étude sur l'IA

Maintenant, donnons vie à notre création :

class EducationalAssistant:
   def __init__(self):
       load_dotenv()
       self.client = OpenAI(api_key=os.getenv('BOTHUB_API_KEY'), base_url='https://bothub.chat/api/v2/openai/v1')
       self.session = UserSession()


   def generate_prompt(self, request):
       prompt = f"""As an educational assistant, provide a response for a {request.user_level} level student.
       Query: {request.query}\n"""


       if request.preferences:
           prompt += "Consider these preferences:\n"
           for key, value in request.preferences.items():
               if key == "response_length":
                   prompt += f"Desired Length: Approximately {value} words\n"
               elif key == "include_examples" and value:
                   prompt += "Include Examples: Yes\n"
               else:
                   prompt += f"{key.capitalize()}: {value}\n"


       prompt += "Please provide a detailed explanation."
       return prompt
   def generate_text_response(self, request):
       try:
           response = self.client.chat.completions.create(
               model="claude-3.5-sonnet", // u can use any model in "Models available" on BotHub
               messages=[
                   {"role": "system", "content": "You are an educational assistant."},
                   {"role": "user", "content": self.generate_prompt(request)}
               ]
           )
           return response.choices[0].message.content
       except Exception as e:
           return f"Error generating text response: {e}"

Félicitations ! Vous avez créé votre propre assistant d'apprentissage de l'IA personnalisé.


Maintenant que vous disposez d'une application fonctionnelle, réfléchissez à la manière dont vous pourriez l'améliorer encore ! L'API BotHub offre beaucoup de flexibilité. Au lieu de simples réponses textuelles, vous pouvez intégrer la génération d’images ou la transcription vocale. BotHub vous donne également accès à plusieurs modèles d'IA, vous permettant de choisir le meilleur pour différentes tâches. Imaginez que votre assistant soit capable de résumer des sujets complexes, de traduire des langues ou même de générer des quiz pratiques ! Les possibilités sont vastes. Vous avez construit une base solide ; maintenant, allez-y et explorez !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn