Pernah merasa terharu semasa mempelajari sesuatu yang baharu? Seperti anda tenggelam dalam maklumat tetapi tidak benar-benar menyerap apa-apa? Kami semua pernah ke sana. Bukankah bagus untuk mempunyai teman belajar yang diperibadikan yang memahami tahap anda dan menerangkan perkara dengan cara yang mengklik? Itulah yang akan kita bina bersama.
Tutorial ini akan menunjukkan kepada anda cara menggabungkan API BotHub dengan PyQt5 untuk mencipta alat pembelajaran yang interaktif dan boleh disesuaikan. Ia bukan sekadar chatbot lain; ia lebih seperti tutor peribadi, tersedia 24/7.
Sebelum kita mula membina, mari kumpulkan alatan kita. Kami memerlukan beberapa perpustakaan Python utama:
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)
Fikirkan perpustakaan ini sebagai bahagian lain dari kit alat anda. Sesetengah mengendalikan asas, seperti pengurusan fail (os), ketepatan masa (datetime) dan pengendalian data (json). Lain-lain, seperti kelas data dan menaip, membantu kami menulis kod yang bersih dan teratur. Keajaiban sebenar berlaku dengan openai, yang membolehkan kita memanfaatkan kuasa AI. dotenv memastikan maklumat sensitif kami (seperti kunci API) selamat. Dan akhirnya, PyQt5 membantu kami mencipta antara muka pengguna yang cantik dan intuitif.
Untuk berkomunikasi dengan AI kami, kami akan membuat kelas UserRequest. Ini membantu menyusun maklumat yang diberikan pengguna:
@dataclass class UserRequest: query: str user_level: str preferences: Dict
Menggunakan penghias @dataclass yang berguna, kami mentakrifkan tiga maklumat penting: pertanyaan pengguna (apa yang mereka tanya), peringkat_pengguna mereka (pemula, pertengahan atau lanjutan) dan pilihan mereka (seperti berapa lama mereka mahu tindak balas untuk menjadi). Ini membungkus semuanya dengan kemas menjadi satu objek.
Untuk menjadikan pengalaman pembelajaran benar-benar diperibadikan, kita perlu ingat perkara yang telah dilakukan oleh pengguna dan cara mereka suka belajar. Di situlah kelas UserSession masuk:
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)
Sesi Pengguna menjejaki sejarah perbualan, pilihan pengguna dan tahap semasa mereka. Ia seperti mempunyai pembantu yang berdedikasi yang mengingati segala-galanya dan menyesuaikan diri dengan keperluan pengguna.
Kelas EducationalAssistant ialah nadi permohonan kami. Ia bertanggungjawab untuk berinteraksi dengan 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}"
Kelas ini mengendalikan beberapa tugas penting. Pertama, ia memulakan sambungan ke BotHub menggunakan kunci API anda (kami telah membincangkannya sebelum ini). Ia juga menyediakan UserSession untuk menjejaki interaksi. Kaedah generate_prompt mengambil permintaan pengguna dan mengubahnya menjadi gesaan yang boleh difahami oleh API. Akhir sekali, generate_text_response menghantar gesaan kepada API dan mendapatkan semula jawapan yang dijana AI.
Untuk mengelakkan pengguna menunggu semasa AI berfikir, kami akan menggunakan urutan berasingan untuk panggilan 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)
GenerateResponseThread ini, berdasarkan QThread PyQt5, menjalankan permintaan API di latar belakang, memastikan antara muka pengguna kekal responsif.
Setiap orang belajar secara berbeza. Untuk memenuhi keutamaan individu, kami akan mencipta Dialog Keutamaan:
@dataclass class UserRequest: query: str user_level: str preferences: Dict
Dialog ini membolehkan pengguna menyesuaikan tetapan seperti nada suara AI, panjang tindak balas yang diingini dan sama ada untuk memasukkan contoh. Tahap penyesuaian ini memastikan pengalaman pembelajaran yang lebih menarik dan berkesan.
Akhir sekali, mari buat antara muka pengguna dengan kelas 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)
Kelas ini membina tetingkap utama, yang merangkumi dua tab: "Sembang" dan "Sejarah." Tab "Sembang" membolehkan pengguna memasukkan pertanyaan mereka, memilih tahap mereka dan melihat respons AI. Tab "Sejarah" memaparkan perbualan lalu, menawarkan fungsi carian dan eksport.
Sekarang, mari hidupkan ciptaan kita:
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}"
Tahniah! Anda telah membina pembantu pembelajaran AI peribadi anda sendiri.
Sekarang anda mempunyai apl yang berfungsi, fikirkan tentang cara anda boleh menjadikannya lebih baik! API BotHub menawarkan banyak fleksibiliti. Daripada hanya respons teks, anda boleh menyepadukan penjanaan imej atau transkripsi pertuturan. BotHub juga memberi anda akses kepada berbilang model AI, membolehkan anda memilih yang terbaik untuk tugasan yang berbeza. Bayangkan pembantu anda dapat meringkaskan topik yang rumit, menterjemah bahasa, atau menjana kuiz latihan! Kemungkinan besar. Anda telah membina asas yang kukuh; sekarang pergi dan teroka!
Atas ialah kandungan terperinci Tutorial: Cipta Rakan Belajar AI Anda Sendiri. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!