在学习新东西时是否感到不知所措?就像你淹没在信息中但实际上没有吸收任何东西?我们都去过那里。拥有一个了解您的水平并以简单易懂的方式解释事物的个性化学习伙伴不是很棒吗?这正是我们要共同构建的。
本教程将向您展示如何将 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 生成的答案。
为了避免让用户在 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中文网其他相关文章!