这一个项目我实现了一个简易的coze,pycharm,百度云的交互,实现了一个智能体能够识别你的语音来回答你的问题:
总页面:
当你再对话框里面输入想问的问题,上面的面板中可以回答你的问题:
main函数:
# 导入系统相关模块,用于处理命令行参数等
import sys
# 导入PySide6的QtWidgets模块,用于创建GUI应用程序
from PySide6.QtWidgets import QApplication, QMainWindow
# 导入自定义的AI_botImpl类,该类实现了AI机器人的具体功能
from chatImpl import chatImpl
if __name__ == '__main__':
app = QApplication(sys.argv) # 创建应用
mw = QMainWindow() # 创建窗口
impl = chatImpl(mw) # 创建窗口实现,传入窗口
mw.show() # 显示窗口
sys.exit(app.exec()) # 进入QT事件循环
导入需要的模块::
import chat
import os
import pyaudio
from coze import Coze
from aip import AipSpeech
import pygame
import tempfile
from PySide6.QtCore import QDateTime, QThread, Signal, Slot
初始化百度云的 APP_ID、API_KEY 和 SECRET_KEY,AipSpeech 客户端:
BAIDU_APP_ID = '110832408'
BAIDU_API_KEY = '55mANs1Q452ZOTvVmhfmmucy'
BAIDU_SECRET_KEY = 'qlG6V7UOSb4A2ne2oEEXayNgMd2K2VQq'
os.environ['COZE_API_TOKEN'] = 'pat_K2wcW1yYfsVIK4XxXVUsey6SeIlnqKi0UuNM5MzUaimHZuC5BbTWGoy5Y8Ogq5pq'
os.environ['COZE_BOT_ID'] = "7407351574039363647"
# 初始化 AipSpeech 客户端
aip_client = AipSpeech(BAIDU_APP_ID, BAIDU_API_KEY, BAIDU_SECRET_KEY)
在单独的线程中处理发送给 Coze 平台的消息,并通过信号将回复传递给主线程。
class CozeThread(QThread):
# 定义一个信号,用于在线程内部发送消息到主线程
message_received = Signal(str)
def __init__(self, message):
# 线程初始化
super().__init__()
# 存储接收到的消息
self.message = message
def run(self):
# 初始化与Coze平台的聊天接口
chat = Coze(api_token=os.environ['COZE_API_TOKEN'],
bot_id=os.environ['COZE_BOT_ID'],
max_chat_rounds=20,
stream=True)
# 使用聊天接口处理存储的消息
res = chat(self.message)
# 将处理后的消息通过信号发送出去
self.message_received.emit(res)
在单独的线程中将音频数据转换为文本
class SpeechToTextThread(QThread):
# 定义一个信号,用于在线程中发送识别到的文本
text_received = Signal(str)
def __init__(self, audio_data):
super().__init__()
self.audio_data = audio_data
def run(self):
"""
线程运行方法。
通过调用语音识别API将音频数据转换为文本,并通过信号发送识别结果。
"""
# 调用百度语音识别API进行语音识别
result = aip_client.asr(self.audio_data, 'wav', 16000, {'dev_pid': 1537})
# 提取识别结果文本,若无结果则默认为空字符串
text = result['result'][0] if 'result' in result else ""
# 通过信号发送识别到的文本
self.text_received.emit(text)
在单独的线程中将文本转换为语音并播放。
class TextToSpeechThread(QThread):
def __init__(self, text):
super().__init__() # 调用基类QThread的构造方法初始化线程。
self.text = text # 保存传入的文本内容。
def run(self):
# 调用百度AI客户端的合成方法,将文本转换为语音数据。
result = aip_client.synthesis(self.text, 'zh', 1, {'vol': 5, 'per': 0})
# 如果转换结果不是字典类型(字典类型通常表示发生错误),则继续处理语音数据。
if not isinstance(result, dict):
# 创建一个临时文件,用于保存语音数据,并写入语音数据。
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_file:
temp_file.write(result)
temp_file_path = temp_file.name # 获取临时文件的路径。
# 调用播放音频方法,播放保存在临时文件中的语音。
self.play_audio(temp_file_path)
def play_audio(self, file_path):
pygame.mixer.init() # 初始化pygame的混音器。
pygame.mixer.music.load(file_path) # 加载指定路径的音频文件。
pygame.mixer.music.play() # 播放音频文件。
# 循环等待直到音频播放完毕。
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
实现应用程序的主要逻辑,包括发送消息、录音、处理语音转文字的结果以及展示回复。
class chatImpl(chat.Ui_MainWindow):
# 初始化方法,用于设置UI界面和绑定事件处理函数。
def __init__(self, window):
super().__init__()
self.setupUi(window)
self.pushButton.clicked.connect(self.sendMessage)
self.pushButton_2.clicked.connect(self.recordAudio)
self.coze_thread = None
self.speech_to_text_thread = None
self.text_to_speech_thread = None
# 发送消息方法
def sendMessage(self):
# 获取用户输入的消息
message = self.textEdit.toPlainText()
if message:
# 生成当前时间的时间戳
timestamp = QDateTime.currentDateTime().toString()
# 构造HTML格式的消息,包括头像、消息内容和时间
html_message = f"""
<div style="text-align: right; margin-bottom: 10px;">
<img src="D:/Python Code/fs.code/python基础/企业级聊天客服智能体机器人/images/男头像.png" style="width: 50px; height: 50px; object-fit: cover;"/><br/>
<span style="font-size: 10px; color: black;">{timestamp}</span><br/>
<div style="background-color: #e0e0e0; border-radius: 10px; padding: 5px; max-width: 300px; display: inline-block;">
{message}
</div>
<div style="clear: both;"></div>
</div>
"""
# 将HTML格式的消息添加到文本浏览器中显示
self.textBrowser.append(html_message)
# 创建一个CozeThread实例,传递当前消息给线程
self.coze_thread = CozeThread(message)
# 当线程接收到消息时,连接到displayResponse方法进行处理
self.coze_thread.message_received.connect(self.displayResponse)
# 启动线程,开始执行线程中的任务
self.coze_thread.start()
# 清空文本编辑区域的内容,准备下一次输入
self.textEdit.clear()
项目背景
随着人工智能技术的快速发展,我们旨在开发一款名为Coze的智能体,以提供更加个性化和自动化的用户体验。Coze智能体能够通过自然语言处理与用户进行交互,并执行一系列预设任务,如日程管理、信息检索和简单的数据分析。
项目目标
- 开发一个能够理解自然语言并执行任务的智能体。
- 实现与PyCharm集成,以辅助开发人员自动执行常见的编程任务。
- 利用百度云服务进行数据存储和处理。
实施过程
技术选型
- 编程语言:Python。
- 开发环境:PyCharm。
- 云服务:百度云。