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.
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.
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.
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.
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.
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.
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.
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.
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!