首页 > 后端开发 > Python教程 > 教程:创建您自己的 AI 学习伙伴

教程:创建您自己的 AI 学习伙伴

Susan Sarandon
发布: 2024-12-03 19:36:19
原创
916 人浏览过

Tutorial: Create Your Own AI Study Buddy

在学习新东西时是否感到不知所措?就像你淹没在信息中但实际上没有吸收任何东西?我们都去过那里。拥有一个了解您的水平并以简单易懂的方式解释事物的个性化学习伙伴不是很棒吗?这正是我们要共同构建的。

本教程将向您展示如何将 BotHub API 与 PyQt5 结合起来创建一个交互式且适应性强的学习工具。它不仅仅是另一个聊天机器人;它是一个聊天机器人。它更像是私人导师,24/7 全天候提供服务。

准备您的工作空间

在开始构建之前,让我们先收集工具。我们需要一些关键的 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)、计时 (datetime) 和数据处理 (json)。其他的,比如数据类和类型,可以帮助我们编写干净、有组织的代码。真正的魔力发生在 openai 上,它让我们能够利用人工智能的力量。 dotenv 保证我们敏感信息(如 API 密钥)的安全。最后,PyQt5 帮助我们创建了一个漂亮且直观的用户界面。

制定用户请求

为了与我们的 AI 进行通信,我们将创建一个 UserRequest 类。这有助于组织用户提供的信息:

@dataclass
class UserRequest:
   query: str
   user_level: str
   preferences: Dict
登录后复制
登录后复制

使用方便的 @dataclass 装饰器,我们定义了三个关键信息:用户的查询(他们要问什么)、他们的用户级别(初级、中级或高级)以及他们的偏好(比如他们想要查询多长时间)回应是)。这将所有内容整齐地打包到一个对象中。

记住用户会话

为了使学习体验真正个性化,我们需要记住用户做了什么以及他们喜欢如何学习。这就是 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 生成的答案。

流畅且响应迅速: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)
登录后复制
登录后复制

此类构建主窗口,其中包括两个选项卡:“聊天”和“历史记录”。 “聊天”选项卡允许用户输入查询、选择级别并查看人工智能的响应。 “历史记录”选项卡显示过去的对话,提供搜索和导出功能。

启动你的人工智能学习伙伴

现在,让我们将我们的创作变为现实:

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板