ホームページ > バックエンド開発 > Python チュートリアル > チュートリアル: 自分の AI 学習仲間を作成する

チュートリアル: 自分の AI 学習仲間を作成する

Susan Sarandon
リリース: 2024-12-03 19:36:19
オリジナル
916 人が閲覧しました

Tutorial: Create Your Own AI Study Buddy

何か新しいことを学ぶときに圧倒されたことがありますか?情報に溺れているのに、実際には何も吸収していないような感じですか?私たちは皆、そこに行ったことがある。あなたのレベルを理解し、わかりやすく説明してくれる、パーソナライズされた学習仲間がいたら素晴らしいと思いませんか?まさにそれが私たちが一緒に築いていこうとしているものです。

このチュートリアルでは、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

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 が生成した回答を取得します。

スムーズで応答性の高い: GenerateResponseThread

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 の応答を確認できます。 [履歴] タブには過去の会話が表示され、検索およびエクスポート機能が提供されます。

AI Study Buddy を起動する

さて、私たちの作品に命を吹き込みましょう:

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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート