一、任务目标
本文将利用大语言模型强大的对话能力,搭建一个PC端问答助手。具体来说,我们将使用API来调用我们想要的大模型,并结合Prompt让大模型根据任务类型生成对应的输出。为了更方便地调用大模型助手,我们将结合python第三方库中的语音识别库进行开发,实现调用麦克风语音输入和音箱语音响应的人机交互。
二、简易版问答助手
得益于目前高度集成的工具库,我们只需要少量的代码便可以实现语音的交互以及大模型的调用,这里直接给出代码:
import pyttsx3
import openai
import random
import speech_recognition as sr
# 使用默认麦克风
recognizer = sr.Recognizer()
microphone = sr.Microphone()
# 初始化tts引擎
engine = pyttsx3.init()
# 设置发音人的语音
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id)
# 设置发音人的语速
engine.setProperty('rate', 200)
# api
openai.api_key = "your api key"
openai.api_base = "your api base"
# 持续识别语音,直到用户输入退出指令
while True:
with microphone as source:
print("请开始说话...")
audio = recognizer.listen(source)
try:
# 将音频转换为文字
print('语音识别中...')
text = recognizer.recognize_google(audio, language='zh-CN')
print(f"你说了:{text}")
# 要转换的文本
# 这里使用一个简单的触发词
if '嘿小娜' == text:
responses = ['您好,有什么可以帮您的吗?', '在呢!有什么吩咐?', '需要我做些什么?']
response = random.choice(responses)
# 将文本转换为语音
engine.say(response)
# 播放声音
engine.runAndWait()
# 理解用户输入意图
elif '嘿小娜' in text and '再见' not in text:
chat_completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "system",
"content": "你是一个私人的电脑语音助手,名字叫小娜,你将以尊敬的语气回答你主人提出的问题。请注意,输入给你的文本是麦克风语音转化成的汉语文本,没有标点符号,你需要根据语境进行标点符号位置的判断从而理解语义,并回答相应的问题。需要注意的是,你回答的文字应当在50个汉字以内。"},