Fühlen Sie sich jemals überfordert, etwas Neues zu lernen? Als würden Sie in Informationen ertrinken, aber nichts wirklich aufnehmen? Wir waren alle dort. Wäre es nicht großartig, einen persönlichen Lernbegleiter zu haben, der Ihr Niveau versteht und Dinge auf eine Art und Weise erklärt, die Klick macht? Genau das werden wir gemeinsam aufbauen.
Dieses Tutorial zeigt Ihnen, wie Sie die BotHub-API mit PyQt5 kombinieren, um ein interaktives und anpassungsfähiges Lerntool zu erstellen. Es ist nicht nur ein weiterer Chatbot; Es ist eher wie ein persönlicher Nachhilfelehrer, der rund um die Uhr verfügbar ist.
Bevor wir mit dem Bau beginnen, packen wir unsere Werkzeuge zusammen. Wir benötigen ein paar wichtige Python-Bibliotheken:
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)
Stellen Sie sich diese Bibliotheken als verschiedene Teile Ihres Toolkits vor. Einige kümmern sich um die Grundlagen, wie Dateiverwaltung (OS), Zeitmessung (Datum/Uhrzeit) und Datenverarbeitung (JSON). Andere, wie Datenklassen und Typisierung, helfen uns, sauberen, organisierten Code zu schreiben. Die wahre Magie geschieht mit OpenAI, das uns die Kraft der KI nutzen lässt. dotenv schützt unsere sensiblen Informationen (wie API-Schlüssel). Und schließlich hilft uns PyQt5 dabei, eine schöne und intuitive Benutzeroberfläche zu erstellen.
Um mit unserer KI zu kommunizieren, erstellen wir eine UserRequest-Klasse. Dies hilft bei der Organisation der vom Benutzer bereitgestellten Informationen:
@dataclass class UserRequest: query: str user_level: str preferences: Dict
Mit dem praktischen @dataclass-Dekorator definieren wir drei wichtige Informationen: die Anfrage des Benutzers (was er fragt), seine Benutzerebene (Anfänger, Mittelstufe oder Fortgeschrittene) und seine Präferenzen (z. B. wie lange er möchte). Antwort sein). Dadurch wird alles ordentlich in einem einzigen Objekt verpackt.
Um das Lernerlebnis wirklich personalisiert zu gestalten, müssen wir uns daran erinnern, was der Benutzer getan hat und wie er gerne lernt. Hier kommt die UserSession-Klasse ins Spiel:
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)
Eine UserSession verfolgt den Konversationsverlauf, die Präferenzen des Benutzers und sein aktuelles Niveau. Es ist, als hätte man einen engagierten Assistenten, der sich alles merkt und sich an die Bedürfnisse des Benutzers anpasst.
Die EducationalAssistant-Klasse ist das Herzstück unserer Bewerbung. Es ist für die Interaktion mit der BotHub-API verantwortlich:
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}"
Dieser Kurs behandelt einige wichtige Aufgaben. Zunächst wird die Verbindung zu BotHub mithilfe Ihres API-Schlüssels initialisiert (wir haben bereits darüber gesprochen). Außerdem wird eine UserSession eingerichtet, um die Interaktion zu verfolgen. Die Methode „generate_prompt“ nimmt die Anfrage des Benutzers auf und wandelt sie in eine Eingabeaufforderung um, die die API verstehen kann. Schließlich sendet generic_text_response die Eingabeaufforderung an die API und ruft die von der KI generierte Antwort ab.
Um zu vermeiden, dass der Benutzer warten muss, während die KI denkt, verwenden wir einen separaten Thread für API-Aufrufe:
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)
Dieser GenerateResponseThread, der auf dem QThread von PyQt5 basiert, führt die API-Anfrage im Hintergrund aus und stellt so sicher, dass die Benutzeroberfläche reaktionsfähig bleibt.
Jeder lernt anders. Um auf individuelle Vorlieben einzugehen, erstellen wir einen PreferencesDialog:
@dataclass class UserRequest: query: str user_level: str preferences: Dict
In diesem Dialogfeld können Benutzer Einstellungen wie den Tonfall der KI, die gewünschte Antwortlänge und die Einbindung von Beispielen anpassen. Dieser Grad der Anpassung sorgt für ein ansprechenderes und effektiveres Lernerlebnis.
Zuletzt erstellen wir die Benutzeroberfläche mit der EducationalAssistantGUI-Klasse:
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)
Diese Klasse erstellt das Hauptfenster, das zwei Registerkarten enthält: „Chat“ und „Verlauf“. Auf der Registerkarte „Chat“ können Benutzer ihre Fragen eingeben, ihr Level auswählen und die Antworten der KI sehen. Die Registerkarte „Verlauf“ zeigt vergangene Konversationen an und bietet Such- und Exportfunktionen.
Jetzt erwecken wir unsere Kreation zum Leben:
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}"
Herzlichen Glückwunsch! Sie haben Ihren eigenen personalisierten KI-Lernassistenten erstellt.
Nachdem Sie eine funktionierende App haben, überlegen Sie, wie Sie sie noch besser machen können! Die BotHub-API bietet viel Flexibilität. Statt reiner Textantworten könnten Sie auch die Bildgenerierung oder Sprachtranskription integrieren. BotHub bietet Ihnen außerdem Zugriff auf mehrere KI-Modelle, sodass Sie das beste Modell für verschiedene Aufgaben auswählen können. Stellen Sie sich vor, Ihr Assistent könnte komplexe Themen zusammenfassen, Sprachen übersetzen oder sogar Übungsquiz erstellen! Die Möglichkeiten sind riesig. Sie haben ein solides Fundament geschaffen; Jetzt geh los und erkunde!
Das obige ist der detaillierte Inhalt vonTutorial: Erstellen Sie Ihren eigenen KI-Lernpartner. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!