何か新しいことを学ぶときに圧倒されたことがありますか?情報に溺れているのに、実際には何も吸収していないような感じですか?私たちは皆、そこに行ったことがある。あなたのレベルを理解し、わかりやすく説明してくれる、パーソナライズされた学習仲間がいたら素晴らしいと思いませんか?まさにそれが私たちが一緒に築いていこうとしているものです。
このチュートリアルでは、BotHub API と PyQt5 を組み合わせて、インタラクティブで適応性のある学習ツールを作成する方法を説明します。これは単なるチャットボットではありません。これは、24 時間年中無休で利用できる個人家庭教師のようなものです。
構築を始める前に、ツールを集めましょう。いくつかの主要な Python ライブラリが必要になります。
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)
これらのライブラリは、ツールキットのさまざまな部分であると考えてください。ファイル管理 (os)、時間管理 (日時)、データ処理 (json) などの基本を処理するものもあります。データクラスやタイピングなど、その他の機能は、クリーンで整理されたコードを作成するのに役立ちます。本当の魔法は、AI の力を活用できる openai で起こります。 dotenv は機密情報 (API キーなど) を安全に保ちます。そして最後に、PyQt5 は、美しく直感的なユーザー インターフェイスの作成に役立ちます。
AI と通信するために、UserRequest クラスを作成します。これは、ユーザーが提供する情報を整理するのに役立ちます:
@dataclass class UserRequest: query: str user_level: str preferences: Dict
便利な @dataclass デコレーターを使用して、ユーザーのクエリ (質問している内容)、ユーザーのレベル (初心者、中級、または上級)、およびユーザーの好み (ユーザーがどのくらいの期間のデータを必要とするかなど) という 3 つの重要な情報を定義します。となる応答)。これにより、すべてが 1 つのオブジェクトにきちんとパッケージ化されます。
学習体験を真にパーソナライズするには、ユーザーが何をしたか、どのように学習したいかを記憶する必要があります。そこで 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)
UserSession は、会話履歴、ユーザーの好み、現在のレベルを追跡します。すべてを記憶し、ユーザーのニーズに適応する専属アシスタントがいるようなものです。
EducationalAssistant クラスはアプリケーションの中心です。 BotHub API との対話を担当します:
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}"
このクラスは、いくつかの重要なタスクを処理します。まず、API キーを使用して BotHub への接続を初期化します (これについては以前に説明しました)。また、対話を追跡するために UserSession も設定します。 generate_prompt メソッドはユーザーのリクエストを受け取り、それを API が理解できるプロンプトに変換します。最後に、generate_text_response はプロンプトを API に送信し、AI が生成した回答を取得します。
AI が考えている間にユーザーを待たせないように、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 は、PyQt5 の QThread に基づいており、バックグラウンドで API リクエストを実行し、ユーザー インターフェイスの応答性を確保します。
学び方は人それぞれ異なります。個々の設定に対応するために、PreferencesDialog を作成します。
@dataclass class UserRequest: query: str user_level: str preferences: Dict
このダイアログでは、AI の声のトーン、希望する応答の長さ、例を含めるかどうかなどの設定をカスタマイズできます。このレベルのカスタマイズにより、より魅力的で効果的な学習体験が保証されます。
最後に、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)
このクラスは、「チャット」と「履歴」の 2 つのタブを含むメイン ウィンドウを構築します。 「チャット」タブでは、ユーザーが質問を入力し、レベルを選択し、AI の応答を確認できます。 [履歴] タブには過去の会話が表示され、検索およびエクスポート機能が提供されます。
さて、私たちの作品に命を吹き込みましょう:
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}"
おめでとうございます!独自にパーソナライズされた AI 学習アシスタントを構築しました。
動作するアプリが完成したので、それをさらに改善する方法を考えてみましょう。 BotHub API は多くの柔軟性を提供します。単なるテキスト応答の代わりに、画像生成や音声文字起こしを統合することもできます。 BotHub では複数の AI モデルにアクセスできるため、さまざまなタスクに最適なモデルを選択できます。アシスタントが複雑なトピックを要約したり、言語を翻訳したり、練習用のクイズを生成したりできることを想像してみてください。可能性は無限大です。あなたは強固な基盤を築きました。さあ、探検に出かけましょう!
以上がチュートリアル: 自分の AI 学習仲間を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。